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.通过这个标签所映射的路径才会加在我们相应的配置文件Spring-mvc等.


//配置自己需要的拦截器 这里使用的是为了让spring能接收DELETE请求的拦截器
hiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter


hiddenHttpMethodFilter
/*

//配置Servlet Spring中的自己的Servlet就是DispatchServlet
spring
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:spring/spring-properties.xml//配置加载Spring配置文件路径

1


spring
///设置Servlet的映射路径

spring-mvc.xml文件



//上边为配置文件的schema约束



<mvc:annotation-driven />


mvc:default-servlet-handler/
















<context:component-scan base-package="com.comment.george.web" />

上面就是通常的配置文件, 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把页面发还给用户.

posted @ 2018-04-30 11:19  CurryRice  阅读(329)  评论(0)    收藏  举报