如何模拟HttpServletRequest,HttpServletResponse和ServletContext?

时间:2013-01-21 17:24:36

标签: java jsp

我的方法使用HttpServletRequestHttpServletResponseServletContext。 这是我的代码:

public String processarModelo(MyObject ou, Map<String, Object> attrs,
            Map<String, Object> params) throws Exception {


        ServletContext sc = com.opensymphony.webwork.ServletActionContext.getServletContext();
        HttpServletResponse r = com.opensymphony.webwork.ServletActionContext.getResponse();
        MyHttpRequest rw = new MyHttpRequest(com.opensymphony.webwork.ServletActionContext.getRequest());
        rw.clearAttributes();

        for (String s : attrs.keySet()) {
            rw.setAttribute(s, attrs.get(s));
        }

        Map<String, String> p = rw.getParameterMap();
        p.clear();
        for (String s : params.keySet()) {
            p.put(s, (String) params.get(s));
        }

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        Writer w = new OutputStreamWriter(bout);
        SwallowingHttpServletResponse r2 = new SwallowingHttpServletResponse(r, w, "iso-8859-1");

        javax.servlet.RequestDispatcher dispatcher = sc.getRequestDispatcher("/paginas/expediente/processa_modelo.jsp");

        dispatcher.include(rw, r2);
        w.flush();
        String s = bout.toString();


        return s;
    }

当我从浏览器中调用它时,它正在工作。 本周我构建了一个必须调用相同方法的Web服务。在webservice方法中,我手头没有ServletContextHttpServletResponseHttpServletRequest

如何模拟它们来渲染我的JSP并获取生成的HTML?

2 个答案:

答案 0 :(得分:1)

好吧,搜索@Context注释,我发现这个用于webservice:

@Resource
private WebServiceContext context;

有了这个,我可以得到我需要的一切:

HttpServletRequest request = (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
        ServletContext servletContext = (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
        HttpServletResponse response = (HttpServletResponse) context.getMessageContext().get(MessageContext.SERVLET_RESPONSE);

感谢大家的帮助!!

答案 1 :(得分:0)

您确定要让您的网络服务拨打此电话吗?它将被重定向到其他页面....

对我来说,这看起来像是一个设计问题。您应该从这里提取实际功能并将其放在一些通用代码中。然后调用它,使Web服务请求和servlet请求具有足够的信息来调用该功能。

不鼓励使用一个字母的变量名;)

如果要调用网页来存储HTML,则应在Web服务方法本身中发出HTTP请求并存储数据。您可以使用类似HTTPClient(http://hc.apache.org/httpcomponents-client-ga/)的内容来执行此操作。

尝试自己构建HTTPRequest不是一个好方法。