生活是苦难的,我又划着我的断桨出发了..... 博客首页

SpringMVC学习一

Spring MVC

Spring MVC是目前主流的MVC设计模式的企业级框架,是Spring的一个子模块,开发起来无需整合。

MVC设计模式

将应用程序分成Controller、Model、View ,Contrller接收客户端请求,调用Model生成业务数据,传递给View层展示。

开发SpringMVC程序

1、jar包

spring-aop.jar
spring-beans.jar
spring-context-jar
spring-expression.jar
spring -core.jar
spring -web.jar
Commons-logging.jar
spring-webmvc.jar

第一个SpringMVC程序

Servlet--->SpringMVC

jsp -> Servlet(SpringMVC) ->Jsp

普通的servlet流程 请求 url-pattern -----> 交给对应的servlet去处理

如何让Springmvc介入程序

通过配置一下web.xml,拦截所有请求,交给SpringMVC处理

     <servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>	
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>  类加载器  加载springmvc.xml
		</init-param>		
		<load-on-startup>1</load-on-startup>		
	</servlet>

	<servlet-mapping>
		<servlet-name>springDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

配置springmvc.xml

     <!-- 扫描有注解的包 -->
     <context:component-scan base-package="com.xingwei.handler"></context:component-scan>

     <!-- 配置视图解析器(InternalResourceViewResolver) -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/views/"></property>
	<property name="suffix" value=".jsp"></property>
     </bean>

流程

通过<a href="welcome">first  springmvc  -welcome</a>  ——>发出请求  ——>被@RequestMapping("welcome")拦截

——>返回一个success  ——>通过视图解析器的前缀后缀去拼接 <property name="prefix" value="/views/"></property>
		                                   <property name="suffix" value=".jsp"></property>

——>/views/success.jsp

完整的代码罗列

<!--index.jsp-->
<a href="welcome">first  springmvc  -welcome</a>


<!--跳到Controller-->
//接口     注解   配置  注解
@Controller             //控制器
public class SpringMVCHandler {
	
	@RequestMapping("welcome")
	public String welcome() {
		return "success" ; 
	}
}


<!--返回success,通过视图解析器去拼接-->
<!-- 配置视图解析器(InternalResourceViewResolver) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
<!--找到/views/success.jsp-->
 welcome to spring  mvc

通过以下配置,让程序扫描springmvc.xml配置文件

<init-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:springmvc.xml</param-value>
</init-param>		

指定springmvc配置文件的路径 ,如果要省略 必须放到 默认路径:/WEB-INF/springDispatcherServlet-servlet.xml

一般默认是放到类路径,不放这里,默认的名称springmvc.xml

运行以上程序,可以发现

映射 是去匹配@RequestMapping注解 可以和方法名、类名不一致 默认是使用了请求转发的方式

通过method指定 请求方式(get post delete put)

@RequestMapping(value = "welcome",method = RequestMethod.POST,params = {"name2=zs","age!=23"})

name2="name2"
  
name指的是前台表单输入框中是name引号里的name       age指的是前台表单输入框中name引号里的age

age!=23   a.如果有name="age"   则值不能是23,b.没有age也可以

Spring MVC 的核心组件

  • DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。

  • Handler:处理器,完成具体的业务逻辑,相当于 Servlet 或 Action。

  • HandlerMapping:DispatcherServlet 接收到请求之后,通过 HandlerMapping 将不同的请求映射到不同的 Handler。

  • HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。

  • HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。

  • HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。

  • ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。

  • ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。

Spring MVC 的工作流程

  • 客户端请求被 DisptacherServlet 接收。

  • 根据 HandlerMapping 映射到 Handler。

  • 生成 Handler 和 HandlerInterceptor。

  • Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给 DisptacherServlet。

  • DispatcherServlet 通过 HandlerAdapter 调用 Handler 的方法完成业务逻辑处理。

  • Handler 返回一个 ModelAndView 给 DispatcherServlet。

  • DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析为物理视图 View。

  • ViewResovler 返回一个 View 给 DispatcherServlet。

  • DispatcherServlet 根据 View 进行视图渲染(将模型数据 Model 填充到视图 View 中)。

  • DispatcherServlet 将渲染后的结果响应给客户端。

Spring MVC 流程非常复杂,实际开发中很简单,因为大部分的组件不需要开发者创建、管理,只需要通过配置文件的方式完成配置即可,真正需要开发者进行处理的只有 Handler 、View。

posted @ 2020-12-14 10:35  黑黑XW  阅读(77)  评论(0编辑  收藏  举报