0

我有一个使用HttpServletRequest,HttpServletResponse和的方法ServletContext。这是我的代码:

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 方法中,我没有ServletContextHttpServletResponse并且HttpServletRequest在手边。

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

4

2 回答 2

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);

谢谢大家帮忙!!

于 2013-01-21T17:49:08.003 回答
0

您确定要让您的网络服务调用它吗?它将被重定向到其他页面....

对我来说,这似乎是一个设计问题。您应该从此处提取实际功能并将其放置在一些通用代码中。然后以这样一种方式调用它,即 Web 服务请求和 servlet 请求将有足够的信息来调用该功能。

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

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

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

于 2013-01-21T17:30:46.247 回答