我在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
来编译代码。但是我什么也没做,而且没有任何问题。每次我更改代码时,它都会像魔术一样立即更新。有些东西必须有效,但我不知道它是什么。
是的,这显然是一个新手问题所以欢迎任何帮助。如果你有任何系统的,易于理解的教程链接,那就更好了。我正在寻找他们好几天,但得到了很多不一致的答案。
答案 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)会发生很多事情:
下次你将调用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