Servlets @WebServlet注释和错误404

Servlets @WebServlet注释和错误404,servlets,java-ee-6,Servlets,Java Ee 6,首先:我使用GlassFish3.1+EclipseJavaEEIndigo。 我想用javaee测试缓存解决方案,所以我制作了一个虚拟应用程序。我有一个大的生成数据库,我列出,搜索,修改等一些数据。为此,我编写了一些基本的servlet,并使用GET参数调用。e、 g.:/app/list?页面=产品&页面大小=100 ListServlet用 @WebServlet({ "/ListServlet", "/list" }) 它就像一个符咒,我可以使用两个网址。 所以我需要一些额外的serv

首先:我使用GlassFish3.1+EclipseJavaEEIndigo。 我想用javaee测试缓存解决方案,所以我制作了一个虚拟应用程序。我有一个大的生成数据库,我列出,搜索,修改等一些数据。为此,我编写了一些基本的servlet,并使用GET参数调用。e、 g.:/app/list?页面=产品&页面大小=100 ListServlet用

@WebServlet({ "/ListServlet", "/list" })
它就像一个符咒,我可以使用两个网址。 所以我需要一些额外的servlet(用于搜索、修改)。我以同样的方式创建它们并进行注释。 但是当我键入url
http://localhost/app/modify
或/app/search?id=1我得到错误404。 我试图编写一个非常虚拟的helloservlet,它可以打印一条HelloWorld消息,但没有成功:错误404。我重新启动了glassfish服务器和计算机,但没有得到帮助

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

编辑:
servlets是相同的包使用相同的导入…

您确定您的url模式正确吗?试着这样做:

@WebServlet( name="ListServlet", displayName="ListServlet", urlPatterns = {"/list","/modify", "/search"}, loadOnStartup=1)
如果希望所有模式都进入同一个servlet。如果不是,那么每个模式都必须有一个不同的servlet,我想这些servlet的命名应该不同

无论如何,对于这种行为,我建议使用例如路由

编辑:

我测试过了。在这里,我的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;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(asyncSupported=false,name=“HelloServlet1”,urlPatterns={”/hello1})
公共类TestServlet扩展了HttpServlet{
@凌驾
受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
分别为setContentType(“文本/html”);
PrintWriter out=resp.getWriter();
写出(“你好,Servlet一号”);
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();
    }


}
import java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(asyncSupported=false,name=“HelloServlet2”,urlPatterns={”/hello2})
公共类TestServlet2扩展了HttpServlet{
@凌驾
受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
分别为setContentType(“文本/html”);
PrintWriter out=resp.getWriter();
写出(“Hello Servlet 2”);
out.close();
}
}
我这样称呼他们:他们分别打印“Hello Servlet One”和“Hello Servlet Two”。
(在JBoss AS 7-web配置文件上测试)

我遇到了这个问题,问题是servlet中有一个被遗忘的导入语句。确保您的servlet编译正确。

很抱歉,可能我写得不够清楚:我有单独的servlet。ListServlet、ModifyServlet、SearchServlet在同一个包中,但具有不同的@WebServlet注释。有趣:)。然后可能尝试将您的模式更改为smth,如“/list/*”、“/modify/*”,etcI尝试了很多方法,但出现了一些错误。。。“/list/*”没有帮助。列表servlet正在工作,而其他两个则不工作。多大的谜题啊…你能从你所有的servlet中发布@webservlet注释吗?是的@webservlet({“/ListServlet”,“/list”})@webservlet({“/HelloServlet”,“/hello”})@webservlet(name=“modify”,urlPatterns={“/modify”},loadOnStartup=1)只有ListServlet有效。