Servlet与JSP之间的数据传输

Servlet与JSP之间的数据传输,jsp,jsf,servlets,Jsp,Jsf,Servlets,我有一个JSF/JSP页面、一个托管bean和一个单独的文件/类,它使用doPost方法扩展HttpServlet 我有一个单独的测试程序,它通过HttpURLConnection向doPost方法发送一个xml对象 需要什么: 用临时数据(works)启动JSP页面 稍后,向doPost方法发送一个新的xml对象(工作-我在doPost方法中获取数据) 在JSP中显示新数据(不起作用) 注: 当数据进入时,它会正确地点击doPost方法 doPost方法执行request.getRequest

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

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

需要什么:

  • 用临时数据(works)启动JSP页面
  • 稍后,向
    doPost
    方法发送一个新的xml对象(工作-我在
    doPost
    方法中获取数据)
  • 在JSP中显示新数据(不起作用)
  • 注:

  • 当数据进入时,它会正确地点击
    doPost
    方法
  • doPost
    方法执行
    request.getRequestDispatcher(“/faces/xxx.jsp”).forward(请求,响应)(请求已正确加载数据)
    
  • JSP托管bean中的初始方法被正确命中
  • 我不能在这里使用任何Javascript。艾尔是有问题的
  • 问题: 我还没有找到从servlet将请求对象获取到JSP托管bean的方法(可能非常明显)

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

    您只是不确定如何从托管bean内部获取请求吗?如果是这样,请在托管bean中的操作方法中尝试以下操作:

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
    
    我有一个JSF/JSP页面、一个托管bean和一个单独的文件/类,该文件/类使用doPost方法扩展HttpServlet

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



    至于您的实际问题:假设您在说“request object”时实际上是指“request attribute”,这在JSF页面中似乎是不可访问的,那么这可能只有两个原因:要么属性名称错误,要么不是您期望的bean/pojo实例(如果创建多个实例,可能会发生这种情况)

    假设您使用的是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  }
    

    如果您编辑您的问题,将托管bean中的一些相关片段作为servlet中doPost()方法的主体,可能会有所帮助。我不明白你的问题是什么。您不知道如何访问支持bean中的请求对象,或者您可以访问它,但预期的数据丢失了?很抱歉,问题不清楚。我有一个JSP/JSL页面,其中有一个与之关联的托管bean。页面由request.getRequestDispatcher(“/faces/xxx.jsp”).forward(请求,响应)启动;从另一个来源。我正在请求一种使用JSTL的方法,以检索请求(或请求中的对象),并将其发送到托管bean。注意:假设request key=“chart”和object=privateChart假设支持bean(一个POJO)是“BeanA”,方法是“getChart”,当前使用JSTL 1.2