简体   繁体   中英

Don't work servlet. Issue with servlet mapping in web.xml

I have home page and when I click on reference Servlet don't work and I get error 404. I think issue in web.xml mapping, but a don't understand where. Please help me correct this issue. Thank you.

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

My jsp homepage:

<body>
    <ul>
        <li><a href="addition.jsp">addition</a></li>
    </ul>
</body>

And servlet with doGet method for it:

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

And by http://localhost:8080/items/ I get my home page.

But, when I click on reference from index.jsp , return: HTTP Status [404] – [Not Found]

My addition.jsp same lie in /WEB-INF/views/addition.jsp

My Servlet for work with 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);

    }
}

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

I would suggest to use try/catch and debugger mode.

And try to use like this your getRequestDispatcher

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

or

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

I think you need to get parameter for each of one, and than set. Try this;

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

And then you can use getAttribute like this in your answer.jsp ,

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

Don't blame me, just i wanna help to you, i hope so it can be help to you, if you wanna you can look my trial project; https://github.com/anymaa/GNOHesap

Have a nice coding :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM