每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

SpringMVC学习笔记(三)-SSM整合开发

SpringMVC学习笔记(三)-SSM整合开发

拦截参数的配置
  • <url-pattern>/</url-pattern>:将对应拦截参数的请求交予指定的servlet处理

  • 当拦截参数为*.xx时,静态资源等交予Tomcat处理,匹配后缀的交予DispatcherServlet处理

    • Tomcat的DefaultServlet,处理静态资源及没有被其他Servlet匹配的请求

      <servlet>
          <servlet-name>default</servlet-name>
          <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
          <init-param>
              <param-name>debug</param-name>
              <param-value>0</param-value>
          </init-param>
          <init-param>
              <param-name>listings</param-name>
              <param-value>false</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
      
  • 当拦截器参数设置为/时,DispatcherServlet将替代Tomcat的DefaultServlet,默认情况下js、图片、html等静态资源都没有配置对应的控制器对象,导致不能正常访问

  • 使用<mvc:default-servlet-handler />标签后,SpringMVC将在容器中调用DefaultServletHttpRequestHandler将静态资源的访问交予服务器默认的处理器处理,此标签与@RequestMapping注解存在一定的冲突,需要加入注解驱动标签<mvc:annotation-driven/>解决

  • 使用<mvc:resources mapping="/Xxx/Xxx" location="/Xxx/"/>标签处理,此时框架将会调用ResourceHttpRequestHandler进行处理,mapping为访问静态资源的uri地址,location为静态资源在项目中的位置,且由框架进行处理,不会调用Tomcat的DefaultServlet进行处理

    <!--可以使用通配符 ** -->
    <mvc:resources mapping="/resource/**" location="/resource/"/>
    
SSM整合开发
  • 由于SpringMVC本身就是Spring的一部分,其并不需要专门整合,SSM整合实质是将Mbatis整合入Spring,实现方式有两种:1.基于XML配置方式;2.基于注解的方式

  • 将对象交予容器管理,存在的两个容器分别为:1.Spring容器;2.SpringMVC容器(管理控制器对象)

  • Spring容器的创建

    • 容器对象是WebApplicationContext,将会读取指定的文件,将bean标签与注解标识的对象放入容器

    • <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
  • SpringMVC容器的创建

    • 前端控制器DispatcherServlet将会调用Servlet的init()方法创建容器对象,容器对象是WebApplicationContext,将会读取配置文件,将控制权对象放入容器中进行管理

    • <servlet>
          <servlet-name>dispatcherServlet</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
      
  • SpringMVC是Spring的子容器,可以访问父容器的Service或Dao对象

路径
  • 路径以协议开始:绝对地址,唯一,能够被直接访问
  • 路径无协议开头:相对地址,单独访问不能使用,需要配合参考地址才能进行正常访问
    • 访问地址=参考路径+资源
    • 路径开始有斜杠:参考地址为协议+主机名+端口号,缺少项目地址,解决办法:
      • el表达式${pageContext.request.contextPath}
    • 路径开始无斜杠:当前资源的访问路径,存在重复访问路径错误问题,解决办法:
      • 使用el表达式补充项目地址${pageContext.request.contextPath}
      • 使用<base>标签,在head标签中添加,规定所有无斜杠的相对地址的参考地址
转发与重定向
  • forward
    • 语法格式:"forward:视图完整路径"
    • 此时视图解析器无法工作
    • 可以设置于ModelAndView中或String只返回视图
    • 可用于转发至视图解析器外的视图
  • redirect
    • 语法格式:"redirect:视图完整路径"
    • 此时视图解析器也无法工作
    • 此时框架将会将第一次请求中模型中的简单数据转化为字符串附加于重定向目标页面后,实现两次请求间的数据传递
    • 可用EL表达式的${param.参数名}获取参数的值
    • 重定向无法访问受保护的目录
posted @ 2020-12-13 15:34  雨下整夜~  阅读(67)  评论(0)    收藏  举报