我正在使用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(相同实例)?我不想创建一个新的!
谢谢你们可爱的社区!
答案 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();
}