springmvc笔记-3-静态资源的访问

来源:互联网 发布:英雄联盟知乎 编辑:程序博客网 时间:2024/06/05 10:42

不拦截静态资源:
在restful 风格下springMVC会进行如下配置:

    <servlet>        <!-- classpath:WEB-INF/springmvcNote1-servlet.xml -->        <!-- servlet的名称 -->        <servlet-name>springmvcNote1</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet        </servlet-class>        <!-- 下面配置类servlet的参数信息 在这里配置了xml 那就必须加上springmvcNote1-servlet.xml 应该是覆盖了             - contextConfigLocation是参数名称 该参数值param-value包含了springmvc配置文件的路径 -->        <!-- <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value>             </init-param> -->        <init-param>            <param-name>contextConfigLocation</param-name>            <!-- <param-value>classpath:applicationContext.xml,/WEB-INF/springmvcNote1-servlet.xml</param-value> -->            <param-value>/WEB-INF/springmvcNote1-servlet.xml</param-value>        </init-param>        <!-- web应用启动时立即加载servlet -->        <load-on-startup>1</load-on-startup>    </servlet>    <!-- servlet的映射申明 -->    <servlet-mapping>        <!-- 对应的servlet名称 -->        <servlet-name>springmvcNote1</servlet-name>        <!-- 监听当前域的所有请求 -->        <url-pattern>/</url-pattern>    </servlet-mapping>

上面是配置DispatcherServlet控制器:
很明显/会拦截所有请求,所以静态资源无法访问到。


解决方法一:激活 Tomcat 的 defaultServlet 来处理静态资源 ,不过必须放在DispatcherServlet映射的前面

    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>*.png</url-pattern>        <url-pattern>*.jpg</url-pattern>        <!--下面可以配置多个->    </servlet-mapping>    <!-- servlet的映射申明 -->    <servlet-mapping>        <!-- 对应的servlet名称 -->        <servlet-name>springmvcNote1</servlet-name>        <!-- 监听当前域的所有请求 -->        <url-pattern>/</url-pattern>    </servlet-mapping>

此时在WebContent便可创建静态资源文件了

在springmvc的配置文件中配置:

<bean id="bresource" class="com.core.TmBasePathExposer" init-method="init"></bean>

便可在写静态资源文件的路径的时候这样写(暂时只知道这么用)

<img alt="" src="${basePath}/images/aaa.png">

TmBasePathExposer对应的代码

package com.core;import javax.servlet.ServletContext;import org.springframework.web.context.ServletContextAware;/** *  * 获取服务器的根目录 * @version 1.0.0 * */public class TmBasePathExposer implements ServletContextAware {    private ServletContext servletContext;    private String basePath;    public void init() {//      String version = "1.0";        getServletContext().setAttribute("basePath",getServletContext().getContextPath() );    }    public ServletContext getServletContext() {        return servletContext;    }    public String getBasePath() {        return basePath;    }    public void setServletContext(ServletContext servletContext) {        this.servletContext = servletContext;    }}