简单来说,它是一个专门做脏活的Filter. 例如改变req的method,设置编码等.
WhaleFilter实现的是javax.servlet.Filter, 是用到web.xml里面的哦
完成WhaleFilter的初衷:
将其放入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不抛错也不干任何事,安安静静的
没错,跟Spring的编码过滤器一样,只是我们把它作为WhaleFilter的其中一个配置项了.
enc.input代表req的编码, enc.output代码resp的编码
enc.input=utf-8 enc.output=utf-8
什么是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