如何从servlet重定向到jsp页面

时间:2015-05-13 10:18:35

标签: java jsp servlets

好 我有一个带登录表单的jsp页面,我正在使用servlet,如果用户名和密码正确,servlet会将用户重定向到另一个页面,否则它会再次将他重定向到登录页面

当我使用正确的用户名和密码登录时,我完全重定向到了reservation.jsp但当我在表单中输入错误的用户名或密码时,当我点击提交按钮时页面变为空白

这是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 个答案:

答案 0 :(得分:2)

使用request.getRequestDispatcher("login.jsp").include(request, response); ,它会将您重定向到登录页面。

request.getContextPath()

如果您在这种情况下到达登录页面,请将response.sendRedirect(request.getContextPath()+"/login.jsp"); request个对象传递到您的jsp页面。

response

答案 1 :(得分:1)

使用它。

request.getRequestDispatcher("/login.jsp").forward(request,response);

正如您使用

request.getRequestDispatcher("reservation.jsp").include(request, response); 

成功登录后转发并且正常工作,为什么不以这种方式转发失败后呢?

使用哪个意思

request.getRequestDispatcher("/login.jsp").include(request, response); 

答案 2 :(得分:0)

UUID = a category UUID

你在其他部分试过上面的代码吗? 我认为它应该有用

答案 3 :(得分:0)

问题是response.sendRedirect(...)没有预先绑定资源(jsp)的上下文路径。 在这两种情况下都尝试使用request.getRequestDispatcher(...)

答案 4 :(得分:0)

问题可能在这里:

response.sendRedirect是( “/ login.jsp的”);

这意味着在重定向响应的位置标题中,您将拥有:

http://localhost:8080/login.jsp

如果您将其更改为:

response.sendRedirect是( “login.jsp的”);

相对于您的webabb上下文路径:

http://localhost:8080/app/login.jsp

尝试使用firebug或类似程序并追踪请求/响应,您应该快速找到。并且确保在层次结构中需要jsp文件。

希望这有帮助

答案 5 :(得分:0)

而不是给予             response.sendRedirect是( “\ login.jsp的”); 使用response.sendRedirect(“/ yourprojectname /”); 并在web.xml中的welcome文件中将login.jsp设置为欢迎文件。

答案 6 :(得分:-1)

添加此

response.sendRedirect("/yourprojectname/");

并将login.jsp设置为web.xml中的欢迎文件

答案 7 :(得分:-1)

数据库的响应是空的,所以我不得不将这个案例添加到课程中(通过if/else条件)。