1-3.MVC框架设计实现及SpringMVC源码分析、通用数据操作接口设计.md
阶段一模块三学习笔记
一、Spring概念相关
基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,是spring的后续产品,本质是对serlvet的封装。作⽤:1)接收请求 2)返回响应,跳转⻚⾯
二、开发过程
1)配置DispatcherServlet前端控制器
2)开发处理具体业务逻辑的Handler(@Controller、@RequestMapping)
3)xml配置⽂件配置controller扫描,配置springmvc三⼤件
4)将xml⽂件路径告诉springmvc(DispatcherServlet)
三、Spring mvc请求处理流程
四、自定义类型转换器
- 新建一个类型转换器实现Convert接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
// 完成字符串向日期的转换
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = simpleDateFormat.parse(source);
return parse;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
} - springmvc.xml中注册
1
2
3
4
5
6
7
8
9
10
11
12
13<!--
自动注册最合适的处理器映射器,处理器适配器(调用handler方法)
-->
<mvc:annotation-driven conversion-service="conversionServiceBean"/>
<!--注册自定义类型转换器-->
<bean id="conversionServiceBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.lagou.edu.converter.DateConverter"></bean>
</set>
</property>
</bean>
五、restful风格
1.概念:
Restful 是⼀种 web 软件架构⻛格,它不是标准也不是协议,它倡导的是⼀个资源定位及资源操作的⻛格;将原本的参数放到uri本身。通过请求类型获取资源。
2.Restful 的优点
它结构清晰、符合标准、易于理解、扩展⽅便,所以正得到越来越多⽹站的采⽤。
3.与原有接口请求的区别
4. 接口请求类型区分增删改查
POST:增;DELETE:删; PUT:改;GET :查
5.spring mvc中的restful风格使用
- @PathVariable取出uri中的参数
- @RequestBody取出json类型参数
- @ResponseBody返回json类型结果
六、spring mvc拦截器
- 区分拦截器、监听器、过滤器
Servlet:处理Request请求和Response响应
- 过滤器(Filter):对Request请求起到过滤的作⽤,作⽤在Servlet之前,如果配置为可以对所有的资源访问(servlet、js/css静态资源等)进⾏过滤处理
- 监听器(Listener):实现了javax.servlet.ServletContextListener 接⼝的服务器端组件,它随Web应⽤的启动⽽启动,只初始化⼀次,然后会⼀直运⾏监视,随Web应⽤的停⽌⽽销毁
- 作⽤⼀:做⼀些初始化⼯作,web应⽤中spring容器启动ContextLoaderListener
- 作⽤⼆:监听web中的特定事件,⽐如HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控,⽐如统计在线⼈数,利⽤HttpSessionLisener等。
- 拦截器(Interceptor):是SpringMVC、Struts等表现层框架⾃⼰的,不会拦截jsp/html/css/image的访问等,只会拦截访问的控制器⽅法(Handler)。
- 在Handler业务逻辑执⾏之前拦截⼀次
- 在Handler逻辑执⾏完毕但未跳转⻚⾯之前拦截⼀次
- 在跳转⻚⾯之后拦截⼀次
- 从配置的⻆度也能够总结发现:serlvet、filter、listener是配置在web.xml中的,⽽interceptor是配置在表现层框架⾃⼰的配置⽂件中的
- 配置spring mvc拦截器
- 实现HandlerInterceptor接口
- 在springmvc.xml中配置拦截路径
七、上传文件
- spring mvc中配置多元素解析器
- controller
八、异常处理
全局异常捕捉使用@ControllerAdvice,方法上使用@ExceptionHandler
九、转发和重定向
转发:A 找 B 借钱400,B没有钱但是悄悄的找到C借了400块钱给A;url不会变,参数也不会丢失,⼀个请求
重定向:A 找 B 借钱400,B 说我没有钱,你找别⼈借去,那么A ⼜带着400块的借钱需求找到C url会变,参数会丢失需要重新携带参数,两个请求
源码:
git clone -b master1 https://gitee.com/idse666666/my_spring-mvc.git
十、手写mvc框架
1. spring mvc执行的大致流程
2. 相关解析过程的Java方法记录
2.1 Java中的Properties类
- 主要用于读取Java的配置文件
- load ( InputStream inStream),从输入流中读取属性列表(键和元素对)。通过对指定的文件进行装载来获取该文件中的所有键 - 值对。以供 getProperty ( String key) 来搜索。
- getProperty ( String key),用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到 key 所对应的 value。
2.2 获取配置传入路径,返回流。
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(contextConfigLocation);
- this.getClass()调用对象的getClass()方法是获得对象当前的类类型
- 在类类型上调用getClassLoader()方法是得到当前类型的类加载器
- 类加载器的getResourceAsStream()方法来加载资源
2.3 获取当前线程项目所在的绝对路径
Thread.currentThread().getContextClassLoader().getResource("").getPath();
2.4 反射方式注入某个字段的值
1 |
|
3. 手写mvc初始化过程
3.1 加载配置文件 springmvc.properties
3.2 扫描相关的类,扫描注解
3.3 初始化bean对象(实现ioc容器,基于注解)
3.4 实现依赖注入
3.5 构造一个HandlerMapping处理器映射器,将配置好的url和Method建立映射关系
- 源码:
git clone -b master2 https://gitee.com/idse666666/my_spring-mvc.git
十一、SSM整合
1. spring 整合 mybatis
1.1整合⽬标
数据库连接池以及事务管理都交给Spring容器来完成
SqlSessionFactory对象应该放到Spring容器中作为单例对象管理
Mapper动态代理对象交给Spring管理,我们从Spring容器中直接获得Mapper的代理对象
1.2在测试类中进行service层测试
1 |
|
1.3 applicatisonContext.xml
1 |
|
- 源码:
git clone -b master3 https://gitee.com/idse666666/my_spring-mvc.git
2. spring 整合 mybatis后整合mvc
2.1 springmvc.xml
1 |
|
2.2 web.xml
1 |
|
- 源码:
git clone -b master4 https://gitee.com/idse666666/my_spring-mvc.git
1-3.MVC框架设计实现及SpringMVC源码分析、通用数据操作接口设计.md
http://example.com/59220.html