根据文档中的“快速入门”部分,somewar.war文件在默认配置中部署为localhost:8080 / somewar /.
根据this,我所要做的就是:
package de.swt1321.servlet;
import java.io.OutputStream;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/","/index.html"}, loadOnStartup=1)
public class ServletTest extends HttpServlet {
private static final java.nio.charset.Charset UTF8 = java.nio.charset.Charset.forName("UTF8");
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException
{
byte[] HTML = "<html><head><title>Hello World!</title></head><body><h1>IT WORKED!</h1></body></html>".getBytes(UTF8);
res.setStatus(HttpServletResponse.SC_OK);
res.setHeader("content-type","text/html;charset=utf8");
res.setIntHeader("content-length",HTML.length);
OutputStream os = res.getOutputStream();
os.write(HTML);
os.flush();
}
}
除了他方便地从“创建班级”到“部署项目”。而这就是我被困住的地方 - 显然我做错了什么。我正在使用buildr将整个事情打包在战争中,并最终得到类似的东西:
ServletTest.war:
META-INF -> MANIFEST.MF
WEB-INF ->
classes ->
de ->
swt1321 ->
servlet->
ServletTest.class
lib -> javaee-web-api-6.0.jar
将它放入webapps文件夹,我希望从我的回复中获取html。相反,我得到一个页面,其中包含2个名为META-INF和WEB-INF的链接,这些链接将导致404页。
我担心我错过了一些我应该在这里做的事情,遗憾的是我在网上找到的所有内容都是代码片段,这些代码片段直接跳到“现在将整个内容打包为Web应用程序......”和码头文档似乎假设我已经知道一个Web应用程序是什么样子的(并且似乎主要关注各种配置选项,如果我真的得到了该死的东西,我实际上可能会给你一个废话。)< / p>
我应该做些什么才能让它发挥作用?
修改
更改了标题,因为虽然我最初使用Jetty 9进行了测试,但它也无法与Tomcat 7一起使用,但问题基本相同 - 显然应用程序已被识别(显示在管理器中)但是servlet看起来并不像工作(如果它被使用)。我现在非常沮丧。
答案 0 :(得分:1)
jetty-8和jetty-9支持servlet 3.0,但您必须确保在start.ini中启用了注释扫描,编辑该文件,将“注释”添加到OPTIONS行并取消注释jetty-annotations.xml行
你似乎也错过了战争中的web.xml文件
我们似乎得到了相当多的问题,所以我会看到默认情况下启用注释,虽然它们使启动时间长得多,但需要的是因为大多数人都不打扰它们似乎为什么惩罚大家......我们会考虑一下。
[edit] imo如果你刚开始,你最好学习一下注释背后的细节,比如如何在web.xml中配置servlet ...注释只是在servlet-api之上有点神奇了/ p>