Tomcat是否自动编译java servlet?

NSF*_*NSF 0 java eclipse tomcat servlets

我正在使用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");
    }
}
Run Code Online (Sandbox Code Playgroud)

很多教程都声称我必须使用它javac来编译代码.但是我什么也没做,而且没有任何问题.每次我更改代码时,它都会像魔术一样立即更新.有些东西必须工作,但我不知道它是什么.

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

Mar*_*nik 12

对我来说,你混合了两种主要技术 - 作为Web容器的tomcat和作为IDE的eclipse.他们的整合让你困惑.让我们暂时离开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和瞧,你有应用程序工作.

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

希望这有助于马克