SpringMVC相关知识点备忘录
主要组件:
1、前端控制器DispatcherServlet
2、处理器映射器HandlerMapping
3、处理器适配器HandlerAdapter
4、处理器Handler
5、视图解析器ViewResolver
6、视图View
请求处理过程:
用户发送请求>>>前端控制器将请求委托给页面控制器>>>页面控制器委托给业务对象进行处理>>>处理完毕后返回一个ModelAndView>>>前端控制器根据返回的逻辑视图名选择相应的视图进行渲染>>>最后前端控制器将响应返回给用户
与structs2的区别:
1、SpringMVC的入口是一个Servlet,即前端控制器,而structs2是一个filter过滤器。
2、SpringMVC是基于方法开发,请求参数传递到方法的形参可设计为单例或多例;而structs2是基于类开发,传递参数是通过类的属性,只能设计为多例。
SpringMVC如何设定重定向和转发:
**转发:在返回值前加forward
**重定向:在返回值前加redirect
异常处理:
可以将异常抛给Spring框架,由Spring框架来处理,只需要配置简单的异常处理器,在异常处理器中添加视图页面即可。
常见注解:
@RequestMapping:处理请求url映射
@RequestBody:接受请求的json数据,将json数据转换为Java对象
@ResponseBody:将controller方法返回对象转化为json对象响应给客户
SpringMVC控制器注解一般选用@Controller,也可以使用@RestController,@RestController相当于@ResponseBody+@Controller
如果在拦截请求中,想拦截get方式提交的方法,需要在@RequestMapping注解里面加上mothod=RequestMethod.GET
在方法的形参中声明request,SpringMVC会自动把request对象传入,就可以在方法里面得到Request或者Session
如何在拦截的方法里面得到从前台传入的参数:
直接在形参里面声明这个参数,但名字必须和传过来的一致
SpringMVC中函数的返回值是String和ModelAndView,ModelAndView把视图和数据都合并在一起的,所以一般用String比较好
SpringMVC使用ModelMap对象从后台向前台传递数据,可以在这个对象里调用put方法,把对象加到里面,前台可以通过el表达式拿到
如何将ModelMap里面的数据加入到Session里面
可以在类上面加SessionAttributes注解,里面包含的字符串就是要放入Session里面的key
SpringMVC拦截器如何写:
1、实现HandlerInterceptor接口
2、继承适配器类
SpringMVC系统分层:
表现层:数据展现,操作页面,请求转发
业务层:封装业务处理逻辑
持久层:封装数据访问逻辑
表现层通过接口调用业务层;业务层通过接口调用持久层
SpringMVC对文件上传的注意事项:
1、在页面form中提交enctype=”multipart/form-data”的数据时,需要SpringMVC对multipart类型数据进行解析
2、在SpringMVC.xml中配置multipart类型解析器
3、方法中使用MultipartFile attach单个文件上传
方法中使用MultipartFile [] attachs多个文件上传
在配置文件中开启
1 | <mvc:annotation-driven> |
来实现注解处理器和适配器的开启
@Autowired和@Resource的区别:
同>>> 二者都可以写在setter方法上;两者如果都写在字段上,就不需要再写setter方法
异>>> @Autowired 只按照byType注入,默认情况下要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false,如果想使用按照名称来装配,可以结合Qualifier一起使用
@Resource 默认按照byName自动注入;
@Resource有两个属性:name和type;
Spring将@Resource的name属性解析为bean名字;type则解析为bean类型,所以使用name属性要使用byName;使用type属性则使用byType,都不指定时,通过反射机制使用byName自动注入策略。
依赖注入的三种方式:
1、接口注入
2、Construct注入
3、Setter注入
引入IOC的目的:
1、脱开、降低类之间的耦合
2、实施依赖倒换原则
3、提高系统可插入、可测试、可修改特性
AOP应用场景:
权限、缓存、内容传递、错误处理、性能优化、持久化、同步、事务等
Spring框架为企业级开发带来的好处:
非侵入性:
不强制性的要求实现Spring框架中的接口或继承Spring框架中的类
IOC容器:
帮助应用程序管理对象以及对象之间的依赖关系,对象之间的依赖关系如果发生了改变,只需要修改配置文件而不是修改代码
AOP:
将所有的横切关注功能封装到切面中,通过配置的方式将横切关注功能动态添加到目标代码上,进一步实现了业务逻辑和系统服务之间的分离
事务管理:
为多种持久层技术提供了声明式事务管理,方便的完成了事务管理
持久层设计的目标:
1、数据存储逻辑的分离,提供抽象化的数据访问接口
2、数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现
3、资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)
4、数据抽象,提供更面向对象的数据操作
实体对象的三种状态:
瞬时态:new一个实体对象后,该对象就处于此态;
持久态:Session中的save()、merge()等方法把此态对象与数据库关联,并把数据插入或更新到数据库时,对象就转化为持久态
持久态对象实例在数据库中有对应的记录
游离态:使用Session中的close()、clear()等方法后可以将对象转化为游离态
游离态随拥有和持久态数据库对应记录一致的标识值,但因此对象已经从会话中消除掉,对象不在持久化管理之内,所以处于游离态
锁机制:
有些业务逻辑在执行过程中要求对数据进行排他性访问,需要通过一些机制保证此过程中数据被锁住不会被外界修改
本文档记录的不够详细,只留做自己备忘查看,不定期更新…