Tomcat是否自动编译java servlet?

时间:2012-08-30 04:08:38

标签: java eclipse tomcat servlets

我在Eclipse中使用Tomcat 7.0。 tomcat服务器与eclipse同步。在创建我的第一个类之后,我把.java文件放在src /(默认包)/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来编译代码。但是我什么也没做,而且没有任何问题。每次我更改代码时,它都会像魔术一样立即更新。有些东西必须有效,但我不知道它是什么。

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

3 个答案:

答案 0 :(得分:12)

对我而言,您将两种主要技术混合使用 - 将tomcat作为Web容器,将eclipse作为IDE。他们的整合让你困惑。 让我们暂时离开JSP,只讨论servlet,因为它会混淆更多

Tomcat无法使用源文件(* .java)。您必须使用javac编译您的应用程序并创建一个名为WAR的文件--Web存档 - 一个zip文件,它将包含您编译的类并遵守tomcat理解的一些EE标准(它也可以使用文件夹代替拉链,但让我们把它放在一边,它与这个解释无关。)

其中此战争(一旦编译正确)将包含您的编译器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类。
  6. 下次你将调用jsp时,它将被编译。

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

    了解在什么级别发生的事情非常重要

    希望这会有所帮助 标记

答案 1 :(得分:4)

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

Eclipse是一个IDE,它可以自动执行大部分操作,例如编译代码,设置类路径以包含所需的jar文件等。

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

答案 2 :(得分:1)

没有。 Java EE容器(Tomcat)不能自动/隐式地compile .java文件。实际上JSP engine的{​​{1}}将解析JSP并生成类文件 - JSP-wiki

查看Eclipse Build Story.