0

這是我登錄的Servlet POST方法404找不到JSP

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String login = request.getParameter("login").trim(); 
    String password = request.getParameter("password"); 

    User user = getUsersDao().login(login, DigestUtils.shaHex(password)); 

    if (user == null) { 
     request.setAttribute("login", login); 
     request.setAttribute("error", "Wrong username or password."); 
     forward(request, response, LOGIN_JSP); 
    } else { 
     request.getSession().setAttribute(USER_SESSION, user); 
     response.sendRedirect(LOGGED_IN_URL); 
    } 
} 

其中LOGGED_IN_URL is "WEB-INF/jsp/index.jsp";
和index.jsp的這個ADDRES存在,這不僅登錄後工作。用戶的if條件是好的(我通過將其設置爲false來檢查它)。

爲什麼會發生?

回答

2

/WEB-INF文件夾中的資源不能公開訪問(否則最終用戶將能夠通過直接打開它來查看敏感信息,如web.xml中的數據源用戶名/密碼)。

您需要將公用accessibe JSP文件放在/WEB-INF文件夾之外。

LOGGED_IN_URL = "/index.jsp"; 

和重定向爲

response.sendRedirect(request.getContextPath() + LOGGED_IN_URL); 

資源/WEB-INF如下僅適用於正向和包括。

+0

今天早上沒有更多的咖啡在家裏? :)在位於/ WEB-INF的資源上使用'sendRedirect()'不會有效,有或沒有/。 – Med

+0

@Med:哎呀,我以某種方式解釋他是轉發,答案是固定的。 – BalusC

+1

像往常一樣真的很快。謝謝! – Med