我有一个flex表单,它有两个httpservice.one访问来自servlet的数据,另一个将数据存储到另一个servlet中。 首先,当我从正在工作的servlet访问数据并且存储部分也在工作时...当我再次调用访问servlet时,我没有获得更新的显示...访问servlet没有被再次调用.. 这是我的访问servlet代码
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
PrintWriter out=response.getWriter();
try
{
response.setContentType("text/html");
String gradeName=request.getParameter("tx1");
System.out.println(gradeName);
gradeName=gradeName.toUpperCase();
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Grade g=new Grade(gradeName);
session.save(g);
tx.commit();
session.close();
//HibernateUtil.shutdown();
out.println("Added Successfully");
}
catch(ConstraintViolationException e)
{
out.println("Grade is already Present");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
这是我的显示servlet
protected void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
Query q=session.createQuery("from Grade");
List l=q.list();
Grade t;
PrintWriter out=response.getWriter();
response.setContentType("text/xml");
String str="<?xml version=\"1.0\" encoding=\"utf-8\"?><top>";
for(int i=0;i<l.size();i++)
{
t=(Grade)l.get(i);
str+="<inside><id>"+t.getGradeId()+"</id>";
str+="<name>"+t.getGradeName()+"</name></inside>";
}
str+="</top>";
out.println(str);
System.out.println("yattaa->"+str);
tx.commit();
session.close();
HibernateUtil.shutdown();
答案 0 :(得分:0)
我不确定如何解释“将数据存储到另一个servlet ”。听起来你在谈论将数据分配为servlet实例的实例变量。您永远不应该以任何方式将任何请求或会话范围的数据存储在servlet中。您应分别使用HttpServletRequest#setAttribute()
和HttpSession#setAttribute()
。这是因为在整个应用程序生命周期中使用了同一个servlet实例,它已在所有请求和会话之间共享。那样,访问者X就会看到访问者Y的数据,你真的不想拥有它。
在这种特殊情况下,您希望在同一会话内的多个请求之间共享数据(我假设Flex足够聪明,可以使用与父JSP / HTML页面相同的会话正在使用)。然后以下列方式将其存储在会话中:
request.getSession().setAttribute("data", data);
您可以通过以下方式在同一会话中的任何后续请求中访问它:
Data data = (Data) request.getSession().getAttribute();