今天老弟学习了一下SpringMVC,就在这里记述自己学到的概要和一些小感悟。
首先学习SpringMVC首先要明白它是什么,
- SpringMVC是什么:
SpringMVC是一个轻量级的表现层框架,它是Spring框架的一部分。
SpringMVC是对servlet的封装和增强,简化了servlet的操作。
那什么是MVC呢?
在笔者狭隘的编程世界观里,MVC其实是一种程序架构思想,M (Modle)代表模型,在笔者眼里这就是整个项目中的实体模板/实体类,当项目需要创建对象时,便把必要的参数传入模板并注入创建好的对象中,V (View) 代表视图,也就是用户和程序交互的界面,C (Controller) 代表控制层,就是对对象的操作器,这一层的对象大多都创建于项目刚运行的时期,类似于整个项目的管理者。
在SpringMVC中,其对请求的处理流程大体如下:
前端控制其收到来自页面发送过来的请求后,向处理器映射器发送请求查询Handler, 经过处理映射后返回给前端控制器一个执行链对象,然后依据请求链发送给处理器适配器进行处理器适配后执行请求并通过ModuleAndView对象返回结果集给前端控制器,然后发送请求给视图解析器做处理以后返回一个View对象,然后再进行视图渲染,展现到用户页面上。
整个过程中涉及到很多控制器和处理器对象
有三个最主要的组件需要深刻理解
- 处理器映射器
- 处理器适配器
- 视图解析器
处理器映射器HandlerMapping负责根据用户请求的Url找到Handler即处理器,SpringMVC提供了不同的映射器来实现不同的映射方式,例如:实现接口方式,注解方式等。
处理器适配器HandlAdapter:对Hanlder处理器进行时进行必要的数据类型转换操作
视图解析器ViewResolver:进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址,在生成View视图对象。
简单来讲,就是这些组件之间的分工合作,完成了整个页面和用户的交互逻辑,在使用这些组件之前,我们首先要做的是导入相关依赖,并配置Web.XML文件
在mvn项目里的pom文件中写入相关依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--SpringMVC jar引入-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<!--使用范围,编码阶段使用,不打包,由中间件服务器提供-->
<scope>provided</scope></dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<servlet>
<servlet-name>springmvc</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>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
----------------------------------------------------------------------------------------
//springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
">
<mvc:annotation-driven/>
<context:component-scan base-package="com.artisan.spring"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
分割线上半部分是在Web.xml文件里关于servlet和servletMapping有关的文件后者是用来定义servlet的作用对象和作用域的,分割线下面是关于Spring里servlet容器的相关配置
然后在我们的实体类方法上加入@requestMapping(“Path”) 注解就可以了注解里可以定义这个servlet的路径,这个注解有很多属性,例如 get/post 方法限定,请求参数的绑定 (接受简单数据类型参数,直接在形参中声明即可) 要求形参名称和传递参数名称保持一致,在传递对象类型的参数时,要求请求参数名称列表要与对象属性有对应关系,在对象中包含集合类型数据时用集合名称[index].属性名 来表示集合中的属性,当工程中出现中文乱码问题时,我们要用过滤器解决转码问题
在Web.xml文件中加入这样的代码
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
还有如果遇到不能完美映射的对象,就要用到自定义类型转换器,旨在链接请求和自己entity的对应关系
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.artisan.spring.utils.DataFormatMapping"/>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="converterService"/>
-------------------------------------------------------------------------------------------
//Mapping method
public class DataFormatMapping implements Converter <String,Date>{
@Override
public Date convert(String source) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(source);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
代码上半部分写在我们的springmvc.xml文件中用来注册和使用我们的Mapping关系,下半部分写在我们自己定义的类里,注意这个类要实现Converter接口并把映射关系写进去。
好了,这应该就可以了
另外其实在SpringMVC里还有很多可以获取并使用的对象,在这里就不细讲了,等待大家去发现和使用,笔者也要多了解一下。
嗯,今天就这样吧,晚安。