@WebServlet注释和错误404

时间:2011-09-30 08:15:49

标签: servlets java-ee-6

首先:我使用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是相同的包使用相同的导入...

2 个答案:

答案 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/hello1http://localhost:8080/eetest/hello2,它们分别打印'Hello Servlet One'和'Hello Servlet Two'。 (在JBoss AS 7上测试 - 网络配置文件)

答案 1 :(得分:0)

我有这个问题,问题是我的servlet中遗忘的import语句。确保您的servlet正确编译。