我有一个 Struts 2 动作,其中 stream
类型的响应由速度生成。但这是HTML和JavaScript,但不是我需要的所有东西,如会话,cookie等。如何在操作中将会话和 cookie 传递给响应?
我的操作:
@Action(value = "example",
results = {
@Result(name = "success", type = "stream", params = { "contentType", "text/html" })
})
public String example() throws Exception {
serviceId = (Long) getObjectSession("serviceId");
selIdfile = Long.parseLong(idpreview);
MpsServiceTemplate mpsServiceTemplate = mpsServiceTemplateDAO
.getMpsServiceTemplateById(selIdfile);
MpsService service = (MpsService) maasCustomDAO.loadbyId(MpsService.class, serviceId);
String html = htmlBuilder.getHtml(service.getParent().getName(), service.getName(), new String(mpsServiceTemplate.getTemplateCode()), null);
inputStream = new StringBufferInputStream(html);
return SUCCESS;
}
Struts2 在执行操作之前捕获 servlet 对象,如 request
、response
session
。如果在堆栈中使用拦截器servletConfig
则可以使用这些对象填充操作。您也可以通过 ServletActionContext
.您可以将拦截器添加到操作cookieProvider
允许操作将 cookie 发送到客户端,操作必须实现
CookieProvider
.您必须默认引用此侦听器 堆栈或操作中的堆栈,请参见下面的示例。<action ... > <interceptor-ref name="defaultStack"/> <interceptor-ref name="cookieProvider"/> ... </action>
这将允许您在操作中将会话和 cookie 传递给响应。