Servlet和JSP之间的数据传输

时间:2010-10-04 21:37:39

标签: jsp jsf servlets

我有一个JSF / JSP页面,一个托管bean,以及一个使用HttpServlet方法扩展doPost的单独文件/类。

我有一个单独的测试程序,它通过doPost将{xml}对象发送到HttpURLConnection方法。

想要什么:

  1. 使用临时数据(工作)启动JSP页面。
  2. 稍后,将新的xml对象发送到doPost方法(有效 - 我使用doPost方法获取数据。)
  3. 在JSP中显示新数据(不起作用)。
  4. 注意:

    1. 当数据进入时,它会正确点击doPost方法。
    2. doPost方法执行request.getRequestDispatcher("/faces/xxx.jsp").forward(request, response);(请求已正确加载数据)。
    3. 正确命中了JSP托管bean中的初始方法。
    4. 我不能在此使用任何Javascript。 EL值得怀疑。
    5. 问题: 我还没有找到一种方法(可能非常明显)从servlet获取JSP托管bean的请求对象。

      问题: JSP如何检索请求对象并将请求对象传递给托管bean? 它有一个端到端的例子吗? - 还没找到。

3 个答案:

答案 0 :(得分:1)

  

我有一个JSF / JSP页面,一个托管bean,以及一个使用doPost方法扩展HttpServlet的单独文件/类。

停止在JSF中使用Servlet。 servlet显然有一些你想在其他地方重用的功能。只需将它重构为一个独立且可重用的类/方法,然后您可以在servlet类和JSF托管bean中导入/调用它。


关于你的实际问题:假设当你说“请求对象”时你实际上意味着“请求属性”,这似乎在JSF页面中无法访问,那么这只有两个原因:要么属性名称错误,要么它不是您期望的bean / pojo实例(如果您创建多个实例,则会发生这种情况)。

答案 1 :(得分:0)

您是否只是不确定如何从托管bean中获取请求?如果是这样,请从托管bean中的action方法中尝试:

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();

答案 2 :(得分:0)

假设您正在使用JSF,您可以从托管bean中执行的非常简单的操作就是将数据作为请求中的属性传递,然后分派到所需的servlet:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.setAttribute("myData",myData);
context.getExternalContext().dispatch("/MyServlet");
context.responseComplete();

在你的servlet中:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String myData = (String)req.getAttribute("myData"); 
    //Do something with myData  }