浅谈SpringMvc(适用初学者理解,欢迎指正)

闲着无聊看了一下SpringMvc运行机制,做一些理解记录:

首先,SpringMvc这个框架是表现层的框架,我们知道,表现层的框架无非就是:

接受页 面请 求参数

B.向页面发回数据这两个东西了。

所以,首先呢,我们来看一下这个框架的运行流程....

这里我们先放上一张图:

我根据这张图来详细的说明一下:

首先,SpringMvc中有一个东西,叫做前端控制器,dispatchServlet,所有的请求,数据,都是通过这个中转站来进行请求转发的当我们的表现层接受到一个用户的请求的时候,数据会被带过来,首先这个前端控制器会拿着用户传过来的url中的地址去处理器映射器里面找到我们对应的执行方法,也就是我们自己在表现层(Controller)写的处理器,那么映射器一一找到这些东西映射之后,同样也是发给前端控制器,然后这时候前端控制器不会直接的将我们的请求数据等发送给处理器,而是通过一个处理器适配器,去寻找对应的处理器适配器,然后处理器适配器将我们的请求真正的发到处理器上去执行...最后处理器执行完毕之后,SpringMvc中默认采用ModelAndView的机制,会返回这么一个对象,model中封装着处理器执行之后的对象,View则是返回我们处理之后要请求的jsp页面参数,然后适配器这个家伙就把ModelAndView又一次返回给前端控制器。

这时候,SpringMvc的三大件中的视图解析器开始起作用了,这是SpringMvc很有特色的一个东西,这个东西会把我们传过去的ModelAndView请求发送给视图解析器去解析,这个解析器很强大,可以解析jsp,word,pdf等各种东西。其实解析就是把jsp中的html代码弄到view对象里面去。。。。

然后最后我们进行视图渲染,就是把我们model中的数据和view对象进行处理和封装,最后返回一个html页面,然后返回给用户显示

 

过程差不多就是这样.接下来

我们就做一个简单的东西,商品列表对象的方法吧:

@Controller

Public Class ItemsController {

@RequestMapping("/list")

Public ModelAndView  itemList() throws Exception{

List<Items> itemList = new ArrayList<>();


//商品列表

Items items_1 = new Items();

items_1.setName("联想笔记本_3");

items_1.setPrice(6000f);

items_1.setDetail("ThinkPad T430 联想笔记本电脑!");


Items items_2 = new Items();

items_2.setName("苹果手机");

items_2.setPrice(5000f);

items_2.setDetail("iphone6苹果手机!");


itemList.add(items_1);

itemList.add(items_2);

//开始创建ModelAndView 对象封装我们的数据...

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("itemList", itemList);

modelAndView.setViewName("itemList");

return modelAndView;


}

}

 

首先@Controller注解是扫面Controller包下的所有类,项目启动的时候创建实例以方便调用,这是Spring中的东西,不需要过多解释了。

再来是@RequestMapping("/list")这个注解,这个其实就是相当于我们说的处理器映射器的作用一样,通过/list这个地址,找到了我们写的这个itemList这个方法,我们知道,其实这个中间是有通过处理器适配器过滤一下的。然后创建数据,封装数据,返回数据,走的就是视图解析器的东西了。解释完毕

 

那么我们在SpringMvc.xml中需要怎么配置呢??

首先自然是配置一个Controller的包扫描

 

然后

由于我们的SpringMvc源码包中的DispatchServlet.properties中有配置着处理器适配器,处理器映射器,视图解析器,所以如果我们不在SpringMvc.xml中配置这三大件其实也没什么,但是如果不配置,我们每次请求的时候,就会去把这个DispatchServlet.properties扫描一遍,显而易见,会降低我们程序的执行效率,所以这时候我们就需要把这三个东西配置进去了。

配置为:

<!-- 注解驱动:

作用:替我们自动配置最新版的注解的处理器映射器和处理器适配器

 -->

<mvc:annotation-driven></mvc:annotation-driven>

 

<!-- 配置视图解析器

作用:在controller中指定页面路径的时候就不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称

-->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 真正的页面路径 =  前缀 + 去掉后缀名的页面名称 + 后缀 -->

<!-- 前缀 -->

<property name="prefix" value="/WEB-INF/jsp/"></property>

<!-- 后缀 -->

<property name="suffix" value=".jsp"></property>

</bean>

这里其实处理器适配器和映射器也可以和视图解析器一样直接注入,但是会涉及到版本问题,有一些方法以及过时了,有一些是在SpringMvc3.0版本以后开始用的,所以我们这个时候直接用SpringMvc中的一个叫做注解驱动的东西来配置。会自动帮我们注入最新版本的处理器适配器和映射器

到这里,SpringMvc框架的一些基本的东西就搞完了,接下来便是进入正题,接收参数了。SpringMvc这个框架还是很强大的,强大的兼容性,也可以接受各种类型的参数,在底层就做了自动转型,Model.addattribute()这个方法其实底层用的就是request.setAttribute()这个方法做了,做了一层封装而已,穿着袜子洗脚的行为。

那么言归正传,可以接受怎么样的参数呢?

首先是默认类型:httpServletRequest,httpServletResponse,httpSession,model这四个默认类型

------再来是基本类型:像一些基本的包装类,Integer,String,Double,boolean,Long等都可以接收,SpringMvc底层会自动转型(强大。。。)

-------然后是我们中意的pojo类型,如果传入的是一个pojo类型作为参数的话...要注意,前端页面表单提交中的input框中的name属性值,必须要和pojo类型中的属性值一致,名字不能出错,不然封装不了数据。

---------接着自然就是vo类型了,vo类型其实就是对我们pojo类型再进行了一层封装,所以在我们前端传数据的时候,必须要vo类型.属性.属性.属性,直到对应的要传入的属性为止。

 

关于SpringMvc这个框架的浅谈就到此为止,其实后续就是一些数组类型的接收,或者其他类型接收和REST风格的东西了,没啥好说,看一下学一下就可以了。重在理解整个SpringMvc整个框架运行流程以及理解他是干啥用的,怎么配置,为什么这样配置,就可以了.

原创文章 25 获赞 5 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41450959/article/details/88813092