Spring MVC框架

Spring MVC框架知识点:

1Spring MVC的本质?

Spring MVC的是通过spring-webspring-webmvc两个包实现的,spring-web中提供了一个监听器,能够在web项目启动的时候就加载applicationContext.xml文件,生成IoC 容器;spring-mvcweb提供了Servlet前端控制器,使得所有的请求都会进入该Servlet(其实也不是所有请求,当请求是jsp的话,可以直接返回,其他都会进入,这样会导致静态资源无法访问而报错的问题,也需要进行相应的配置), 然后在这一个Servlet中根据请求的参数调用不同Bean对象的方法。

备注:在web项目中,tomactspringspringmvc都是容器,tomcat管理的是Servlet 对象,spring管理的service层和dao层的对象,springmvc管理的是controller层的对象。

springspringmvc容器不是同一个容器,因此在进行配置的时候,将所属对应容器的对象分开配置,同时spring容器是采用监听器进行配置的,而springmvc容器是在配置 前端控制器DispatcherServlet时指定的。

Spring MVC的工作流程:

1、前端请求进入前端控制器(DispatcherServlet);

2、前端控制器(DispatcherServlet)使用处理器映射器(HandleMapping)解析请求,返回处 理器执行链(HandleExecutionChain);

3、前端控制器调用处理器适配器(HanderAdaptor)

4、HandlerAdaptor调用处理器(Controller)

5、处理器返回ModelAndView对象;

6、前端处理器再将该对象给视图解析器(ViewResolver)进行解析渲染;

7、然后返回给前端。

由上面Spring MVC的工作流程可知,Spring MVC主要是一个前端控制器,该前端控制 器包括各个组件,当请求进入该前端控制器之后,使用各个组件完成相应的功能,组件包括:处理器映射器(HandlerMapping)、处理器适配器(HandlerAdaptor)、处理器 (Handler)、视图解析器(ViewResolver)、视图(View

在进行前端控制器DispatcherServlet配置的时候,也可以对上述组件进行配置,如果不 配置则会采用默认配置,如果配置了将会对生成的相关组件进行配置,比较常进行配置 的是InternalResourceViewResolever,对视图资源的前后缀进行配置。

2web项目中的监听器

web项目中,可以使用ServletContextListenter监听web项目的启动,可以编写这个监听器,实现项目启动时数据的加载。

(可以使用该监听器加载applicationContext.xml,生成applicationContext对象并将其放入servletContext域中)

3web项目中的全局初始化参数

web项目中可以配置全局初始化参数,由于2中使用到applicationContext.xml的位置参数,因此可以使用全局初始化参数进行设置,

结合2完成spring容器在web项目启动的时候就加载。

4Spring提供获取应用上下文监听器(是对2和3的封装)

Spring提供了一个监听器ContextLoadListener,该监听器可以监听web项目的启动并且 自动加载applicationContext.xml的配置文件生成IoC容器(应用上下文对象),然后将 该应用上下文对象存储进ServletContext域中,同时Spring还提供了 WebapplicationContextUtils工具类用于从ServletContext域中获取该应用上下文对象。

备注:上述相关的类存在于spring-web包中,因此需要导入相应的包。该监听器还是需 要提供applicationContext.xml的路径,因此该路径还是需要配置到全局初始化参数中。

5Spring MVC理解

Spring MVC是基于java实现的MVC设计模型的请求驱动类型的轻量级框架,属于 SpringFrameWork的后续产品,已经融入在Spring Web Flow中。

Spring MVC可以通过一套注解让一个简单的java类成为处理请求的控制器,而无须实 现任何接口,同时它还支持RESTful编程风格的请求。

备注:在web项目中,如果前端访问web项目的静态资源,可以直接将项目中的静态 页面返回,但是如果前端访问的是web项目中的动态资源,该请求对应的是一个Servlet 资源,可以在该Servlet中进行逻辑判断、请求转发和跳转等操作。

理解:Spring MVC底层做了什么?

由上可知,每个Servlet本质上就是一个方法,在该方法中实现一定的逻辑功能,可以看作是一个动态资源,都需要在web.xml中进行配置,配置比较繁琐。

如何简化呢?(思路参考)

1)可以将原本需要用的很多Servlet中的方法放在Java对象中

2)配置一个Servlet

3)配置一个过滤器(spingmvc在配置的时候只配置一个缺省的servlet,优先级低,表示匹配不到的情况下,请求才会进入这个servlet,过滤器还是需要配置,因为post请求会出现乱码问题,可以使用过滤器解决)

4)该过滤器将前端的所有请求都转发到该Servlet

5)这个Servlet中对请求进行解析,创建相应的java对象并调用相应的方法(在配置前端控制器的时候已经指定了spring-mvx.xml,表示生成springmvc容器,并且将扫描到的controller层对象放入该容器)。

备注:Spring MVC实现了对上述思想的封装,提供了前端控制器(一个Servlet,存在于springmvc包中)

6、Spring MVC的配置

6.1 web.xml的配置

1)配置监听器,监听web服务的启动,在启动的时候加载applicationContext.xml文件, 生成IoC容器,为了使spring容器和springmvc容器分开,该配置文件只扫描service 层和dao层;(备注:该监听器需要指定applicationContext.xml的路径,通过全局 初始化参数指定,applicationContext.xml配置组件扫描,扫servicedao层, spring-mvc.xml配置组件扫描,扫controller层)

2)配置前端控制器(DispatcherServlet),这个前端控制器的本质就是一个Servlet,因此按普通Servlet进行配置即可(只不过这个Servletspringvc提供的而已),该 Servlet的路径指定为反斜线/,表示所有的请求都进入该Servlet

6.2 controller层的配置

该层使用注解进行配置。

@Controller:使用该注解修饰controller层的类,项目会将该对象放入springmvc容器 中,供前端控制器使用。

该注解用于修饰类。

@RequestMapping:作用是将前端请求的URL与方法之间建立映射关系,当前端请求进 入前端控制器之后,前端控制器解析URL,根据URL选择需要调用的方法。

该注解可用于修饰类和方法。

该注解的参数:

value:指定访问路径。

method:指定访问的方法。

params:用于限定请求参数的条件,支持简单的表达式。

params = {“name”}表示请求中必须有name参数;

params={“name!abc”}表示请求中name参数不能是abc

@ResponseBody:作用是直接将方法返回的字符串显示在页面中

等价于response.getWriter().println(“字符串”)

@RequestParam:作用是参数绑定,默认情况下参数的封装是key值与形参相同,可以使用@RequestParm,显示指定将key值匹配到那个形参。

public void test(@RequestParam(“name” String username)表示将请求中的keyname与形参username进行绑定,username接收请求中 name的值。

该注解的参数:

value:请求数据中key的名称;

required:设置为true,表示请求中必须要有该key,否则报错;

默认是false,表示可有可没有

defaultValue:表示如果请求中如果没有该key,则使用默认值

posted @ 2020-05-17 02:57  wuyiping  阅读(172)  评论(0编辑  收藏  举报