• SpringMVC,3种不同的URL路由配置方法(这根本不是一个小问题)


    转载自:http://blog.csdn.net/fansunion/article/details/41149287?utm_source=tuicool&utm_medium=referral

    SpringMVC中配置URL拦截,非常简单。网上找个示例,就能通过。但是,在我做了好几个Web项目,又参与了别人主导的Web项目时,发现URL配置也非常有学问。

    1. 先说说一种比较常见的:

    <servlet>
        <servlet-name>theDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring/spring-mvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>theDispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
      </servlet-mapping>

     让SpringMVC指拦截 动态请求,js、css、img等静态资源不经过Spring,直接让Web容器处理。

       如果配置了拦截器,也只会拦截.html动态请求。

       静态资源不走Spring,也不走拦截器,性能当然是比较好的。

       如果使用了Nginx,配置静态资源拦截,让Nginx处理静态资源的访问。因为Nginx在处理静态资源方面,比Tomcat等Web容器要强。

       缺点:这种拦截动态请求的方法,比较死板。

    2.  我自己经常有一种需求,http://FansUnion.cn/news 这种不指定.html后缀的其实也是 动态请求,所以我在配置url-pattern喜欢用“/”,即拦截所有的请求。URL是可以灵活配置了,问题又来了,静态资源不再由Tomcat处理,所以必须在SpringMVC中再次配置,
    <mvc:resources mapping="/static/**" location="/static/" />
      让SpringMVC把static静态资源也处理了。显然,让SpringMVC处理静态资源的性能没有Tomcat直接处理比较高。
    理论上,请求中转的次数越多, 性能越差。
      
      本以为万事大吉,虽然静态资源的性能较低,至少程序可以正常运行了,“反正是混过去了”。

       进一步的需求,如果在Spring中配置了登录等拦截器,这个时候也会把 静态资源给拦截进来。

    <mvc:resources mapping="/static/**" location="/static/" /> 

    这种URL映射,也无法逃脱拦截器的魔爪。

    3.终极解决方案: 
      以我习惯用的第2种方法为基础,进一步改进:

    去掉<mvc:resources mapping="/static/**" location="/static/" />,不做静态资源请求的映射。

    在web.xml里增加如下配置:

    <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/static/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>

    上述配置,激活Tomcat的defaultServlet来处理静态文件。

    千万要注意,上述配置,要在 SpringMVC的拦截器DispatchServlet之前。   
    参考了:http://blog.chinaunix.net/uid-20586655-id-3000946.html 第七部分
    网友提问:http://www.iteye.com/problems/66915http://www.iteye.com/problems/69983

    这样 SpringMVC不再响应静态资源,登录拦截器也没有问题了。

    ------------------------------------------------------------------------
    详细讨论了上诉3种情况,我的结论是:URL配置根本不是一个简单的问题。

  • 相关阅读:
    js键盘事件以及键盘事件拦截
    JavaScript 延迟加载
    二叉树深度优先 求二叉树最大深度
    css 小知识点:inline/inline-block/line-height
    es6 set
    CSS 水平垂直居中
    js 位运算符
    js 函数重载
    js之单例模式
    js 面向对象 ES5 AND ES6
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/5286900.html
Copyright © 2020-2023  润新知