我相信我的代碼應該重定向到「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);
}
}
}
正如我目前觀察,你的反應會得到與Response.Redirect的和doGet.Consider加入return語句reponse.sendRedirect –
後@KumarAbhinav添加return語句做究竟犯兩次。我很抱歉,如果這似乎是一個愚蠢的問題。 –
你現在的第二個問題是使用絕對路徑進行重定向:''/ Login「'。在發佈到此servlet後檢查URL。嘗試刪除'「/」'。 –