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配置 , 都是没有效果的,但都能以原文件夹路径正常访问!

Spring Mvc Web 配置拦截规则与访问静态资源 (三)

时间: 2024-07-30 10:17:19

Spring Mvc Web 配置拦截规则与访问静态资源 (三)的相关文章

当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式

如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了. 目的:可以正常访问静态文件,不要找不到静态文件报404. 方案一:激活Tomcat的defaultServlet来处理静态文件 <servlet-mapping> <servlet-name>default</servlet-name> <url

Spring mvc interceptor配置拦截器,没有登录跳到登录页

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/sch

spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK 2.从GitHtb下载 3.向下滚动找到Downloading Artifacts 点击 4.点击Artifacts-->libs-release-local-->org-->springframewor-->spring 5.选中一个自己需要的版本(我选了4.2.5) 6.下载后的文件 配置文件的规范约束下面文件夹有的都可以写(我用到了beans, co

springboot配置拦截器不能放行静态资源

新建一个拦截器类,实现 org.springframework.web.servlet.HandlerInterceptor 接口,重写preHandle.postHandle.afterCompletion方法分别是处理前.处理中.处理后. public class RequestInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, H

SpringMVC访问静态资源的问题。

在项目中引用css和js文件一直出错,反复修改文件路径始终访问不到.究其原因原来是应该在web.xml 文件中添加访问静态资源的默认servlet. 如下. <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servl

Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)

一.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: Xml代码   <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--   Spring MVC Servlet --> <servlet> <s

spring mvc 的jpa JpaRepository数据层 访问方式汇总

spring mvc 的jpa JpaRepository数据层 访问方式汇总 博客分类: spring jpa springjpaJpaRepository 本文转载至:http://perfy315.iteye.com/blog/1460226 AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,下面就对Spring Data相关知识作一个较为详细的描述. 1.Spring Data所解决的问题 Spring Data :提供了一整套数据访问层(DA

Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单单实现这两个需求的话,那么基本足够,但是很多时候一个网站除了仅仅能够访问数据库是不够的,它还需要对性能以及更简化的步骤有着更多的要求,这一篇重点就是帮助我们如何去实现数据连接池管理与更简化便利的开发步骤. 如果你觉得自己能写出更高效率的连接池,那你可以不需要这篇文章了,我更建议你可以去开源组织毛遂自

使用Maven创建一个Spring MVC Web 项目

使用Maven创建java web 项目(Spring MVC)用到如下工具: 1.Maven 3.2 2.IntelliJ IDEA 13 3.JDK 1.7 4.Spring 4.1.1 released 5.Tomcat7 6.Logback 1.0.13 日志输出组件 接下来开始演示如何用Maven模板创建web项目 1.使用maven-archetype-webapp模板快速创建web项目的骨架结构 打开控制台,进入到你想要创建web项目的目录,然后运行如下命令: 1 $ mvn ar