WhaleFilter简介
By:zozoh<zozohtnt@gmail.com>

WhaleFilter是什么?

Top

简单来说,它是一个专门做脏活的Filter. 例如改变req的method,设置编码等.

WhaleFilter实现的是javax.servlet.Filter, 是用到web.xml里面的哦

完成WhaleFilter的初衷:

基本用法

Top

将其放入web.xml中,确保在所有其他Filter之前,包括NutFilter.

<filter>
	<filter-class>org.nutz.mvc.WhaleFilter</filter-class>
	<filter-name>whale</filter-name>
	<init-param>
		<param-name>config</param-name>
		<param-value>
		enc.input=utf-8
		enc.output=utf-8
		</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>whale</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

WhaleFilter通过初始化参数config, Properties文件格式(键值对)的方式进行配置

如果不声明config,那WhaleFilter不抛错也不干任何事,安安静静的

编码过滤

Top

没错,跟Spring的编码过滤器一样,只是我们把它作为WhaleFilter的其中一个配置项了.

enc.input代表req的编码, enc.output代码resp的编码

enc.input=utf-8
enc.output=utf-8

http方法隐式声明

Top

什么是http方法隐式声明? 例如 有一个form表单,需要映射到标注@DELETE的入口方法,那么, 有几个选项:

例如这样的表单

<form action="/admin/topic/23?_method=delete" method="post">
	...
</form>

对应这样的入口方法

@Ok(">>:/admin/topic")
@DELETE
@At("/topic/?")
public void topicDelete(int id) {
    dao.delete(Topic.class, id);
}

那WhaleFilter需要什么参数

http.hidden_method_param=_method

顺带说一下, 还有一种方式, "X-HTTP-Method-Override", 可通过下面的配置开启.

http.method_override=true