【问题标题】:How to send redirect to JSP page in Servlet如何在 Servlet 中发送重定向到 JSP 页面
【发布时间】:2012-11-17 07:16:38
【问题描述】:

当我在 servlet 中完成处理并且结果有效时,我需要将响应重定向到另一个 JSP 页面,例如 Web 内容文件夹中的 welcome.jsp。我该怎么做?

例如:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {

         // Some processing code here ...

         // How do I redirect to another JSP here when I'm ready?

    } catch (Exception e) {
        throw new ServletException(e);
    }
}

【问题讨论】:

    标签: jsp redirect servlets


    【解决方案1】:

    查看HttpServletResponse#sendRedirect(String location) 方法。

    将其用作:

    response.sendRedirect(request.getContextPath() + "/welcome.jsp")
    

    或者,查看HttpServletResponse#setHeader(String name, String value) 方法。

    通过添加位置标头来设置重定向:

    response.setHeader("Location", request.getContextPath() + "/welcome.jsp");
    

    【讨论】:

    • 请不要发布语法无效的示例。 sendRedirect() 方法不是静态方法。 setHeader() 也一样。
    • @DSoa 只需使用 doPost 方法中定义的响应变量更改 HttpServletResponse 即可。没什么大不了的
    【解决方案2】:
        String u = request.getParameter("username");
        String p = request.getParameter("password");
    
        try {
            st = con.createStatement();
            String sql;
            sql = "SELECT * FROM TableName where USERNAME = '" + u + "' and PASSWORD = '"
                    + p + "'";
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
                RequestDispatcher requestDispatcher = request
                        .getRequestDispatcher("/home.jsp");
                requestDispatcher.forward(request, response);
            } else {
    
                RequestDispatcher requestDispatcher = request
                        .getRequestDispatcher("/invalidLogin.jsp");
                requestDispatcher.forward(request, response);
    
            }
    
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            try {
                rs.close();
                ps.close();
                con.close();
                st.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    【讨论】:

    • 您可以在您的代码中添加一些 cmets 或解释您在做什么而不是仅仅发布代码来增强您的答案。
    • 请不要传播容易出现 sql 注入的代码,即使是示例
    • @TrevorHarrison 你是对的。示例是仍然发现常见安全漏洞的第一大原因。
    【解决方案3】:

    请使用下面的代码告诉我

    try{
    
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                con = DriverManager.getConnection(c, "root", "MyNewPass");
                System.out.println("connection done");
    
    
                PreparedStatement ps=con.prepareStatement(q);
                System.out.println(q);
                rs=ps.executeQuery();
                System.out.println("done2");
                while (rs.next()) {
                   System.out.println(rs.getString(1));
                   System.out.println(rs.getString(2));
    
                }
    
             response.sendRedirect("myfolder/welcome.jsp"); // wherever you wanna redirect this page.
    
            }
                catch (Exception e) {
                    // TODO: handle exception
                    System.out.println("Failed");
                }
    

    myfolder/welcome.jsp 是您的jsp 页面的相对路径。因此,请根据您的 jsp 页面路径进行更改。

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2014-10-09
      相关资源
      最近更新 更多