@WebServlet批注和错误404

hcp*_*ter 3 servlets java-ee-6

首先:我使用GlassFish 3.1 + Eclipse Java EE靛蓝。我想用javaee测试缓存解决方案,所以我做了一个虚拟应用程序。我有一个生成的大型数据库,并且列出,搜索,修改等一些数据。为此,我编写了一些基本的servlet,并使用GET参数进行调用。例如:/ app / list?page = product&pageSize = 100 ListServlet带有注释

@WebServlet({ "/ListServlet", "/list" })
Run Code Online (Sandbox Code Playgroud)

而且它就像一种魅力,我可以同时使用两个网址。因此,我需要一些其他的servlet(用于搜索,修改)。我创建了它们并以相同的方式注释。但是,当我键入url http://localhost/app/modify或/ app / search?id = 1时,出现错误404。我尝试编写一个非常虚拟的helloservlet,它打印了一个hello world消息,但没有用:错误404。我重新启动了玻璃鱼服务器和计算机,但没有帮助。

有什么问题?我错过了什么?

编辑:servlet是相同的程序包使用相同的导入...

Kri*_*ris 5

您确定网址格式正确吗?尝试这样的事情:

@WebServlet( name="ListServlet", displayName="ListServlet", urlPatterns = {"/list","/modify", "/search"}, loadOnStartup=1)
Run Code Online (Sandbox Code Playgroud)

如果您希望所有模式都进入同一个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();
    }


}
Run Code Online (Sandbox Code Playgroud)

第二个:

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();
    }


}
Run Code Online (Sandbox Code Playgroud)

我确实这样称呼他们:http:// localhost:8080 / eetest / hello1http:// localhost:8080 / eetest / hello2,它们分别打印“ Hello Servlet One”和“ Hello Servlet Two”。(已在JBoss AS 7-网络配置文件中测试)