总结篇-SpringMVC

  前言:   

  前一段时间学习了SpringMVC,但是由于本人学习缺少耐心和独立思考,所以当时学习SpringMVC时,只是照搬框架而已,对SpingMVC的工作原理和流程对不是很了解,导致后来的学习时总是觉得思路不是很通顺,对学习事倍功半,所以今天特别总结了一下SPringMVC的工作原理流程,希望对自己的今后学习有些帮助。


 正文:

 1.SpringMVC是基于Sping的一个Web框架,具有Spring容器IOC(反转控制)和AOP(切面编程)的优点,总之SpringMVC具有Spring的所有优点

2.SpringMVC是围绕 DispatcherServlet编写的,它处理所有的HTTP请求和响应,




  DispatcherServlet对请求的处理顺序:

(1)在接收到HTTP请求后,DispatcherServlet会调用相应的Controller

(2)Controller根据请求的方法(GET/POST)调用相应的服务方法,最后返回视图名称给DispatcherServlet

(3)DispatcherServlet调用ViewResolver解析视图名称,

(4)DispatcherServlet将模型数据传给视图,并将视图呈现在浏览器。

 2.必须的配置

     2.1 web.xml示例:

<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Spring MVC Application</display-name>

   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
   </servlet-mapping>

</web-app>

      重点:

   web.xml配置在web应用程序的web/WEB-INF 目录下,在DispatcherServlet初始化时,框架默认从web/WEB-INF目录下查找[servlet-name]-servlet.xml文件加载应用程序上下文。

   如果不想使用默认的[servlet-name]-servlet.xml文件名和默认的位置web/WEB-INF ,可以通过在web.xml中添加servlet监听器ContextLoaderListener定义文件名和文件位置

  示例:

<!-- other xml configuration -->

<!--  Load By Spring ContextLoaderListener-->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

/Resources/configuration/application.xml

/WEB-INF/abc.xml

</param-value>

</context-param>


<!-- Spring ContextLoaderListener-->

   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

注:Spring应用程序ContextLoaderListener将读取其他XML配置文件加载应用程序上下文。


  2.2 [servlet-name]-servlet.xml 示例:

 

   <context:component-scan base-package="com.yiibai" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>

[servlet-name]-servlet.xml 说明

(1)[servlet-name]-servlet.xml 主要作用:创建定义好的java  bean

(2)<context:component-scan base-package =... /> :启动SpingMVC注释扫描功能,生成对应的java bean示例对象

(3)InternalResourceViewResolver:视图解析器


3. SpringMVC工作流程




4.控制器和方法

(1)"redircet:"  控制器的重定向:使用前缀“redirect:”,该方法返回字符串,重定向到其他视图

(2)@RequestParam  将请求参数绑定到控制器方法参数  示例:@RequestParam(value=“name”,defaultValue=“user”)String name

(3)@PathVariable      将方法参数绑定到一个URI模板变量的值  

示例:

@RequestMapping("/web/fe/{sitePrefix}/{language}/document/{id}/{naturalText}")
    public String documentView(Model model,
            @PathVariable(value = "sitePrefix") String sitePrefix,
            @PathVariable(value = "language") String language,
            @PathVariable(value = "id") Long id,
            @PathVariable(value = "naturalText") String naturalText) {

在这里顺便把URL,URI,ContextPath理一下:

URL:http://localhost:8080/HelloSpringMVC/web/fe/default/en/document/8108/spring-mvc-for-beginners

URI:/web/fe/default/en/document/8108/spring-mvc-for-beginners

ContextPath:/HelloSpringMVC


5.@RequestBody 和 @ResponseBody 

(1) @RequsetBody 注解:读取requset请求body的数据,解析后将返回的对象绑定到controller方法的参数

(2)@ResponseBody注解:将controller方法的返回对象写到Response对象的body  使用时机:当返回数据不是html标签的页面,而是其他格式的数据时(json,xml)。


6.SpringMVC请求参数获取的方式

   详见下一章


7.<context:component-scan /> 和 <mvc:annotation-driven /> 区别:

   之前在配置[servlet-name]-servlet.xml 文件时,总是搞不清楚两者的区别,只是照抄,今天刚好来总结一下

    区别:

(1)<context:component-scan /> :启动SpringMVC注解扫描功能,将带有@Controller ,@Service 等注解类注册到Spring容器,应应用的是Spring IOC(反转控制)

(2)<mvc:annotatiion-driven/> : 主要功能是处理请求映射,决定哪个controller的哪个方法来处理当前请求。


8.appilcationContext.xml 和 [servlet-name]-servlet.xml 区别:

区别:

(1)applicationContext.xml 是Spring全局配置文件,控制Spring的功能特性,如:IOC ,AOP等,

 [servlet-name]-servlet.xml 是SpringMVC的配置文件,包含注解扫描,视图解析等。

(2)两个配置文件的位置和作用:

applicationContext.xml 是系统级别的配置,作用范围是应用程序上下文

                [servket-name]-servlet.xml 是servlet级别的配置,作用范围是servlet上下文

        (3)在web.xml的配置:

applicationContext.xml  : 在<context-param /> <listener/>初始化

[servlet-name]-servlet.xml : 在DispatcherServlet初始化时初始化,默认位置在WEB-INF/ 目录下,默认文件名为[servlet-name]-servlet.xml,当没有自定义servlet配置文件位置,且默认目录也没有配置servlet配置文件时,服务器启动会报错。


注意:

因为servlet配置文件只负责请求的转发,返回结果的解析,以及静态资源文件的解析,所以除了视图的解析方式,静态资源文件的存放位置,Controller的初始化之外,其他的都不应该存在servlet配置文件。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值