SpringMVC

SpringMVC介绍:是一种架构的模型,本身不引入新功能,只是帮助我们将开发的代码结构,组织的更加合理(都是请求驱动,发一次请求进行一次刷新)
  Model(模型)
    数据模型:提供要展示的数据,包含数据和行为,行为用来处理数据
  View(视图)
    负责进行模型的展示(jsp)
  Controller(控制器)(servlet)
    接收用户请求,委托给模型进行处理,将处理完毕的模型数据返回给视图
    1.接收数据
    2.处理数据
    3.页面的显示
    4.使用模型渲染视图(给jsp传值)

SpringMVC框架的核心组件
  1.DispatcherServlet:前端控制器,用来过滤请求(总控制器,核心servlet对象,所以需要在web.xml中配置)
  2.Controller/Handler: 控制器/处理器。(也可以看为servlet,可在里面进行跳转)
  3.HandlerMapping: 处理器映射器(系统默认:表示将请求的URL和Bean名字映射,如URL为 "/hello",则Spring配置文件必须有一个名字为"/hello"的Bean.
    注意:这里/代表的含义是url中项目名后面的/(服务器中的/:http://ip:port/项目名/)
  4.HandlerAdaptor:处理器适配器:(系统默认:表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为SpringMVC中的处理器).
  5.ViewResolver:视图解析器。(系统默认:前缀和后缀都为空)

注意: 对于Spring配置文件中的处理器适配器,处理器映射器,都可以省去不写,springMVC框架中会有默认配置的,视图解析器也可以不配置,
因为在org.springframework.web.servlet.DispatcherServlet这个类的同包下,有一个DispatcherServlet.properties文件,
里面就是SpringMVC默认的配置,是当用户的Spring配置文件中没有指定配置时使用的默认策略(你不配置那么用户默认的,你配置了,那么就使用你的配置)

SpringMVC处理步聚:先前端控制器把请求拦下来,让处理器映射器将对应的url匹配给对应的handler(默认完全匹配),
处理适配器决定handler里的哪个方法,handler返回的视图逻辑名给视图解析器解析成完整的资源路径)


SpringMVC中注意的:
DispatcherServlet中的映射路径
<servlet>
  <servlet-name>SpringMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

1)拦截所有请求 /
<url-pattern>/</url-pattern>
弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。
(/*:控制器返回的资源也会被在此拦截)
解决静态资源的拦截问题:
解决方式一:利用Tomcat的defaultServlet来处理静态文件
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
特点:1.要配置多个,每种文件配置一个。
   2.要写在DispatcherServlet的前面(和tomcat版本有关),让defaultServlet先拦截请求,这样请求就不会进入Spring了
   3. 高性能。

解决方式二: 使用<mvc:resources>标签,例如:
  <mvc:resources mapping="/images/**" location="/images/"/>
  <mvc:resources mapping="/js/**" location="/js/"/>
  <mvc:resources mapping="/css/**" location="/css/"/>
两个*:表示此路径下的所有子路径资源
这样如果有访问/images或者/js或者/css路径下面的资源的时候,spring就不会拦截了

解决方式三: 使用<mvc:default-servlet-handler/>标签
在spring配置文件中加入此标签配置即可(是静态资源,Spring就放行)


2)自定义拦截请求的后缀名
拦截*.do、*.html、*.action, 例如/user/add.do

3)springMVC中的内部跳转:

    1.服务器内部跳转:

      return "forward:/forward/test1";  或者

      request.getRequestDispatcher(path).forward(request, response);

    2.客户端重定向:

      return "redirect:/test";或者

      response.sendRedirect(location);

SpringMVC 中的其他应用
Controller接口以及其实现类
AbstractController:抽象类提供了可选的会话(session)的串行访问功能
自定义适配器:
通过实现HandlerAdapter,通过判断handler是否实现指定接口来判断,
在指定执行此handler(自定义的处理器)中的方法
拦截器:HandlerInterceptor接口(拦截器适配器:通过对此接口进行空实现)
1)常见应用场景
  1、日志记录
  2、权限检查
  3、性能监控
  4、通用行为 例如读取用户cookie
解释(跟aop中的advice/advsior差不多,只是此拦截器是特定对handler进行拦截的)
配置文件:(注意此配置在文件中的配置顺序,要写在配置文件的上面)
<bean name="handlerInterceptor1" class="com.briup.web.interceptor.MyInterceptor1"/>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors">
<list>
  <ref bean="handlerInterceptor1"/>
</list>
</property>
</bean>

原文地址:https://www.cnblogs.com/nyhhd/p/12547404.html