2015-10-23 84 views
1

我相信我的代碼應該重定向到「Login」servlet。它目前沒有使用任何驗證,所以實際上它應該重新引導我到另一個運行過的servlet。我沒有得到的404錯誤或500級別的錯誤,它只是保持重定向我對我的註冊servlet和無法登錄Java Servlet不重定向

@WebServlet("/Register") 
public class Register extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public void init() throws ServletException { 
     // Create an array list of guest book HW1Users 
     ArrayList<HW1User> HW1Users = new ArrayList<HW1User>(); 
     // Add the array list to the application scope 
     getServletContext().setAttribute("HW1Users", HW1Users);  
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<meta charset=\"ISO-8859-1\">"); 
     out.println("<title>Israel, Dylan - CS320stu32</title>"); 
     out.println(
       "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css\">"); 
     out.println("</head>"); 
     out.println("<body>"); 

     out.println("<form class=\"form-horizontal\">"); 

     out.println("<div class=\"form-group\">"); 
     out.println("<label for=\"name\" class=\"col-sm-2 control-label\">Name:</label>"); 
     out.println("<div class=\"col-sm-10\">"); 
     out.println("<input type=\"text\" class=\"form-control\" id=\"name\" placeholder=\"First and Last Name\">"); 
     out.println("</div>"); 
     out.println("</div>"); 

     out.println("<div class=\"form-group\">"); 
     out.println("<label for=\"inputEmail3\" class=\"col-sm-2 control-label\">Email:</label>"); 
     out.println("<div class=\"col-sm-10\">"); 
     out.println("<input type=\"email\" class=\"form-control\" id=\"inputEmail3\" placeholder=\"Enter Email\">"); 
     out.println("</div>"); 
     out.println("</div>"); 

     out.println("<div class=\"form-group\">"); 
     out.println("<label for=\"password1\" class=\"col-sm-2 control-label\">Password:</label>"); 
     out.println("<div class=\"col-sm-10\">"); 
     out.println("<input type=\"text\" class=\"form-control\" id=\"password1\" placeholder=\"Enter Password\">"); 
     out.println("</div>"); 
     out.println("</div>"); 

     out.println("<div class=\"form-group\">"); 
     out.println("<label for=\"password2\" class=\"col-sm-2 control-label\">Re-Enter Password:</label>"); 
     out.println("<div class=\"col-sm-10\">"); 
     out.println("<input type=\"text\" class=\"form-control\" id=\"password2\" placeholder=\"Re-Enter Password\">"); 
     out.println("</div>"); 
     out.println("</div>"); 

     out.println("<div class=\"form-group\">"); 
     out.println("<div class=\"col-sm-offset-2 col-sm-10\">"); 
     out.println("<input type=\"submit\" value = \"Register\"/>"); 
     out.println("</div>"); 
     out.println("</form>"); 
     // Grab a reference to the list of HW1Users 
     out.println("</body>"); 
     out.println("</html>"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String name = request.getParameter("name"); 
     String password1 = request.getParameter("password1"); 
     String password2 = request.getParameter("password2"); 
     String email = request.getParameter("email"); 

     ArrayList<HW1User> HW1Users = (ArrayList<HW1User>)getServletContext().getAttribute("HW1Users"); 

     HW1Users.add(new HW1User(name,password1,password2,email)); 
     // Add the new entry to the list 

     if(HW1Users!= null){ 

     response.sendRedirect("/Login"); 
     } 
     doGet(request, response); 
    } 
} 

Kumar的回答後,我已經更新了我的代碼:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    String name = request.getParameter("name"); 
    String password1 = request.getParameter("password1"); 
    String password2 = request.getParameter("password2"); 
    String email = request.getParameter("email"); 

    ArrayList<HW1User> HW1Users = (ArrayList<HW1User>)getServletContext().getAttribute("HW1Users"); 

    HW1Users.add(new HW1User(name,password1,password2,email)); 
    // Add the new entry to the list 

    if(HW1Users!= null){ 

    response.sendRedirect("/Login"); 
    return; // returns causing response stream to be committed only once 
    } 
    doGet(request, response); // This will treat your request as a get request only if HW1Users is null 
} 

這裏我的登錄Servlet代碼顯示它沒有重定向到任何東西。

     @WebServlet("/Login") 
    public class Login extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 
    out.println("<!DOCTYPE html>"); 
    out.println("<html>"); 
    out.println("<head>"); 
    out.println(" <meta charset=\"UTF-8\">"); 
    out.println(" <title>Sessions Login</title>"); 
    out.println(" <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css\">"); 
    out.println("</head>"); 
    out.println("<body>"); 
    out.println("<div class=\"container\">"); 

    String error = (String) request.getAttribute("error"); 
    if (error != null) 
     out.println("<p class=\"text-danger lead\">" + error + "</p>"); 

    // Page-Specific Content 
    out.println("<form action=\"Login\" method=\"post\" >"); 
    out.println(" Username: <input type=\"text\" name=\"username\" /> <br />"); 
    out.println(" Password: <input type=\"password\" name=\"password\" /> <br />"); 
    out.println(" <input type=\"submit\" value=\"Login\" />"); 

    out.println("</form>"); 

    out.println("</div>"); 
    out.println("</body>"); 
    out.println("</html> "); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 

    if (username != null && username.equals("albert") 
      && password != null && password.equals("1!")){ 

     // Create a Session Variable named Username 
     HttpSession session = request.getSession(); 
     session.setAttribute("username", "Albert F. Cervantes"); 

     // Redirect to the Member's Only page 
     response.sendRedirect("Members"); 
    } 
    else { 
     request.setAttribute("error", "Invalid Username and/or Password"); 
     doGet(request, response); 
    } 

} 

}

+0

正如我目前觀察,你的反應會得到與Response.Redirect的和doGet.Consider加入return語句reponse.sendRedirect –

+0

後@KumarAbhinav添加return語句做究竟犯兩次。我很抱歉,如果這似乎是一個愚蠢的問題。 –

+1

你現在的第二個問題是使用絕對路徑進行重定向:''/ Login「'。在發佈到此servlet後檢查URL。嘗試刪除'「/」'。 –

回答

2

你的反應會得到與response.sendRedirect("/Login");doGet(request, response);犯兩次。

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String name = request.getParameter("name"); 
     String password1 = request.getParameter("password1"); 
     String password2 = request.getParameter("password2"); 
     String email = request.getParameter("email"); 

     ArrayList<HW1User> HW1Users = (ArrayList<HW1User>)getServletContext().getAttribute("HW1Users"); 

     HW1Users.add(new HW1User(name,password1,password2,email)); 
     // Add the new entry to the list 

     if(HW1Users!= null){  
     response.sendRedirect("/Login"); 
     return; // returns causing response stream to be committed only once 
     } 
     doGet(request, response); // This will treat your request as a get request only if HW1Users is null 
    } 
+0

我明白你的意思了。我試過這個選項,但仍然沒有得到它不幸的重定向。 –

+0

@ DylanC.Israel你在找什麼?錯誤404或錯誤500.嘗試爲完整的可驗證和可重複的代碼添加快照 –

+0

我編輯了我的當前代碼以顯示編輯後的版本。我也沒有得到404或500錯誤。它只是不斷髮送我回到我的註冊Servlet而不是登錄。 –