zoukankan      html  css  js  c++  java
  • SpringMVC

    静态资源过滤

    • 在DispatchServlet前端控制器中配置的url-pattern的地址为/,这样只会拦截所有的请求,不会拦截.jsp和.jspx的请求
    • 而配置的url-pattern的地址为/*,会拦截所有得到请求,包括jsp和jspx,仍然会由DispatcherServlet, 解析jsp地址, 不能根据jsp页面找到handler, 会报错

    第一种方式

    • 由于DispatchServlet拦截了所有请求,包括css、js、jpg…,有时候我们不希望拦截这些静态资源的请求,会在mvc配置文件中加入 <mvc:default-servlet-handler/>

    • 在使用mvc:default 的时候,要加入mvc命名空间

    • xmlns:mvc="http://www.springframework.org/schema/mvc"
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      

    image-20210303140836588

    • org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

    第二种方式

    • 在mvc配置文件中,指定springmvc去处理资源
     <mvc:resources location="/img/" mapping="/img/**"/>   
     <mvc:resources location="/js/" mapping="/js/**"/>    
     <mvc:resources location="/css/" mapping="/css/**"/>  
    
    • location:指location指定的目录不要拦截,直接请求,这里指在根目录下的resources文件下的所有文件

    • mapping:值在resources文件下的所有文件(**代表所有文件)

    • 根目录下resources的所有文件不会被DispatcherServlet拦截,直接访问,当做静态资源交个Servlet处理

      1. 使用resources过滤掉不需要dispatcherservlet的资源(即静态资源,例如css、js、html、images)。
      2. 在使用resources时必须使用annotation-driven,否则resources元素会阻止任意控制器被调用

    第三种方式

    • 在web.xml中,指定过滤哪些请求不经过DispatchServlet
    <servlet-mapping>
         <servlet-name>default</servlet-name>
         <url-pattern>*.css</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>*.jpg</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>*.html</url-pattern>
    </servlet-mapping>
    

    Controller

    @Controller
    @RequestMapping("user")//这里的配置是为了区分有多个同名的save访问路径
    public class UserController {
        @RequestMapping("save")//这样,访问这个方法直接就是 localhost:8080/项目名/user/save
        public ModelAndView save(User user){
            System.out.println(user);
            ModelAndView modelAndView = new ModelAndView();
            //将请求过来的user对象存在模型中,转发出去
            modelAndView.addObject("user",user);
            //跳转到a.jsp
            modelAndView.setViewName("a");
            return modelAndView;
        }
    }
    

    xml

    <?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/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
        <context:component-scan base-package="com.mlyr.c"/>
        	<!--注解映射器-->
    		<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
        	<!--注解适配器-->
    		<!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->
        <!--使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
            mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器就默认加载了,
            如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
        -->
        <mvc:annotation-driven/>
        <!--不拦截静态资源-->
        <mvc:default-servlet-handler/>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>
    

    不经风雨,怎见彩虹?
  • 相关阅读:
    LeetCode题目(python)
    解决:centos配置ssh免密码登录后仍要输入密码
    解决 find: 路径必须在表达式之前:
    --解决Lock wait timeout exceeded; try restarting transaction
    Linux文件删除,但是df之后磁盘空间没有释放
    定位class时空格注意
    解决jenkins的Console Output中文乱码
    CPU飙升问题排查
    JVM笔记
    List集合的使用
  • 原文地址:https://www.cnblogs.com/MLYR/p/14487006.html
Copyright © 2011-2022 走看看