什么是springmvc?
Springmvc是一个基于mvc的web框架,它是spring框架的一个模块,两者无需通过中间整合进行整合。
Springmvc框架的执行步骤
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器查找Handler
第三步:处理器映射器向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和View
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
Springmvc框架常用注解
@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个springmvc Controller对象。分发处理器将会扫描使用了该注解的方法,并检测该方法是否使用了@RequestMapping注解。
@RequestMapping
该注解是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是spring支持该注解的注入。
共同点:
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
不同点:
@Autowired是spring提供的注解。@Autowired注解是按照类型(byType)装配依赖对象,默认情况下他要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。
@Resource默认按照byName自动注入,@Resource有两个重要的属性:name和type,而spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用bytype自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
@ModelAttribute和@SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用
@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数,。
@RequestParam
主要用于在springmvc后台控制层获取参数,类似一种是request.getParameter(“name”),他有三个常用参数:defaultValue=”0”,required=false,value=“isApp”;defaultValue表示设置默认值
@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@Component
相当于通用的注解,当不知道一些类归到那个层时使用,但是不建议。
@Repository
用于注解dao层,在daoImpl类上面注解
Springmvc怎么样设定重定向和转发的?
转发:在返回值前面加“forward:”就可以让结果转发,譬如”forward:user.do?name=method”
重定向:在返回值前面加“redirect:”就可以让返回值重定向,譬如“redirect:http://www.baidu.com”
Springmvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
一般用@Controller注解,表示是控制层,不能用别的注解替代。
Springmvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候又线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。
@RequestMapping注解用在类上面有什么作用?
是一个用来处理请求地址映射的注解,可以用于类或方法上。用于类上,表示类中所有响应请求的方法都是以该地址作为父路径。
如果前台有很多参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
直接在方法中声明这个对象,springmvc就自动会把属性赋值到这个对象里面。
Springmvc中有个类把视图和数据都合并的一起的,叫什么?叫做ModelAndView。
当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?
要加上@ResponseBody注解。
Sprigmvc的异常处理
可以将异常抛给Spring框架,有Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器添视图页面即可。
SpringMVC的好处
Springmvc的优点
(1)Spring MVC中提供一个DispatcherServlet, 无需额外开发。
(2)springMVC中使用基于xml的配置文件,可以编辑,无需重新编译应用程序。
(3)springMVC实例化控制器,并根据用户输入来构造bean.
(4)springMVC可以自动绑定用户输入,并正确的转换数据类型。例如,springMVC能自动解析字 符串,并设置float或decimal类型的属性。
(5)springMVC可以检验用户输入,若校验不通过,则重定向回输入表单。输入校验是可选的, 支持编码方式以及声明。关于这一点,springMVC内置了常见的校验器。
(6)springMVC是spring框架的一部分。可以利用spring提供的其它能力。
(7)springMVC支持国际化和本地化,支持根据用户区域显示多国语言。
(8)springMVC支持多种视图技术,最常见的JSP技术以及其它技术包括Velocity和FreeMarker
详解:
清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。
强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。
可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。
可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保证错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各种视图技术集成。
可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。
JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。
Spring Bean的生命周期可以被限制在当前的HTTp Request或者HTTp Session。准确的说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationContext容器。
SSM的具体分析
SSM三个框架的优点。
一、mybatis的优缺点:
优点:a、sql写在xml文件中,便于统一管理和优化,解除sql和程序代码的耦合。
b、提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建
c、提供xml标签,支持编写动态sql。
缺点:a、工作量较大,特别是在表的字段多,关联表多的情况下
b、sql语句的编写依赖于数据库,移植性差。
c、不支持级联删除,级联更新,需要自己对表进行删除。
二、spring的优点:
A、通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了开发。
B、通过Spring的AOP特性,很容易实现事务,日志,权限的控制。
C、提供了对其他优秀开源框架的集成支持。
D、低侵入式。
三、SpringMVC的优点
A、springMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,是的我们开发更简洁。
B、与Spring无缝衔接。
C、灵活的数据验证,格式化,数据绑定机制。
四、整合分析
A、spring MVC + spring +mybatis,是标准的MVC设计模式,将整个系统划分为显示层,Controller层,Service层,DAO层四层
使用Spring MVC负责请求的转发和视图管理
spring实现业务对象管理,mybatis作为数据对象的持久化引擎。
B、Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,还能更好的让其他框架整合。
C、Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。
D、MyBatis 是一个基于Java的持久层框架