将问题从servlet重定向到JSP

将问题从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,它将从我的数据库获取数据并将其存储在数组列表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");
另见: