zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    <转>MSDN上关于XPath的语法文章
    <转>正则表达式语法
    <转>反射技术的简单介绍
    <转>css中用expression实现js的onmouseover/onmouseout事件
    <转>在xslt中实现split方法对查询字符串进行分隔
    <转>SQL Server中的XML数据进行insert、update、delete
    <转>VS2010项目转换到VS2008下方法
    <转>在xslt 1.0 中取得当前时间
    C# 发送邮件的Helper类
    DataTable 类的学习笔记
  • 原文地址:https://www.cnblogs.com/nyhhd/p/12547404.html
Copyright © 2011-2022 走看看