well I have a jsp page with a login form, i'm using a servlet, if the username and password are correct the servlet redirects the user to another page else it redirects him to the login page again
我有一个带登录表单的jsp页面,我正在使用servlet,如果用户名和密码正确,servlet会将用户重定向到另一个页面,否则它会再次将他重定向到登录页面
when i log in with a correct username and password i'm redirected perfectly to reservation.jsp but when i put a wrong username or password in the form when i click on the submit button the page became blank
当我使用正确的用户名和密码登录时,我完全重定向到reservation.jsp,但是当我点击提交按钮时,我在表单中输入了错误的用户名或密码,页面变为空白
here is the servlet
这是servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mysql.jdbc.PreparedStatement;
/**
* Servlet implementation class LogServlet
*/
@WebServlet("/LogServlet")
public class LogServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LogServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
String name=request.getParameter("name");
String password=request.getParameter("password");
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/log",
"root","");
ps = (PreparedStatement) conn.prepareStatement("select nom_client,username,password from client where username = ? and password = ?");
ps.setString(1, name);
ps.setString(2, password);
rs=ps.executeQuery();
try {
while(rs.next()){
if(password.equals(rs.getString("password")) && name.equals(rs.getString("username"))){
HttpSession session=request.getSession();
session.setAttribute("name",name);
PrintWriter out=response.getWriter();
request.getRequestDispatcher("reservation.jsp").include(request, response);
}
else{
response.sendRedirect("/login.jsp");
}}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.close();
}
catch(Exception e){e.printStackTrace();}
}
}
8 个解决方案
#1
use request.getContextPath()
, It will redirect you to login page.
使用request.getContextPath(),它会将您重定向到登录页面。
response.sendRedirect(request.getContextPath()+"/login.jsp");
and if you are reaching to your login page in that case, pass request
and response
objects to your jsp page.
如果您在这种情况下到达您的登录页面,请将请求和响应对象传递到您的jsp页面。
request.getRequestDispatcher(request.getContextPath()+"/login.jsp").forward(request,response);
#2
use this.
request.getRequestDispatcher("/login.jsp").forward(request,response);
As you have used
正如你所使用的那样
request.getRequestDispatcher("reservation.jsp").include(request, response);
to forward after successful login and as it is working, why not forwarding after failed also in this way .?
成功登录后转发并在工作时,为什么不以这种方式转发失败后呢?
Which mean to use
这意味着使用
request.getRequestDispatcher("/login.jsp").include(request, response);
#3
request.getRequestDispatcher("login.jsp").include(request, response);
Have u tried above code in else part ? I think it should work
你在其他部分试过上面的代码吗?我认为它应该有效
#4
Problem is response.sendRedirect(...)
does not prepend the context path where the resource (jsp) is bundled. Try using request.getRequestDispatcher(...)
in both cases.
问题是response.sendRedirect(...)没有预先绑定资源(jsp)所在的上下文路径。在两种情况下都尝试使用request.getRequestDispatcher(...)。
#5
The problem could be here:
问题可能出在这里:
response.sendRedirect("/login.jsp");
This means that in the location header of the redirect response you will have:
这意味着在重定向响应的位置标题中,您将具有:
http://localhost:8080/login.jsp
If you change it to:
如果您将其更改为:
response.sendRedirect("login.jsp");
than its relative to your webabb context path:
而不是它相对于您的webabb上下文路径:
http://localhost:8080/app/login.jsp
Try with firebug or similar and trace down request/response you should find out quickly. And be sure jsp files are were expected in the hierarchy.
尝试使用firebug或类似的,并追踪您应该快速找到的请求/响应。并确保在层次结构中需要jsp文件。
Hope this helps
希望这可以帮助
#6
Rather than giving response.sendRedirect("\login.jsp"); use response.sendRedirect("/yourprojectname/"); and in welcome file in web.xml set login.jsp as welcome file.
而不是给予response.sendRedirect(“\ login.jsp”);使用response.sendRedirect(“/ yourprojectname /”);并在web.xml中的welcome文件中将login.jsp设置为欢迎文件。
#7
Add this
response.sendRedirect("/yourprojectname/");
and set login.jsp as welcome file in web.xml
并在web.xml中将login.jsp设置为欢迎文件
#8
The response from the database was empty, so I had to add that case to the class (via if/else
condition).
数据库的响应是空的,所以我不得不将该案例添加到类中(通过if / else条件)。
#1
use request.getContextPath()
, It will redirect you to login page.
使用request.getContextPath(),它会将您重定向到登录页面。
response.sendRedirect(request.getContextPath()+"/login.jsp");
and if you are reaching to your login page in that case, pass request
and response
objects to your jsp page.
如果您在这种情况下到达您的登录页面,请将请求和响应对象传递到您的jsp页面。
request.getRequestDispatcher(request.getContextPath()+"/login.jsp").forward(request,response);
#2
use this.
request.getRequestDispatcher("/login.jsp").forward(request,response);
As you have used
正如你所使用的那样
request.getRequestDispatcher("reservation.jsp").include(request, response);
to forward after successful login and as it is working, why not forwarding after failed also in this way .?
成功登录后转发并在工作时,为什么不以这种方式转发失败后呢?
Which mean to use
这意味着使用
request.getRequestDispatcher("/login.jsp").include(request, response);
#3
request.getRequestDispatcher("login.jsp").include(request, response);
Have u tried above code in else part ? I think it should work
你在其他部分试过上面的代码吗?我认为它应该有效
#4
Problem is response.sendRedirect(...)
does not prepend the context path where the resource (jsp) is bundled. Try using request.getRequestDispatcher(...)
in both cases.
问题是response.sendRedirect(...)没有预先绑定资源(jsp)所在的上下文路径。在两种情况下都尝试使用request.getRequestDispatcher(...)。
#5
The problem could be here:
问题可能出在这里:
response.sendRedirect("/login.jsp");
This means that in the location header of the redirect response you will have:
这意味着在重定向响应的位置标题中,您将具有:
http://localhost:8080/login.jsp
If you change it to:
如果您将其更改为:
response.sendRedirect("login.jsp");
than its relative to your webabb context path:
而不是它相对于您的webabb上下文路径:
http://localhost:8080/app/login.jsp
Try with firebug or similar and trace down request/response you should find out quickly. And be sure jsp files are were expected in the hierarchy.
尝试使用firebug或类似的,并追踪您应该快速找到的请求/响应。并确保在层次结构中需要jsp文件。
Hope this helps
希望这可以帮助
#6
Rather than giving response.sendRedirect("\login.jsp"); use response.sendRedirect("/yourprojectname/"); and in welcome file in web.xml set login.jsp as welcome file.
而不是给予response.sendRedirect(“\ login.jsp”);使用response.sendRedirect(“/ yourprojectname /”);并在web.xml中的welcome文件中将login.jsp设置为欢迎文件。
#7
Add this
response.sendRedirect("/yourprojectname/");
and set login.jsp as welcome file in web.xml
并在web.xml中将login.jsp设置为欢迎文件
#8
The response from the database was empty, so I had to add that case to the class (via if/else
condition).
数据库的响应是空的,所以我不得不将该案例添加到类中(通过if / else条件)。