codecamp

如何配置 web.xml

在 web.xml 中,一个比较典型的例子(推荐使用):

<filter>
    <filter-name>nutz</filter-name>
    <filter-class>org.nutz.mvc.NutFilter</filter-class>
    <init-param>
        <param-name>modules</param-name>
        <param-value>com.mine.app.MainModule</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>nutz</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
  • 如果你没有声明 'modules' 参数,这个过滤器将不会映射 URL,但是它并不会抛异常
  • 默认的,只要被正则式 `"^(.+[.])(jsp|png|gif|jpg|js|css|jspx|jpeg|swf|ico|map)$"` 匹配上的 URL 都不会被 Nutz 过滤器处理
  • 你可以为 NutFilter 设置参数 "ignore",来重新设置这个正则表达式
  • 如果你的值是 "null" (不区分大小写),所有的请求都会转发到 Nutz.mvc 进行处理
  • 如果 Nutz.mvc 没有找到合适入口函数处理,将会继续 chain.doFilter

比如如果你想忽略所有的 .html 请求,你可以

    <filter>
        <filter-name>nutz</filter-name>
        <filter-class>org.nutz.mvc.NutFilter</filter-class>
        <init-param>
            <param-name>modules</param-name>
            <param-value>com.mine.app.MainModule</param-value>
        </init-param>
        <init-param>
            <param-name>ignore</param-name>
            <param-value>^(.+[.])(jsp|png|gif|jpg|js|css|jspx|jpeg|html)$</param-value>
        </init-param>
    </filter>

注意,如果你使用Forward视图,请这样写filter-mapping

<filter-mapping>
    <filter-name>nutz</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

更灵活的忽略模式(从1.b.51开始支持)

    <filter>
        <filter-name>nutz</filter-name>
        <filter-class>org.nutz.mvc.NutFilter</filter-class>
        <init-param>
            <param-name>modules</param-name>
            <param-value>com.mine.app.MainModule</param-value>
        </init-param>
        <init-param>
            <param-name>exclusions</param-name>
            <!-- *.XXX 忽略后缀 -->
            <!-- /XX/* 忽略前缀 -->
            <!-- /cc   忽略固定路径 -->
            <!-- 下面的例子忽略了html和ftl后缀, 忽略了/rs/和/druid/前缀,和忽略了固定路径/abc/notaction -->
            <param-value>*.html,*.ftl,/rs/*,/druid/*,/abc/notaction</param-value>
        </init-param>
    </filter>

比较传统的方式

<filter>
    <filter-name>msgs</filter-name>
    <filter-class>org.nutz.mvc.NutFilter</filter-class>
    <init-param>
        <param-name>skip-mode</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>msgs</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>nutz</servlet-name>
        <servlet-class>org.nutz.mvc.NutServlet</servlet-class>
        <init-param>
            <param-name>modules</param-name>
            <param-value>your.package.MainModule</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>nutz</servlet-name>
    <url-pattern>*.nut</url-pattern>
</servlet-mapping>

NutMvcListener -- Servlet上下文监听器

  • 这个类在1.b.53添加,之前的版本可以简单拷贝源码来获取这个特性.仅需要注意一下IocBy里面写法哦.
  • 将Ioc在其他部分框架之前加载,实现与其他框架集成Ioc
  • 提供一个比Mvcs.getIoc()更换的方式获取Ioc容器
  • 减少用户主动new NutIoc()的可能性
<context-param>
    <param-name>nutz-iocby</param-name>
    <param-value>*js,ioc/,*anno,net.wendal.nutzbook,*tx,*org.nutz.integration.quartz.QuartzIocLoader</param-value>
</context-param>
<listener>
    <listener-class>org.nutz.mvc.NutMvcListener</listener-class>
</listener>
  • 需要定义一个context-param, 名为nutz-iocby, 值为@IocBy中的参数, 完全就是MainModule中@IocBy中,当type=ComboIocProvider.class时参数
  • 之所以选用ComboIocProvider的形式,因为发现这是最最常用的配置方式了,因为它能融合其他任意IocLoader配置
  • 其二是listener咯,惯例写上本小节的猪脚org.nutz.mvc.NutMvcListener
  • 请把这个类放在其他框架之前. 如果有log4j配置相关的Listener,则放在其之后.
  • 另外,最最重要的是, 在MainModule中,@IocBy需要配置为以下代码
@IocBy(type=NutMvcListener.class)
  • 没错,这个NutMvcListener同时也实现了IocProvider,所以可以作为@IocBy的类型参数
  • 在需要使用这个"全局"监听器中的Ioc容器,仅需要如此调用
  • 不用也不可以为@IocBy的args配置参数了,因为ioc配置已经被你写到web.xml了.
Dao dao = NutMvcListener.ioc().get(Dao.class);
  • 事实上NutMvcListener支持从nutz.properties加载配置
  • 所以你可以在src或者maven的resources目录下新增一个文件叫nutz.properties,内容是
nutz-iocby=*js,ioc/,*anno,net.wendal.nutzbook,*tx,*org.nutz.integration.quartz.QuartzIocLoader
  • 推荐使用web.xml, 除非你喜欢用配置文件及需要部署时修改ioc(几乎不会发生吧?)
Hello World
主模块-子模块-入口函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }