import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; public void destroy() { this.encoding = null; this.filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //获取web.xml里面设置的字符集并设置 String encoding = selectEncoding(request); if (encoding != null) { request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); } // Pass control on to the next filter chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); } protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
时间: 2024-04-09 20:31:20 浏览: 106
9.filter.doc
这段代码是一个编码过滤器(EncodingFilter)的实现,用于在Servlet请求过程中设置字符编码。
在这段代码中,EncodingFilter实现了javax.servlet.Filter接口,它是一个用于拦截和处理Servlet请求和响应的过滤器。它的作用是设置请求和响应的字符编码,以确保正确地处理和显示字符数据。
具体来说,这段代码的功能如下:
- 在init方法中,从FilterConfig对象中获取名为 "encoding" 的初始化参数,并将其保存在encoding成员变量中。
- 在doFilter方法中,首先通过selectEncoding方法获取字符编码(即从Web.xml中设置的encoding参数),然后将该编码设置为请求和响应的字符编码。
- 最后,通过调用chain.doFilter方法将请求和响应传递给下一个过滤器或Servlet进行处理。
需要注意的是,这段代码只是一个基本实现,可能需要根据具体需求进行修改和扩展。例如,可以在selectEncoding方法中根据请求的内容类型动态选择编码,或者添加其他处理逻辑来满足特定的需求。
阅读全文
相关推荐
Filter filter = new Filter() { @Override public void init(javax.servlet.FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); // 重置缓冲区,响应头不会被重置 response.resetBuffer(); // 获取common.js String text = Utils.readFromResource(filePath); // 正则替换banner, 除去底部的广告信息 text = text.replaceAll("<a.*?banner\">
", ""); text = text.replaceAll("powered.*?shrek.wang", ""); response.getWriter().write(text); } @Override public void destroy() { } }; 这段代码中为什么destroy方法体是空的