ServletFilterを使用してServletResponse Content-Typeを変更しようとしました。しかし、サーブレット(私のコンテンツのAxisServlet)は、chain.doFilter()が呼び出すときにContent-Typeを更新します。しかし、他の応答ヘッダーは正しく更新されます。Servlet処理がServeletFilterを使用して行われた後の応答Content-Typeの更新方法
doFilterが呼び出された後に応答ヘッダーを設定しようとしました。この時点では、応答ヘッダーは更新されませんでした。
Serveltの完了後にServletResponseのContent-Typeを更新する方法を知っている人はいますか?
コード:オリジナルresponse
にコンテンツタイプを設定し
public class HeaderFilter implements Filter {
private HashMap<String,String> rsCustomHeaders = new HashMap<String,String>();
public void init(FilterConfig config) throws ServletException {
Enumeration<String> initParameterNames = config.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String initParameterName = initParameterNames.nextElement();
rsCustomHeaders.put(initParameterName, config.getInitParameter(initParameterName));
}
System.out.println("init().rsCustomHeaders : " + rsCustomHeaders);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
for (Map.Entry<String, String> rsCustomHeaderEntry : rsCustomHeaders.entrySet()) {
httpServletResponse.addHeader(rsCustomHeaderEntry.getKey(), rsCustomHeaderEntry.getValue());
}
System.out.println("doFilter().encoding :Set Response Headers Done");
chain.doFilter(httpServletRequest, httpServletResponse);
System.out.println("doFilter().HeaderFilter is Done!!!");
}
public void destroy() {
System.out.println("destroy(). : Destroy is called!");
}
}
web.xmlの
<filter>
<filter-name>HeaderFilter</filter-name>
<filter-class>filters.HeaderFilter</filter-class>
<init-param>
<param-name>content-type</param-name>
<param-value>application/xml; charset=utf-8</param-value>
</init-param>
<init-param>
<param-name>Content_type</param-name>
<param-value>text/xml; charset=utf-8</param-value>
</init-param>
<init-param>
<param-name>rq_content-type</param-name>
<param-value>text/xml; charset=utf-8</param-value>
</init-param>
<init-param>
<param-name>Header-X</param-name>
<param-value>Value-X</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>/services/GradeThreeMath</url-pattern>
</filter-mapping>
はrsCustomHeadersは、init()メソッドの後に値がロードしていましたか? – developer
また、起動時と処理中にサーバーログに例外がありますか? – developer
はい値が正しくロードされており、例外はありません。コンテンツタイプ(例:Header-X、Content_type)以外のResonseヘッダーは正常に更新されました。 – namalfernandolk