访问对象的简单JSP / servlet问题

时间:2016-05-22 17:43:37

标签: java jsp session object servlets

我正在使用Java(JSP和Servlets),但我被卡住了。根据我的研究,我相信我可能需要一个会话级对象

用户完成JSP表单,按下提交,并且它是对NewServlet类的POST。

在NewServlet内部创建一个对象NewFileThing,存储此信息。

    @WebServlet(urlPatterns = {"/NewServlet"})
    public class NewServlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

     // Stuff happens here...
String nameOfUser = request.getParameter("name");

    NewFileThing fi = NewFileThing();
    fi.addName(name);

    response.sendRedirect("nextForm");
    }
    }

然后用户重定向到nextForm.jsp。当他们填写此表格后,他们将被发送到FinalServlet。

@WebServlet("/FinalServlet")
@MultipartConfig
public class FinalServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO how can I access object fi (NewFileThing) from here? 
fi.getName(); <--- Error, or if I make new object it's NULL...
}
}

问题:在FinalServlet中,如何获得我之前创建的相同对象NewFileThing(相同实例)?我不想创建一个新的!

谢谢你们可爱的社区!

3 个答案:

答案 0 :(得分:0)

如果这是一个简单的网络应用程序,那么&#39;是&#39;,将您的对象存储在HttpSession中。

如果这是一个更复杂的Web应用程序,那么您可以将对象存储在HttpSession中,但您需要更智能&#39;关于你如何做到这一点。或者,考虑使用某种持久存储。

答案 1 :(得分:0)

是的,一种方法是将该对象存储在会话中。

在NewServlet中

NewFileThing fi = NewFileThing();
fi.addName(name);

// get the session
HttpSession session = request.getSession();
session.setAttribute("NewFileThing", fi);

在FinalServlet中

// get the session
HttpSession session = request.getSession();

// get object from session
NewFileThing fi =  (NewFileThing) session.getAttribute("NewFileThing");

// Make sure it is on the session
if (fi != null)
{
    String name = fi.getName();
}

答案 2 :(得分:0)

response.sendRedirect()不会保留您的请求数据。 您必须使用RequestDispatcher类。 有多种方法可以在多个类中传输数据。 您可以根据需要将其放在页面范围,请求范围,会话范围或应用范围中。 在页面范围内,您的对象数据将仅保留在同一页面中。 在请求范围内,您的对象将保留到下一个直接页面。 在会话范围中,您的对象将保留在同一应用程序相同会话时间的多个页面中。 在应用程序范围内,您的对象也可以遍历多个应用程序。

最常用的范围是请求和会话。

会话必须特别小心使用,如果使用不当,可能会与其他会话混淆。

在你的情况下,似乎有多个jsp和servlet,其中对象需要在使用之前进行travell。因此更好地投入会议。并在使用后从会话中删除它。因此,混乱的可能性更小。

在第一个servlet中将对象放入会话

NewFileThing fi = NewFileThing();
fi.addName(name);

// get the session
HttpSession session = request.getSession();
session.setAttribute("NewFileThing", fi);

在您想要的地方使用它     //得到会话     HttpSession session = request.getSession();     //从会话中获取对象     NewFileThing fi =(NewFileThing)session.getAttribute(“NewFileThing”);

// Make sure it is on the session
if (fi != null)
{
    String name = fi.getName();
}