如何使用 SQL 查询在 jsp 中重定向?

How to redirect in jsp using SQL queries?

实际上,当用户在提交该帖子后写 his/her 问题时,我创建了一个论坛,它重定向到保存数据库 jsp 页面。该页面被命名为 post_question.jsp.

然后 post_question.jsp return 到我名为 return_thread.jsp 的新页面。实际上这个页面是因为我想在用户发布 his/her 问题时制作那个东西..它必须假设 return 这个页面进入 show question list page.

For e.g:

当用户在 Whosebug 上写下他的问题时,单击 Post your question 按钮后它会自动 return 一个页面,用户可以在该页面上查看他的问题。一样..我正在做这个过程。

所以我正在做一个类似的过程,它获取id he/she 在论坛上写的那个问题。但问题是我想重定向我的页面。在这里你可以看到我的程序:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@ page language="java" import="java.sql.*" %>
<%@ page language="java" import="java.util.Date" %>
<%@ page language="java" import="java.text.SimpleDateFormat" %>

<%

    String question_post_date=request.getParameter("question");

try{
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/forum", "root", "1234");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("select * from thread_question where question_dateTime='"+question_post_date+"'");
        while(rs.next()){
            String question_id=rs.getString("question_id");
            response.sendRedirect("http://localhost:8072/forum_website/showThread.jsp?id="+question_id);
    }
}
catch(Exception e){
e.printStackTrace();
}
%>

但现在我实际上在这里挣扎。在那里你可以看到..这是一种重定向页面的方法。我卡在这里了..你能帮帮我吗?

当然,如果有帮助,我们将不胜感激!

while 更改为 if 并添加 return;。为什么?因为您只能执行一次重定向,所以使用 while 是一种资源浪费,并且可能还会破坏重定向。如果在重定向之后有任何代码会打印到您想要 return 的响应,那么在重定向尝试之后停止执行。

    ResultSet rs=st.executeQuery("select * from thread_question where question_dateTime='"+question_post_date+"'");
    if(rs.next())
    {
        String question_id=rs.getString("question_id");
        response.sendRedirect("http://localhost:8072/forum_website/showThread.jsp?id="+question_id);
        return;
    }

当 SQL 查询只能 return 一行时,始终使用 if(rs.next()) 而不是 while(rs.next()),并始终确保 SQL 查询只能return 一行,而你期望它只有 return 一行。

此外,页面顶部的开始 %> 和结束 <% 之间的空行可能会阻止重定向发生(即它可能会设置 headers 并开始写回复)。尝试删除空行。您也可以考虑将您的导入移动到文件的底部,因为 Java 不关心您将它们放在哪里。但是,如果您将它们放在底部,那么 %><% 之间的空格将不会像在顶部那样在您的重定向尝试之前设置 headers。

或者,更好的是,将它变成一个 Servlet 而不是 JSP,这样您就不需要求助于任何类似的东西了。像这样访问数据库的代码无论如何都应该在 Servlet 中。