2017-06-06 86 views
0

我有主頁,當我點擊引用Servlet時不起作用,我得到404錯誤。我想問題在web.xml映射,但一個不明白的地方。請幫我解決這個問題。謝謝。請勿使用servlet。在web.xml中使用servlet映射的問題

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> 

回答

0

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

有一個很好的編碼:)

+0

謝謝。但是我在AddUserServlet和addition.jsp之間的數據傳輸沒有問題。我的問題:我的參考文獻'

  • addition
  • '得到錯誤404。我無法訪問頁面addition.jsp。 – Pavel

    +0

    你試過這樣嗎? ' addition.jsp /addition.jsp 加成。jsp /addition ' –

    +1

    我想問你一些問題,請問:) web.xml中的Servlet映射是否需要?因爲我構建的項目和web.xml是空的,但我創建每個servlet,右鍵單擊並添加servlet,在部署描述符包括服務器映射,我看到那裏我的小服務程序,但我沒有手動添加。我正在使用Eclipse IDE。 –