0

我在 Eclipse 中使用 Tomcat 7.0。tomcat服务器与eclipse同步。创建我的第一个类后,我将 .java 文件放在 src/(default package)/HelloWorld.java 下(我知道这不是一个好习惯,但只是为了测试)

内容如下,比较简单:

import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/HelloWorld")

public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println ("Hello World");
    }
}

许多教程声称我必须使用它javac来编译代码。但我什么也没做,它运行没有问题。此外,每次我更改代码时,它都会像魔术一样立即更新。一定有什么东西在起作用,但我不知道它是什么。

是的,这显然是一个新手问题,所以欢迎任何帮助。此外,如果您有任何系统且易于遵循的教程链接,那就更好了。我正在寻找他们几天,但得到了很多不一致的答案。

4

3 回答 3

12

对我来说,你混合了两种主要技术——tomcat 作为 web 容器,eclipse 作为你的 IDE。他们的整合让你感到困惑。让我们暂时离开 JSP,只讨论 servlet,因为它更容易混淆

Tomcat 无法使用源文件 (*.java)。例如,您必须使用 javac 编译您的应用程序并创建一个名为 WAR - web 存档 - 一个 zip 文件,其中将包含您编译的类并遵守一些 tomcat 理解的 EE 标准(也可以使用文件夹而不是 zip,但让我们把它除此之外,它与此解释无关)。

除其他外,这场战争(一旦正确编译)将包含您编译的 servlet 类 HelloWorld.class)。

一旦tomcat启动并识别出部署文件夹中的war文件,它就会打开它并在运行时加载。没有编译,只有运行时加载。

现在人们在这里谈论JSP。事实上,JSP 在技术上等同于 servlet,但类似于 HTML。您放置扩展名为 .jsp 的文件并构建您的 WAR。java 编译器无法读取 JSP 文件,因此您应该以某种方式将它们放入您的 war 文件中(通常构建工具/IDE 会为您完成)。底线是您在战争中创建了 JSP 文件。现在你把你的战争放到 Tomcat 中,它会像以前一样识别它并加载。在这一点上,它仍然对您的 JSP 没有任何作用。

因此,您的战争已部署,tomcat 已启动并从您的浏览器转到“ http://localhost:8080/myfirstjsp.jsp ” 此时(第一次调用您的 JSP)发生了很多事情:

  1. Tomcat 获取浏览器的 HTTP 请求
  2. Tomcat 认识到它应该处理 JSP 文件
  3. Tomcat 解析你的 JSP 文件
  4. Tomcat 在内部将其编译为您不知道的某个类文件(它存储在 Tomcat 内部),
  5. Tomcat 在运行时加载此文件并将其视为已编译的 Java 类。

下次调用 JSP 时,它已经被编译。

这里的最后一个问题是 Eclipse 是如何连接到这个故事的 :) 事实上 Eclipse 与 tomcat 集成,所以所有创建和部署战争的东西都是透明的。这就是为什么你在 Eclipse 上推送“播放”,它会编译你的项目,创建一个战争,确保 tomcat 知道这场战争(配置与部署相关的东西),启动 tomcat 和瞧!- 你有你的应用程序工作。

了解在什么级别发生了什么很重要

希望这有助于
马克

于 2012-08-30T06:05:35.357 回答
4

看起来您正在使用带有 Eclipse 的 tomcat 服务器插件。在这种情况下,只要您保存 .java 文件,eclipse 就会编译它并自动更新 tomcat 服务器中的类文件。

Eclipse 是一个 IDE,它会自动为您完成大部分工作,例如编译代码、设置类路径以包含所需的 jar 文件等。

如果您想按照教程进行操作,我建议您使用纯文本编辑器和独立的 tomcat 服务器。然后,您必须完成教程中提到的所有步骤(使用 javac 编译 servlet 类,将 .class 文件复制到 tomcat 服务器等)

于 2012-08-30T04:17:06.143 回答
1

不可以。Java EE 容器 (Tomcat) 不能compile自动/隐式地 .java 文件。实际上JSP enginecontainer解析 JSP 并生成类文件 - JSP-wiki

看看Eclipse 构建故事。

于 2012-08-30T04:18:12.770 回答