如何从servlet重定向到jsp页面

时间:2021-07-06 11:48:48

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条件)。