SpringMVC小记(一)

MVC模型(Model-View-Controller):一种架构性的模式,帮助我们将开发的代码结构、组织

的更加合理。

Model(数据模型),提供要展示的数据,包含数据和行为。

View(视图),进行模型的展示。

Controller(控制器),接收用户请求,委托给模型进行处理,处理完毕之后吧返回的模型数据交给视图。【调度作用】


在标准的MVC中,模型能主动把数据给试图进行更新(可以采用观察者设计模式),但是,在Web开发中模型是无法主动给视图的,即无法主动更新用户界面,因为在Web的访问是请求-响应的模式。必须由客户端主动发出请求之后,服务器才能把数据返回。


核心组件:

1.DispatcherServlet:(前端控制器),用来过滤客户端发送过来,想要进行逻辑处理的请求。

2.HandlerMapping:(处理器映射器),DispatcherServlet接收到客户端请求的URL之后,根据一定的匹配规则,  再把请求转发给对应的Controller,这个匹配规则由HandlerMapping决定。

3.HandlerAdaptor:(处理器适配器)。处理器适配器用来适配每一个要执行的Handler对象。
     通过HandlerAdapter可以支持任意的类作为处理器
4.Controller/Hendler:(控制器/处理器)。用来处理用户请求,并且处理完成之后返回给用户指定视图的对象。
5.ViewResolver:(视图解析器)。Handler返回的是逻辑视图名,需要有一个解析器能够将逻辑视图转化为实际的物理视图。

SpringMVC框架提供一个核心的Servlet对象(DispatcherServlet前端控制器)来对服务器接收到的请求进行解析,当这个请求被DispatcherServlet获取到之后,DispatcherServlet需要根据HandlerMapping对象的映射关系,将这个请求转交给真正能够处理客户请求的【Controller控制器】来处理。Controller处理完成之后,返回ModelAndView对象,也就是模型和视图的结合体。ViewResolver根据ModelAndView中的逻辑视图名找到真正的物理视图,同时使用ModelAndView中模型里面的数据对视图进行渲染。

SpringMVC在项目中的搭建:
    1.构建Web项目
    2.导入jar包
    3.配置前端控制器
     (就是一个Servlet对象),继承自HttpServlet。在web.xml中配置
        例如:
        <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>*.action</url-pattern>
        </servlet-mapping>
    4.编写Controller控制器
        实现Controller接口
    5.配置处理器映射器(有默认配置)
        作用:将url和bean的name对应
    6.配置处理器适配器(有默认配置)
    7.配置视图解析器(有默认配置)
        前缀和后缀都是 空
    8.配置处理器
        把编写好的handler/controller在spring中进配置,让其接受Spring IoC容器管理
      <bean name="/hello.action" class="com.briup.web.controller.HelloWorldController"/>  
    
拦截所有请求:
        <url-pattern>/</url-pattern>
自定义拦截请求:
        *.html,*.css......
解决静态资源被拦截:
        一.利用Tomcat的defaultServlet来处理静态文件
            例如:
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.jpg</url-pattern>
        </servlet-mapping>
        特点:1.要配置多个
              2.要写在DispatcherServlet前面
              3.高性能
        二.使用<mvc:resources>标签
            例如:
                <mvc:resources mapping="/images/**" location="/images/"/>
                mapping: 映射
        两个*,表示映射指定路径下所有的URL,
        三. 使用<mvc:default-servlet-handler/>标签
        在spring配置文件中加入此标签配置即可
spring提供的编码过滤器:
        <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

上一篇:Netty 源码深度解析(九) - 编码(上)


下一篇:SpringMVC路径变量中使用正则表达式匹配