zoukankan      html  css  js  c++  java
  • Spring Mvc Web 配置拦截规则与访问静态资源 (三)

    拦截规则配置

    1. *.do

    <!-- Processes application requests -->
        <servlet>
            <servlet-name>appServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
            
        <servlet-mapping>
            <servlet-name>appServlet</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>

    默认的 url-pattern 为 "/",改成 *.do 后,就没有默认首页面了,所以还得添加默认访问页:

    <welcome-file-list>
            <welcome-file>home.do</welcome-file>
        </welcome-file-list>

    打开 home.jsp 所对应的 RequestMapping 注入方法处,一般homeController.java,修改拦截 value 值为 home 或 home.do,本来为 "/";

    @RequestMapping(value = "home.do", method = RequestMethod.GET)
        public String home(Locale locale, Model model) {
            logger.info("Welcome home! The client locale is {}.", locale);
            
            Date date = new Date();
            DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
            
            String formattedDate = dateFormat.format(date);
            
            model.addAttribute("serverTime", formattedDate );
            
            return "home";
        }

    2. /*, 把 *.do 改为 "/*"

    这种方式,与 "/" 应该差不多,访问 /home 时, 可以访问到页面,但无法解析页面内部的 动态代码;

    3. *.html, *.htm,这个的规则跟 *.do 差不多;

    如何访问静态资源

    *.do, *.htm, *.html 这样的规则,都能正常的访问静态资源,但不管在什么情况下,放静态资源放入到 WEB-INF 下, 好像都没法访问到的。百度一下, 也根本没有把静态资源放入到 WEB-INF 的查询结果。

    现在只一种情况会拦截静态资源: jpg, gif, css, js 等,就是 "/";

    1. 激活Tomcat的defaultServlet来处理静态文件:

    在web.xml的 DispatcherServlet 前输入下面的内容;

    <!-- 静态资源 -->
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.jpg</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.gif</url-pattern>
        </servlet-mapping>
        
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.png</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>

    每个后缀独立配置;这样就能正常的访问静态资源了;

    不同的servlet 容器或服务器,处理这些静态资源的名称不一样:

    Tomcat, Jetty, JBoss, and GlassFish  默认 Servlet的名字 -- "default"
    Google App Engine 默认 Servlet的名字 -- "_ah_default"
    Resin 默认 Servlet的名字 -- "resin-file"
    WebLogic 默认 Servlet的名字  -- "FileServlet"
    WebSphere  默认 Servlet的名字 -- "SimpleFileServlet" 

    2. 从 spring 3.0.4 提供 <resources /> 或 <mvc:resource />

    <mvc:resources mapping="/img/**" location="/imaegs/" />

    那页面上的静态资源就可以这样访问,比如图片: 

    <img src="http://127.0.0.1:8080/proj/img/abc.jpg" alt="" />

    mapping是写在页面上的静态资源前缀,location 是指向的文件夹位置;

    3. 第三种就是使用 <default-servlet-handler /> 或 <mvc:default-servlet-handler />

        Spring 会把一些找不到 controller 的请求,放给默认的 servlet 容器来处理;从而能正常访问静态资源;

    4. 如果 *.do 这样的拦截规则,配置上面的 servlet 处理资源 default 方式跟 resources配置 , 都是没有效果的,但都能以原文件夹路径正常访问!

  • 相关阅读:
    页面时如何加载的
    Node的运行
    js 和css 的压缩工具。
    js 判断ie
    208-Servlet初始化是什么?
    207-乐观锁与悲观锁?
    206-navicat一直连接不上mycat是怎么回事?
    205-springboot如何集成reids?
    204-jdbc如何连接数据库
    203-全局变量char的默认值是多少?
  • 原文地址:https://www.cnblogs.com/editor/p/3863163.html
Copyright © 2011-2022 走看看