【问题标题】:how to redirect to a jsp page from a servlet如何从 servlet 重定向到 jsp 页面
【发布时间】:2015-07-24 13:41:01
【问题描述】:

很好 我有一个带有登录表单的 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();}


}
}

【问题讨论】:

标签: java jsp servlets


【解决方案1】:

使用request.getContextPath(),它会将您重定向到登录页面。

response.sendRedirect(request.getContextPath()+"/login.jsp");

如果在这种情况下您要访问登录页面,请将 requestresponse 对象传递到您的 jsp 页面。

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

【讨论】:

    【解决方案2】:

    使用这个。

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

    正如你所使用的

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

    登录成功后转发,既然工作正常,为什么不也是这样转发失败呢?

    使用的意思

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

    【讨论】:

    • 请注意您的 login.jsp 位置。看看它是否在应该在的正确位置。
    • 我所有的jsp文件都在同一个位置。我已经在另一个项目中测试了你的建议,它工作得很好,但不是那个
    • 尝试删除斜线/ 使用request.getRequestDispatcher("login.jsp").include(request, response); request.getRequestDispatcher("login.jsp").forward(request,response);
    • 问题依旧
    【解决方案3】:

    问题可能出在这里:

    response.sendRedirect("/login.jsp");

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

    http://localhost:8080/login.jsp

    如果你把它改成:

    response.sendRedirect("login.jsp");

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

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

    尝试使用 firebug 或类似工具并跟踪您应该很快找到的请求/响应。并确保 jsp 文件在层次结构中是预期的。

    希望对你有帮助

    【讨论】:

      【解决方案4】:
      request.getRequestDispatcher("login.jsp").include(request, response);
      

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 你重定向到哪个网址?
        • 我在浏览器中根本没有被重定向 a 有 servlet 的名称。但是页面是空白的
        • 您提交的用户名和密码是什么? ¿您是否尝试过删除 while(rs.next()){ 块?
        • while(rs.next()){ 我用它来比较用户名和密码与从数据库中选择的数据
        • 当我删除它时,即使是第一个重定向也不起作用
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          添加这个

          response.sendRedirect("/yourprojectname/");
          

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

          【讨论】:

          • response.sendRedirect("yourJsp Page");
          【解决方案8】:

          来自数据库的响应是空的,所以我不得不将该案例添加到类中(通过if/else 条件)。

          【讨论】:

          • 在这种情况下,如果您认为对其他人有帮助,请发布答案。
          猜你喜欢
          • 2013-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-17
          • 2019-07-16
          • 1970-01-01
          • 2012-08-08
          • 1970-01-01
          相关资源
          最近更新 更多