首先:我使用GlassFish 3.1 + Eclipse Java EE indigo。 我想用javaee测试缓存解决方案,所以我做了一个虚拟应用程序。我有一个很大的生成数据库,我列出,搜索,修改等一些数据。为此,我编写了一些基本的servlet,并使用GET参数调用。例如:/ app / list?page = product& pageSize = 100 ListServlet用
注释@WebServlet({ "/ListServlet", "/list" })
它就像一个魅力,我可以使用两个网址。
所以我需要一些额外的servlet(用于搜索,修改)。我创建了它们并以相同的方式注释。
但是当我输入网址http://localhost/app/modify
或/ app / search?id = 1时,我收到错误404。
我试着写一个非常虚拟的helloservlet,打印一个hello world消息,但它不起作用:错误404.我重新启动了glassfish服务器和计算机但没有帮助。
有什么问题?我错过了什么吗?
编辑: servlet是相同的包使用相同的导入...
答案 0 :(得分:4)
您确定自己的网址模式是否正确?尝试这样的事情:
@WebServlet( name="ListServlet", displayName="ListServlet", urlPatterns = {"/list","/modify", "/search"}, loadOnStartup=1)
如果您希望所有模式都进入同一个servlet。如果没有,您将不得不为每个模式使用不同的servlet,并且我猜这些servlet应该以不同的名称命名。
无论如何,对于这种行为,我建议使用例如Restlet路由。
<强>编辑:强>
我测试了它。在这里,我的servlet就像魅力一样:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(asyncSupported = false, name = "HelloServlet1", urlPatterns = {"/hello1"})
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.write("<h2>Hello Servlet One </h2>");
out.close();
}
}
和第二个:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(asyncSupported = false, name = "HelloServlet2", urlPatterns = {"/hello2"})
public class TestServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.write("<h2>Hello Servlet Two </h2>");
out.close();
}
}
我的确称它们为:http://localhost:8080/eetest/hello1和http://localhost:8080/eetest/hello2,它们分别打印'Hello Servlet One'和'Hello Servlet Two'。 (在JBoss AS 7上测试 - 网络配置文件)
答案 1 :(得分:0)
我有这个问题,问题是我的servlet中遗忘的import语句。确保您的servlet正确编译。