【问题标题】:Does Tomcat automatically compile java servlets?Tomcat 会自动编译 java servlet 吗?
【发布时间】:2012-08-30 04:08:38
【问题描述】:

我在 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 来编译代码。但我什么也没做,它运行没有问题。此外,每次我更改代码时,它都会像魔术一样立即更新。一定有什么东西在起作用,但我不知道它是什么。

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

【问题讨论】:

    标签: java eclipse tomcat servlets


    【解决方案1】:

    对我来说,你混合了 2 种主要技术——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 和瞧! - 你的应用程序正在运行。

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

    希望这会有所帮助
    标记

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢。你的回答和马克的真的很有帮助!
      【解决方案3】:

      没有。 Java EE 容器 (Tomcat) 无法自动/隐式地 compile .java 文件。其实containerJSP engine会解析JSP生成class文件——JSP-wiki

      看看Eclipse Build Story.

      【讨论】:

      • “JSP 引擎”是什么意思?不是tomcat?
      • 它是Java Web Technology的view引擎。
      • 我检查了那个链接。似乎它说JSP页面是在页面被访问时编译的,而不是servlet。如果我错了,请纠正我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2010-10-21
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多