SpringMvc基础

SpringMvc是Spring中非常重要的一环,下面来看一下它具体是什么吧.

1.SpringMvc的作用

通过SpringMvc可以大大的简化我们传统的Servlet的编写方法,让MVC层面的开发人员更专注于业务代码,提高工作效率.

2.SpringMVc前后台数据交换的方法

一个网站或者一个作品肯定少不了前台后端的数据交换方法,我们通过Spring的方法非常方便就可以拿到对应的数据.

2.1前台向后台传递数据的方法

在前台向后台传递数据的时候,我们通过两个注解就可以方便的拿到相应的数据.

@RequestParam

RequestParam这个类用于接收前台页面中的参数, RequestParam("id")String id 括号中的id要与前台中传递数据的ID一样 后者数据类型要与前台ID的传递数据一样,这样才能方便接收数据.

用法:RequestParam("前台name")数据类型 数据名称

Tips:在编译器中,有时候你不添加这个注解也可以正确获取到数值,是因为编译器中会提供编译好的class文件, spring通过反射不能正确获取到变量名称,会通过编译好的class文件进行获取,如果脱离编译器,那么会出现数值传递出现错误的情况.

@Pathvariable

PathVariable用于获取访问路径中{}中的值,例如RequestMapping中的映射路径为(/ad/{id}),browser的访问路径为/ad/1.

那么此时我们要拿到id的数据就要通过这个注解,注解的用法为PathVariable("id")数据类型 数据名称,这样就可以正确获取到访问路径上的id.

2.2后台向前台数据

当前台将请求数据传递过来后,我们正确获取到之后,对其进行若干的业务处理,最后还是要将其返回给前端,以便最后推送给用户是正确的页面,SpringMvc同样为我们提供了简单的工作方法,便于我们进行数据交换.

Spring中为我们提供了Model和ModelAndView两种从后端控制器向前端页面传递数据的方法,下面将分别介绍一下两者之间的区别以及用法

2.2.1.Model(ModelMap)
public class ExtendedModelMap extends ModelMap implements Model

通过Spring中对Model类及其实现类进行查看可以发现,Model本身是一个接口,它的实现类是extendModelMap,继承了ModelMap类,同样它也可以使用ModelMap中的所有方法.

Model对象的创建以及使用:

Model对象由Spring控制器进行创建,不需要我们手动创建,只需要在传参接口进行定义即可.

通过model.addtribute(String,Object)进行数据对象的添加.String为前台属性的名称,Object为你要传入的数据.

下面我们通过一个例子来了解一下:

@RequestMapping("/modifyInit")
public String modifyInit(@RequestParam("id")Long id,Model model){
model.addAttribute("modifyObj",id);

return "/content/adModify";
}
//modify为前端JSP变量名称, id为属性值.
//在前端页面中我们可以通过EL表达式${变量名称.属性值}来对其进行取值.
//在modify页面中通过${modifyObj.id}可以获取KEY所对应的值.  

使用步骤: 在接口属性定义一个Model的变量,通过addtribute方法进行添加,在相应的前台页面当中通过EL表达式进行值的获取即可.

2.2.2.ModelAndView

ModelAndView从名字上就知道,意思为模型和视图,自然使用也分为两方面.

ModelAndView对象的创建以及使用

ModelAndView对象需要我们自己进行对象的创建.
通过ModelAndView.addtribute(STRING,OBJECT)进行数据传输.

我们通过一个例子查看一下.

public ModelAndView xxxxmethod(String someparam)
{
//省略方法处理逻辑若干
//构建ModelAndView实例,并设置跳转地址
ModelAndView view = new ModelAndView("address");
//将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型
view.addObject("key",someparam);
......
//返回ModelAndView对象view实现页面跳转
return view;
}
2.2.3.ModelAndView以及Model之间的区别:
实现页面跳转的方式.

Model如果要实现页面跳转 要依赖Spring本身提供的方法:
返回值类型为String时,通过return返回一个视图页面的路径进行跳转.

ModelAndView则将路径属性设置到实例中,最后返回ModelAndView实例,但是同时也限定了最后自身的返回值.

对象的创建

Model由Spring进行对象的创建不用自己进行管理.

ModelAndView对象的创建则需要我们自己进行手动创建.

3.SpringMvc的配置文件

web.xml文件:
在XML文件中配置DispatchServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">


<filter>//配置自己需要的拦截器 这里使用的是为了让spring能接收DELETE请求的拦截器
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
  </filter-mapping>





  <servlet>//配置Servlet Spring中的自己的Servlet就是DispatchServlet
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/spring-properties.xml</param-value>//配置加载Spring配置文件路径
</init-param>
<load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>//设置Servlet的映射路径
  </servlet-mapping>

spring-mvc.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
//上边为配置文件的schema约束
<!-- 配置SpringMVC -->
<!-- 1.开启SpringMVC注解模式 -->
<!-- 简化配置:
(1)自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
(2)提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
-->
<mvc:annotation-driven />

<!-- 2.静态资源默认servlet配置
(1)加入对静态资源的处理:js,gif,png
(2)允许使用"/"做整体映射
 -->
<mvc:default-servlet-handler/>

<!-- 3.配置jsp 显示ViewResolver -->
<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />-->
<!--<property name="prefix" value="/WEB-INF/html/" />-->
<!--<property name="suffix" value=".html" />-->
<!--</bean>-->

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


<!--配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定所上传文件的总大小不能超过20M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="20000000"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>

<!-- 4.扫描web相关的bean -->
<context:component-scan base-package="com.comment.george.web" />

</beans>

上面就是通常的配置文件, xml文件的解析顺序同样也是从上到下,配置的时候要注意优先级的问题,否则可能不会执行会出现相应的错误,并且在配置拦截器的时候,一定要注意和listener的中的配置文件不要有冲突.

4.SpringMvc的核心-DispatchServlet的工作原理以及流程

Controller=Handler 处理器和控制器一样

DispatchServlet名字就叫做Servlet的分发器, 顾名思义 所有servlet的请求都是由它进行分配调动的,下面我们一起来看看它的工作流程是怎么样的.

1.用户向服务器发送请求,在到达DispatchServlet之前 会先经过我们的过滤器对请求进行过滤, 如果有则进行过滤,如果没有则被DispatchServlet捕获

2.DispatchServlet对URL进行解析,根据URL调用handlermapping 也就是处理映射器,进行映射处理,最后返回Handlerexecution

3.根据获得的Handler执行对象,选择HandlerAdapter处理适配器->之后会进行拦截器的处理.

4.处理适配器提取Requst中的模型数据填充Handler入参进行数据绑定等功能,开始执行Handler

5.执行Controller方法后返回ModelAndView给DispatchServlet.

6.DispatchServlet将view交给视图解析器进行解析, 然后得到返回的视图.

7.DispatchServlet将Model中的数据填充到view当中, 形成一个完整的页面 最后通过Response把页面发还给用户.

猜你喜欢

转载自www.cnblogs.com/Curry-Rice/p/8973218.html