当前位置: 首页 > 知识库问答 >
问题:

不工作servlet。web.xml中的servlet映射问题

阳福
2023-03-14
<!--Homepage.-->
<servlet>
    <servlet-name>HomePageServlet</servlet-name>
    <servlet-class>ru.pravvich.servlets.HomePageServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>HomePageServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!--Add user in database.-->
<servlet>
    <servlet-name>AddUserServlet</servlet-name>
    <servlet-class>ru.pravvich.servlets.AddUserServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>AddUserServlet</servlet-name>
    <url-pattern>/addition</url-pattern>
</servlet-mapping>
<body>
    <ul>
        <li><a href="addition.jsp">addition</a></li>
    </ul>
</body>

和具有doget方法的servlet:

public class HomePageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF8");
        req.getRequestDispatcher("/WEB-INF/views/index.jsp").forward(req,resp);
    }
}

通过http://localhost:8080/items/,我得到了我的主页。

但是,当我单击reference fromindex.jsp时,返回:HTTP Status[404]-[Not Found]

我的addition.jsp同样位于/WEB-INF/views/addition.jsp

我的Servlet用于处理addition.jsp:

public class AddUserServlet extends HttpServlet {

    private DBJoint db;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        db = (DBJoint) getServletContext().getAttribute("db");

        db.getDBExecutor().addUser(
            new User(req.getParameter("name"), 
                     req.getParameter("login"), 
                     req.getParameter("email")));

        req.setAttribute("serverAnswer", "Add ok!");
        req.getRequestDispatcher("/WEB-INF/views/answer.jsp").forward(req, resp);

    }
}

addition.jsp:

<body>
    <form method="post" action="addition">
        <input type="text" required placeholder="name" name="name"><br>
        <input type="text" required placeholder="login" name="login"><br>
        <input type="text" required placeholder="email" name="email"><br>
        <input type="submit" value="add">
    </form>
</body>

共有1个答案

竺展
2023-03-14

我建议使用try/catch和调试器模式

并尝试这样使用GetRequestDispatcher

request.getRequestDispatcher("answer.jsp").forward(request, response);

req.getRequestDispatcher("~/WEB-INF/views/answer.jsp").forward(req, resp);

我认为您需要为其中的每一个获取参数,并设置参数。试试这个;

public class AddUserServlet extends HttpServlet {

private DBJoint db;

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    db = (DBJoint) getServletContext().getAttribute("db");

    String Name = request.getParameter("name");
    String Login= request.getParameter("login");
    String Email= request.getParameter("email");

    db.getDBExecutor().addUser(
        new User(Name, Login, Email);

    //And you need to 'serverAnswer' item in your 'answer.jsp' you know.
    request.setAttribute("serverAnswer", "Add ok!");
    request.getRequestDispatcher("answer.jsp").forward(req, resp);
    }    
}

然后您可以像这样在answer.jsp中使用getAttribute

 类似资料:
  • 问题内容: xml文件位于我的项目中。我正在使用Eclipse并运行Tomcat(它不是通过Eclipse安装的。我希望它是单独的安装)。 当表单页面提交到servlet时,它不起作用。我每次都收到404错误。我已经遇到这个问题一段时间了。有人请帮助我。 问题答案: 您缺少标记,这对于映射很重要。因此,使用以下命令: 并且您应该像下面这样在表单上赋予价值: 并记下所有值在以下代码中区分大小写: 您

  • xml文件位于我的项目的中。我正在使用Eclipse并运行Tomcat(它不是通过Eclipse安装的,我更希望它是一个单独的安装)。 当表单页面提交给servlet时,它就不起作用了。我每次都得到一个404错误。我遇到这个问题有一段时间了。谁来帮帮我。

  • 我正在尝试在web.xml中映射多个servlet。在我的index.html中,我有一个操作“desktype.do”的表单,当我运行程序时,它成功了。我是这样开始的: …效果很好。它成功地编译,并且在按下我在index.html中设置的按钮后,它就会按照需要运行。在添加了额外的servlet映射之后: 我收到错误“模块尚未部署。详细信息请参阅服务器日志。构建失败(总时间;0秒)”我不确定该怎么

  • 问题内容: 我有一个内容为web.xml的文件: 我尝试过要求 这两个请求都由Servlet2处理。为什么? 更新 谢谢你们的帮助。我意识到行为取决于servlet映射声明的顺序。我尝试了这个web.xml 结果: 问题答案: 从Servlet 3.0 规范开始,这是Web容器在收到请求后必须定位servlet的方式(重点是我的): 用于映射到servlet的路径是来自请求对象的请求URL减去上下

  • 我对java servlet很陌生。我对为什么我们在web中使用servlet映射感到非常困惑.xml我已经制作了一个使用两个servlet的项目,如果我不使用servlet映射,那么项目也会以正确的方式执行。那么为什么使用 servlet 映射..???

  • 我试过请求 这两个请求都由Servlet2处理。为什么? 更新 结果: