在 Java Web 项目中编译 Servlet 和其他 类

Compile Servlets and others classes in a Java Web project

我是 Java 的新手,我正在尝试仅使用命令行在 linux 上编译我的 Servlet。在我的浏览器上看到这个错误后,我决定这样做: 命令 javac -classpath /opt/tomcat/lib/servlet-api.jar ComputerSV.java 给出以下错误:

ComputerSV.java:13: error: cannot find symbol
        ArrayList<Computer> computers = new ArrayList<>();
                  ^
  symbol:   class Computer
  location: class ComputerSV
ComputerSV.java:15: error: cannot find symbol
            new Computer(
                ^
  symbol:   class Computer
  location: class ComputerSV
ComputerSV.java:25: error: cannot find symbol
            new Computer(
                ^
  symbol:   class Computer
  location: class ComputerSV
3 errors

我的 Servlet 源代码是:

package com.lcdss.compmng.controller;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;[Imgur](http://i.imgur.com/D6rN3UA.png)
import javax.servlet.http.HttpServletResponse;

class ComputerSV extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        ArrayList<Computer> computers = new ArrayList<>();
        computers.add(
            new Computer(
                1,
                "HP",
                "hostname",
                "Windows 10 Pro x64",
                "Intel I7 7700K 4.2 GHz",
                2048,
                8196,
                "Anapolis"
            ),
            new Computer(
                2,
                "DELL",
                "hostname",
                "Windows 10 Home Basic x64",
                "Intel I7 7500U 2.5 GHz",
                512,
                4098,
                "Goiania"
            )
        );

        request.setAttribute("computers", computers);
        request.getRequestDispatcher("computer/index.jsp").forward(request, response);
    }
}

我正在使用 tomcat 作为 Web 服务器和一个文本编辑器 (Atom) 来帮助我完成这个挑战(以及现在的 Whosebug)。我现在的问题是编译器没有找到我已经编译但没有成功修复此错误的 class 计算机。

与tomcat.It无关,是正常的编译问题。 在编译time/phase期间,当ArrayList<Computer> computers = new ArrayList<>();正在编译时,jvm会寻找class Computer,因为你已经指定你的arraylist将只包含这个type.But 由于此时没有计算机class,它会抛出一个异常,ClassNotFoundException。要成功运行这个,最好先创建一个 class Computer,编译它然后编译这个 class.

我错过了对计算机的导入 class 并且在上面的示例中存在语法错误。

package com.lcdss.compmng.controller;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lcdss.compmng.entity.Computer;

public class ComputerSV extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        ArrayList<Computer> computers = new ArrayList<>();

        computers.add(
            new Computer(
                1,
                "HP",
                "hostname",
                "Windows 10 Pro x64",
                "Intel I7 7700K 4.2 GHz",
                2048,
                8196,
                "Anapolis"
            )
        );

        computers.add(
            new Computer(
                2,
                "DELL",
                "hostname",
                "Windows 10 Home Basic x64",
                "Intel I7 7500U 2.5 GHz",
                512,
                4098,
                "Goiania"
            )
        );

        request.setAttribute("computers", computers);
        request.getRequestDispatcher("computer/index.jsp").forward(request, response);
    }
}

为了编译我使用了命令javac -cp /opt/tomcat/webapps/compmng/WEB-INF/classes:/opt/tomcat/lib/servlet-api.jar ComputerSV.java。第一个 classpath (cp) 通知编译器我的 classes 在哪里以及包名是什么。