我的方法使用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方法中,我手头没有ServletContext
,HttpServletResponse
和HttpServletRequest
。
如何模拟它们来渲染我的JSP并获取生成的HTML?
答案 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不是一个好方法。