Tomcat是否自动编译java servlet?

我正在使用Tomcat 7.0和Eclipse。 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来编译代码。 但是我什么也没做,它没有问题。 每次我更改代码时,它都会像魔术一样立即更新。 有些东西必须工作,但我不知道它是什么。

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

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

Tomcat无法使用源文件(* .java)。 你必须用javac编译你的应用程序,并创建一个名为WAR的文件 – web archive – 一个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上推’play’并且它编译你的项目,创建一个战争,确保tomcat知道这场战争(配置部署相关的东西),启动tomcat和瞧,你有应用程序工作。

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

希望这有助于马克

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

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

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

Java EE容器(Tomcat)无法自动/隐式地compile .java文件。 实际上containerJSP engine将解析JSP并生成类文件 – JSP-wiki

看看Eclipse Build Story。