Java 在Struts2中设置响应的内容类型
所以,我使用freemarker模板和Struts2来表达我的回答。但是,因为我也在尝试使用taconite,所以我需要发送内容类型为“text/xml”的响应。我似乎找不到一种使用freemarker指令来设置内容类型的方法,而且我对struts还不够精通,不知道是否有办法做到这一点Java 在Struts2中设置响应的内容类型,java,xml,struts2,freemarker,taconite,Java,Xml,Struts2,Freemarker,Taconite,所以,我使用freemarker模板和Struts2来表达我的回答。但是,因为我也在尝试使用taconite,所以我需要发送内容类型为“text/xml”的响应。我似乎找不到一种使用freemarker指令来设置内容类型的方法,而且我对struts还不够精通,不知道是否有办法做到这一点 那么,我应该怎么做呢?回答了我自己的问题: 在模板类型处使用以下代码: ${response.setContentType("text/xml")} 在Action类中,实现接口,并使用简单的 package
那么,我应该怎么做呢?回答了我自己的问题: 在模板类型处使用以下代码:
${response.setContentType("text/xml")}
在Action类中,实现接口,并使用简单的
package your.package;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
public class YourAction extends ActionSupport implements
ServletResponseAware {
private HttpServletResponse response;
public String execute() throws Exception{
response.setContentType("image/png");
return SUCCESS;
}
public void setServletResponse(HttpServletResponse response){
this.response = response;
}
public HttpServletResponse getServletResponse(){
return response;
}
}
此处的更多信息:或者您可以在struts.xml中进行设置
<action name="..." class="...">
<result name="SUCCESS">
<param name="contentType">text/html</param>
文本/html
实现ServletResponseAware
可能在其他情况下工作,但对Freemarker和Struts2没有帮助:-(我只是用调试器跟踪了一下,发现
- 通过实现
,我获得了对响应的访问权,并且我可以从我的操作中更改内容类型。很好ServletResponseAware
- 一旦我的操作完成,控件很快就会出现在呈现模板的
中org.apache.struts2.views.freemarker.FreemarkerResult
- 方法
设置响应的内容类型,忽略我设置的值:-(preTemplateProcess()
- 显然,有一个“自定义属性”可以用来覆盖它,但我还没有在谷歌找到任何解释
类本身可以设置一个内容类型来覆盖默认值,但是…还不确定可以从哪里设置,可能是在struts配置中FreemarkerResult
${response.setContentType(“text/xml”)}
因此,至少从模板中是可能的。为一组生成xml的操作提供一个通用的超类来处理这一点,肯定会更容易、更安全…或者,如果您更喜欢注释:
@Result(name=SUCCESS, location="...", params={"contentType", "text/html"})
这描述了我需要为velocity做什么: