一、SpringMvc的概述
- Web层
a. 接受浏览器的请求参数servelet
b. 封装参数到对象JavaBean
c. 响应数据到页面jsp
d. 涉及mvc思想(将控制,逻辑,展示相分离的思想)
e. web层框架又称为mvc框架 - Service:各种业务需求,事务
-
- spring(类,开启事务,提交事务,释放资源)
- Dao层:
-
- JdbcTemplate
-
- Mybatis
-
- JPA:
-
-
- 规范(一套接口)
-
-
-
- 所有的orm框架都实现了这个接口
-
- MVC
a. MVC是一种设计思想
b. 作用: 将逻辑,业务,视图相分离的一种思想,各自专注于做自己的事情。
c. M:model(模型) JavaBean
d. V(view):jsp
e. C(controller):控制器 servlet(SpringMvc) - spring提供一个子框架, 为web层提供一个框架
a. 前端控制器: dispatcherServlet
b. springmvc提供好了
c .webxml做配置
二、入门案例
- springmvc的访问方式
-
- 导入spring的坐标
-
- 在web.xml中配置前端控制器,还得让前端控制器加载- - spring配置文件
-
- 编写spring配置文件,做浏览器的访问路径和类方法的映射
-
- 编写类和方法
-
- 浏览器编写路径访问
- 环境的依赖坐标:
-
- ioc坐标
-
- Mvc相关的坐标(Spring-web,Spring-webmvc)
2.2 搭建环境
- 创建maven-web工程,引入坐标
- 创建类和方法
- 配置前端控制器
- 配置springmvc的配置文件
2.3 SpringMVC的执行过程
2.4 SpringMVC中涉及的组件
- DispatcherServlet :前端控制器
-
- 用户请求到达前端控制器,它就相当于MVC模式中的C,dispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求,dispatcherServlet 的存在降低了组件之间 的 耦合性 。
-
web.xml中
<!--配置dispatcherServlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化就加载spirng配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--<load-on-startup>:将servlet由第一次访问才创建变成服务器启动就创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--
/*: 拦截所有 包含html和jsp
/: 拦截所有 不包含html和jsp
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
- < mvc:annotation-driven> 适配器
-
- 集成处理映射器,处理器适配器。
spring-mvc中
<!--映射器和适配器-->
<mvc:annotation-driven></mvc:annotation-driven>
- 视图解析器
-
- 页面地址的拼接
-
-
- prefix
-
-
-
- suffix
-
spring-mvc中
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
- @RequestMapping注解
-
配置请求路径
-
- 可以配置到类上(用于区分模块)也可以配置到方法上
-
- Value(path):配置请求路径
-
-Method:接受请求方式(post,get)默认接受所有请求
-
- Params:请求的参数,要求页面必须携带的参数。
-
@Controller:
-
UserController类中
@Controller
public class UserController {
@RequestMapping(value = "/params1")
// 页面请求参数数据封装:参数式封装
// 页面简单数据的封装: 参数名必须和页面的name属性名一致
public String params1(String username,Double age){
System.out.println(username);
System.out.println(age);
return "success"; //视图解析器 前缀+页面名+后缀
}
}
三、参数封装
参数封装:将页面请求的参数封装到对象中。
3.1 简单数据的封装
请求的参数名 = 方法名
- 页数请求参数数据封装:参数式封装
-
- 要求:参数名必须和页面的name属性名一致
-
UserController类
@RequestMapping(value = "/params1")
// 页面请求参数数据封装:参数式封装
// 页面简单数据的封装: 参数名必须和页面的name属性名一致
public String params1(String username,Double age,Date date){
System.out.println(username);
System.out.println(age);
System.out.println(date);
return "success"; //视图解析器 前缀+页面名+后缀
}
3.2 页面对象数据的封装
-
**要求:**保证页面的name属性名和对象的属性名一致即可。
-
- 页面对象list
-
UserController类
@RequestMapping(value = "/params2")
public String params2(User user){
System.out.println(user);
return "success";
}
3.3 封装复杂类型的数据(集合list和map)
- List和map是对象中的属性
- 请求参数名 = 集合属性名[索引 | key].属性。
- list集合封装:
- 保证页面的name属性名是对象的集合属性名[角标].属性名 例如:accounts[0].name
// 页面对象list集合数据的封装:
@RequestMapping(value = "/params3")
public String params3(User user){
System.out.println(user);
return "success";
}
- map集合封装
- 保证页面的name属性名是对象的map集合属性名[key].属性名 例如:maps[aaa].name
// 页面对象map集合数据的封装:
@RequestMapping(value = "/params4")
public String params4(User user){
System.out.println(user);
return "success";
}
3.4 处理中文乱码的过滤器
- 细节处理:提供中文乱码的过滤器
<!--springmvc提供的中文乱码的过滤器(CharaterEncodingFilter)-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--告诉filter要使用哪个编码-->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.5 自定义类型转化器
- 注册类型转化器
<!--告诉springmvc使用自己的String=Date类型转换器 不在用默认的String=Date类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters"> <!--这个集合中需要装类型转换器对象-->
<array> <!--把自己的类型转换器给放入数据 -->
<bean class="cn.utils.StringToDateConverter"></bean>
</array>
</property>
</bean>
- 配置使用类型转化器
<!--配置使用类型转化器-->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
四、注解
- @RequestHeader:获取请求头的信息
- @CookieValue:获取cookie的信息
- 属性:
-
- Value:根据请求信息key获取值
-
- Required:是否必须要传递该头信息
-
-
- false:不是必须的
-
-
-
- true:必须要传递的。
-
@RequestMapping(value = "/params6")
public String params6(@RequestHeader(value = "Host") String header1, @RequestHeader(value = "Connection")String header2,
@CookieValue(value = "JSESSIONID")String jsid){
System.out.println(header1);
System.out.println(header2);
System.out.println(jsid);
return "success";
五、总结
- springmvc的环境搭建
-----1 依靠前端控制器(web.xml)
----配置servlet(dispatcherServlet)
----服务器启动就加载(load-on-startup)
----已创建就加载配置文件(init-param)
----设置路径 / (除了jsp和html以外的所有资源) - 创建spirng-mvc.xml配置文件
----- ioc扫描器
-----映射器和适配器 (mvc:anntation-driver)
-----视图解析器 (前缀和后缀)
-----自定义的类型转换器的配置 - 创建类和方法
-----封装简单数据
-----封装对象数据
-----封装对象的list/map数据
----获取servlet的api(request response session)
- 封装过程中产生的细节:
-
- 使用了springmvc提供的解决中文乱码的filter(charaterEncodingFilter)
-
- 自定义了String转日期类型的类型转换器(配置)
-
- 使用了springmvc提供的2个注解
-
-
- @RequestHeader:获取请求的头信息
-
-
-
- @cookieValue:获取cookie的jsid
-