【问题标题】:Don't work servlet. Issue with servlet mapping in web.xml不要工作servlet。 web.xml 中的 servlet 映射问题
【发布时间】:2017-06-06 00:04:42
【问题描述】:

我有主页,当我点击参考时 Servlet 不起作用,我收到错误 404。我认为web.xml 映射有问题,但不明白在哪里。请帮我纠正这个问题。谢谢。

我的web.xml

<!--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>

我的jsp主页:

<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/,我得到了我的主页。

但是,当我点击来自index.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>

【问题讨论】:

    标签: java xml jsp servlets


    【解决方案1】:

    我建议使用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

    <%String Answer= (String)request.getAttribute("serverAnswer"); %><%= Answer%>

    别怪我,我只是想帮助你,希望对你有帮助,如果你想你可以看看我的试验项目; https://github.com/anymaa/GNOHesap

    编码不错:)

    【讨论】:

    • 谢谢。但是我对 AddUserServlet 和addition.jsp 之间的数据传输没有问题。我的问题:我的参考&lt;li&gt;&lt;a href="addition.jsp"&gt;addition&lt;/a&gt;&lt;/li&gt; 得到错误 404。我无法访问页面 add.jsp。
    • 你试过这样吗? &lt;servlet-name&gt;addition.jsp&lt;/servlet-name&gt; &lt;jsp-file&gt;/addition.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;addition.jsp&lt;/servlet-name&gt; &lt;url-pattern&gt;/addition&lt;/url-pattern&gt; &lt;/servlet-mapping&gt;
    • 我想问你一些问题,只是问:) web.xml 中的 Servlet 映射,这是必要的吗?因为我构建了一个项目并且 web.xml 是空的,但是我创建了每个 servlet,右键单击并添加 servlet,在部署描述符中包含服务器映射,我在那里看到了我的 servlet,但我没有手动添加。我正在使用 Eclipse IDE。
    • 我使用 IntelliJIDEA...我不知道如何使用我的 IDE 自动执行此操作。我需要使用 web.xml,因为这是我追求的一部分。早些时候,当所有 jsp 文件都位于 wabapp 中时,所有工作。但我得到任务提供安全并将所有jsp移动到文件夹WEB-INF。映射坏了。抱歉,您从评论映射版本得到相同的结果(((
    猜你喜欢
    • 2015-03-01
    • 2013-01-20
    • 2012-04-17
    • 2016-07-05
    • 2012-07-23
    • 2012-01-02
    • 2013-09-24
    • 2010-10-04
    相关资源
    最近更新 更多