在Java Servlet中提交响应后无法转发
我有登录JSP,它将重定向到名为DisplayData的servlet,该servlet必须检查用户凭据并仅显示注册用户的数据。但是它会引发错误,即“提交响应后无法转发”。这是servlet代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
HttpSession session = request.getSession(true);
HttpSession usersession = request.getSession(true);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String query;
Connection conn;
Statement stmt;
ResultSet res;
DatabaseConnection dbconn;
String username="";
String hiddenname = request.getParameter("hiddenname");
if (hiddenname.equals("login"))
{
username = request.getParameter("username");
//System.out.println(username);
String password = request.getParameter("password");
// System.out.println(password);
usersession.setAttribute("uname", username);
usersession.setAttribute("upass", password);
Connection con = dbconnection.getCon();
System.out.println(con);
PreparedStatement statemt = null;
try {
statemt = con.prepareStatement("select User_name,Password from login_details where User_name = ? and Password = ?");
System.out.println(statemt);
statemt.setString(1, username); // set input parameter 1
statemt.setString(2, password); // set input parameter 2
ResultSet rs = statemt.executeQuery();
if (rs.next() == false)
{
out.write("Invalid user name or password. Please press back button to login again");
}
else
{
String url="/index.jsp";
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
con.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
List lst=new ArrayList();
String login_name,login_password;
try
{
login_name=(String) session.getAttribute("uname");
login_password=(String) session.getAttribute("upass");
request.setAttribute("UserName", login_name);
request.setAttribute("UserPassword", login_password);
dbconn=new DatabaseConnection();
conn=dbconn.setConnection();
stmt=conn.createStatement();
query="select * from mpi";
res=dbconn.getResultSet(query, conn);
while(res.next())
{
lst.add(res.getString("UniqueID"));
lst.add(res.getString("Phylum"));
lst.add(res.getString("Family"));
lst.add(res.getString("Genus"));
lst.add(res.getString("NCBI_Taxnomy_ID"));
lst.add(res.getString("16s_Sanger_seq"));
lst.add(res.getString("Genome_Sequencing_Batch"));
lst.add(res.getString("Stock_number"));
lst.add(res.getString("Stock_Location"));
lst.add(res.getString("Soil_batch"));
lst.add(res.getString("Host"));
lst.add(res.getString("Operator"));
lst.add(res.getString("GPS_coordinates"));
lst.add(res.getString("Greenhouse_or_Natural_sites"));
lst.add(res.getString("Isolation_procedure"));
lst.add(res.getString("Date_of_isolation"));
lst.add(res.getString("Previous_Ids"));
lst.add(res.getString("Compartment"));
lst.add(res.getString("Publication"));
lst.add(res.getString("Strain_Derivatives"));
lst.add(res.getString("Growth_conditions"));
lst.add(res.getString("Natural_antibiotic_resistance"));
lst.add(res.getString("Colony_morphology"));
}
res.close();
}
catch(Exception e)
{
RequestDispatcher rd=request.getRequestDispatcher("/error.jsp");
rd.forward(request, response);
e.printStackTrace();
}
finally
{
request.setAttribute("UserData", lst);
RequestDispatcher rd=request.getRequestDispatcher("/displayrecord.jsp");
rd.forward(request, response);
lst.clear();
out.close();
}
}
我不知道错误在哪里。请帮助我。
回答:
您的代码中有几个转发。一个例子:
String url="/index.jsp";RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
在代码的下方,您有个使用的代码块try/catch/finally
。具体来说,你有块
finally{
request.setAttribute("UserData", lst);
RequestDispatcher rd=request.getRequestDispatcher("/displayrecord.jsp");
rd.forward(request, response);
lst.clear();
out.close();
}
转发请求时,它不会停止方法中的执行。一旦完成了转发,它将在您上次中断的地方继续执行,并且在该finally
块的最后保证了转发。finally
无论代码前面发生了什么,都将执行该块。如果您是第一次执行代码顶部的转发中的一个,则在您碰到该finally
块时它将失败,因为它随后尝试第二次转发该请求,这将导致您遇到的错误。
仔细查看完整的堆栈跟踪,因为它应该指出第二次尝试使用响应的确切行号(在您的情况下为正向)。您需要重新排列/重写代码,以便您最多只能执行一个正向操作。
以上是 在Java Servlet中提交响应后无法转发 的全部内容, 来源链接: utcz.com/qa/436361.html