将问题从servlet重定向到JSP
我有一个servlet S1,它将从我的数据库获取数据并将其存储在数组列表a中。这个数组列表a将被发送到JSP,我将在其中打印数组列表a的所有内容。我能够打印所有细节。现在在JSP中,我有一个单选按钮,我将它传递给其他ServletS2,从DB获取详细信息,然后返回到名为ServletS2的JSP。现在servlet S2的所有进程都工作正常,但我无法回到JSP。我在数组列表a的print语句中得到一个jasper异常。我认为数组列表a的值不可用,因为它失去了作用域,因此出现了错误。代码如下所示将问题从servlet重定向到JSP,jsp,servlets,httprequest,Jsp,Servlets,Httprequest,我有一个servlet S1,它将从我的数据库获取数据并将其存储在数组列表a中。这个数组列表a将被发送到JSP,我将在其中打印数组列表a的所有内容。我能够打印所有细节。现在在JSP中,我有一个单选按钮,我将它传递给其他ServletS2,从DB获取详细信息,然后返回到名为ServletS2的JSP。现在servlet S2的所有进程都工作正常,但我无法回到JSP。我在数组列表a的print语句中得到一个jasper异常。我认为数组列表a的值不可用,因为它失去了作用域,因此出现了错误。代码如下所示
//**Servlet S1**
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
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;
/**
* Servlet implementation class EditUsers
*/
@WebServlet("/EditUsers")
public class EditUsers extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public EditUsers() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("entered post");
Connection con=null;
PreparedStatement ps= null;
ResultSet rs= null;
int i=0;
ArrayList<User> user= new ArrayList<User>();
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
// System.out.println("connection");
con =DriverManager.getConnection("url","user", "pass");
ps = con.prepareStatement("select * from user_Dtls");
rs = ps.executeQuery();
while(rs.next())
{
// System.out.println("Entered While");
User u= new User();
u.setUserId(rs.getString(1));
u.setUser(rs.getString(2));
u.setRole(rs.getString(3));
u.setStatus(rs.getString(4));
user.add(u);
}
request.setAttribute("ArrayOfDetails", user);
RequestDispatcher rd= request.getRequestDispatcher("EditUserDetails.jsp");
rd.forward(request, response);
}
catch(Exception e)
{
System.out.println(e);
}
finally
{
if(con!=null)
{
try
{
con.close();
rs.close();
ps.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
JSP
你说你正在重定向回,但实际上你没有重定向回。你在转发 在第二个servlet中,将其替换为转发到第一个servlet的JSP
RequestDispatcher rd = request.getRequestDispatcher("EditUserDetails.jsp");
rd.forward(request, response);
通过实际重定向到第一个servlet本身,该servlet将依次分派所需的JSP:
response.sendRedirect(request.getContextPath() + "/EditUsers");
另见: