/*
问:
1.先执行doFilter还是init
2.init()里面参数是从什么地方传过来的
3.FilterChain这个类起什么作用呢
4.在web.xml配置文件时没有这个ignor属性(还是参数),在这里用不会有问题吗?
5.大家再帮分析一下下面程序的注释
*/
public class SetEncoding implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request); //调用selectEncoding()方法的时候,encoding应该为null值是吗
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response); //什么意思呢?
} public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("encode filter success");
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
} protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
问:
1.先执行doFilter还是init
2.init()里面参数是从什么地方传过来的
3.FilterChain这个类起什么作用呢
4.在web.xml配置文件时没有这个ignor属性(还是参数),在这里用不会有问题吗?
5.大家再帮分析一下下面程序的注释
*/
public class SetEncoding implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request); //调用selectEncoding()方法的时候,encoding应该为null值是吗
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response); //什么意思呢?
} public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("encode filter success");
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
} protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);//这个时候this.encoding是null还是什么值?
}
2.init()参数从web.xml中传过来
3.FilterChain是过滤链,可以串联多个过滤器。
4.没有设置所以才有了一下这段:
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
说明ignore默认是true。
5.String encoding = selectEncoding(request); //调用selectEncoding()方法的时候,encoding应该为null值是吗
可以是null,也可以是字符集的名称。chain.doFilter(request, response); //什么意思呢?
过滤执行就是这一行,可以认为是一种格式。
<filter-name>encode</filter-name>
<filter-class>
cn.com.victorysoft.sys.platform.SetEncoding
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>2.init()参数从web.xml中传过来,,,,,,在web.xml配置文件中哪个是它的参数呢?
4.没有设置所以才有了一下这段:
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
说明ignore默认是true。
既然没有设置它,那不要这段不就行了吗?最后还是给它一个TURE,不多余吗?
5.String encoding = selectEncoding(request); //调用selectEncoding()方法的时候,encoding应该为null值是吗
可以是null,也可以是字符集的名称。
总不能是同时是NULL,同时又是字符集的名称吧?
那么在什么情况下是NULL,什么情况下是字符集的名称呢?