springmvc学习


springMvc入门程序:springmvc_itheima、ssm_itheima、ssm2_itheima

springmvc三大组件:

  • 处理器映射器HandlerMapping
  • 处理器适配器HandlerAdapter
  • 视图解析器ViewResolver

springMvc的前端控制器是DispatcherServlet,不依赖tomcat容器,用户请求到该servlet就可以初始化该容器。

dispatcherServlet.properties这个配置文件中,定义了核心组件的常量,如果不显示配置HandlerMapping和HandlerAdapter,每个请求都会默认去该配置文件里扫描,寻找合适的HandlerMapping和HandlerAdapter,推荐明确配置HandlerMapping处理器映射器和HandlerAdapter处理器适配器,使用< mvc:annotation-driven/> 自动配置最新的处理器映射器和处理器适配器

springMvc的核心组件:
handlerMapping:
处理器映射器 有多个:

  • java bean 命名的,BeanNameUrlHandlerMapping,
  • 注解形式的,DefaultAnnotationHandlerMapping

HandlerAdapter:
处理器适配器,也有多个:

  • 比如:注解形式的,AnnotationMethodHandlerAdapter
  • 简单形式的,SimpleControllerHandlerAdapter
  • http请求的HttpRequestHandlerAdapter

ViewResolver:
视图解析器,也有很多个:

  • 比如:处理jsp等资源视图解析:InternalResourceViewResolver
  • 处理json响应的逻辑视图:BeanNameViewResolver
  • 处理freemarker的逻辑视图:FreeMarkerViewResolver

可以使用:ContentNegotiatingViewResolver这个视图解析器组合其他的视图解析器,来一起使用。

核心作用

springMvc:是一个表现层框架,核心是前端控制器(DispatchServlet)
核心作用:
1、从请求中接收传入的参数(通过自身的Interceptor对请求数据进行处理)
2、将处理后的结果数据返回给页面展示

简单工作流程:

通过DispatcherServlet对请求进行拦截,当拦截到符合要求的请求
1、DispatcherServlet通过调用HandlerMapping处理器映射器查询Handler处理器(Controller)并返回给DispatcherServlet。
2、DispatcherServlet通过调用HandlerAdapter处理器适配执行处理器(Controller)的Handler(Controller的方法)处理请求并响应给DispatcherServlet。
3、DispatcherServlet通过viewResolver视图解析器处理Handler响应回来的ModelAndView视图对象。
4、DispatcherServlet找页面模板渲染结果(web Server解析)成html响应用户。

ssm整合:

1)Dao层
	pojo和映射文件以及接口使用mybatis逆向工程生成
	SqlMapConfig.xml   mybatis核心配置文件,如通过Spring整合mybatis,SqlMapConfig.xml一般不需要配置。
	ApplicationContext-dao.xml 整合后spring在dao层的配置
		数据源 datasource
		会话工厂 sqlSessionFactoryBean
		扫描Mapper MapperScannerConfigurer 默认扫描Mapper接口和同文件名的xml实现。
2)service层
	事务			ApplicationContext-trans.xml
	@Service注解扫描	ApplicationContext-service.xml
3)controller层
	SpringMvc.xml 
		注解扫描:扫描@Controller注解等component组件注解
		注解驱动:替我们显示的配置了最新版的处理器映射器和处理器适配器
		视图解析器:显示的配置是为了在controller中不用每个方法都写页面的全路径
4)web.xml
	集成SpringMvc,配置springMvc前端控制器(springmvc子容器)
	集成Spring容器,配置spring容器(父容器)

自定义转换器

1、通过配置FormattingConversionServiceFactoryBean,他里面有个属性converters是一个set,可以把我们自定义的转换器都放入该set中,然后通过conversion-service把转换器服务挂在< mvc:annotation-driven上 < mvc:annotation-driven conversion-service=“conversionService” />
2、修改springmvc RequestMappingHandlerAdapter对象的默认行为,将其相关属性配置成自定义的。比如:直接自定义webBindingInitializer、ConversionService。

参数绑定(从请求中接收参数)重点

1)默认类型:
	在controller方法中可以有也可以没有,看自己需求随意添加.
	httpservletRqeust,httpServletResponse,httpSession,Model(ModelMap其实就是Mode的一个子类)
2)基本类型:string,double,float,integer,long.boolean
3)pojo类型:页面上input框的name属性值必须要等于pojo的属性名称
4)vo类型:页面上input框的name属性值必须要等于vo中的属性.属性.属性....
5)自定义转换器converter:
	作用:由于springMvc无法将string自动转换成date所以需要自己手动编写类型转换器
	需要编写一个类实现Converter接口
	在springMvc.xml中配置自定义转换器
	在springMvc.xml中将自定义转换器配置到注解驱动上

springmvc与struts2区别:

1、springmvc的入口是一个servlet即前端控制器(DispatcherServlet),
而struts2入口是一个filter过虑器(StrutsPrepareAndExecutFilter)。
2、springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
3、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,
springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
4、struts2的前端控制器是依赖于web容器的,而SpringMvc是不需要依赖容器的,用户第一次请求该servlet时可以实例化其前端控制器。

☆1.参数绑定:(从请求中接收参数)

1)默认支持的类型:HttpServletRequest,HttpServletResponse,HttpSession,Model,ModelMap
2)基本数据类型以及引用类型的String
3)Pojo类型
4)Vo类型(Vo里有个各种Pojo的引用)
5)Converter自定义转换器
6)数组(多个input的name相同时,会以数组的形式传递到后台)
7)List(前台页面展示list,如果需要在页面批量操作,可以把input的name以list[下标].属性的方式,把整个list传递到后台)

☆2.controller方法返回值(指定返回到哪个页面, 指定返回到页面的数据)

1)ModelAndView 
	modelAndView.addObject("itemList", list); 指定返回页面的数据
	modelAndView.setViewName("itemList");	  指定返回的页面
2)String(推荐使用)
	返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
	返回的字符串以"forward:"开头为请求转发,转发到另一个handle方法
	返回的字符串以"redirect:"开头为重定向,重定向到另一个handler方法
3)返回void(使用它破坏了springMvc的结构,所以不建议使用)如果非要用时,方法里自行通过response来响应客户端。
	可以使用request.setAttribute 来给页面返回数据
	可以使用request.getRquestDispatcher().forward()来指定返回的页面
	如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称

相对路径:相对于当前目录,也就是在当前类的目录下,这时候可以使用相对路径跳转
绝对路径:从项目名后开始.
在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径
例如:forward:/items/itemEdit.action 为绝对路径,建议使用绝对路径,因为是在服务器端,前面的http://localhost:8080这些信息不用写,服务器端自己知道。
	forward:itemEdit.action为相对路径

3.架构级别异常处理:

主要为了防止项目上线后给用户抛500等异常信息,所以需要在架构级别上整体处理.hold住异常
首先自定义全局异常处理器implements实现HandlerExceptionResolver接口(处理异常的解析器)
在spirngMvc.xml中配置生效,即自定义的异常处理器需要放入IoC容器中。

4.上传图片:

1)在tomcat中配置虚拟图片服务器
直接在tomcat里配置(一个虚拟主机对应多个应用context):
在<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">标签里配置:
<Context docBase="ssm2_itheima" path="/ssm2_itheima" reloadable="true" source="org.eclipse.jst.jee.server:ssm2_itheima"/>
<Context docBase="D:\img" path="/pic" reloadable="true"/>
2)导入fileupload的jar包
3)在springMvc.xml中配置上传组件CommonsMultipartResolver
4)在页面上编写上传域,更改form标签的类型enctype="multipart/form-data"
5)在controller方法中可以使用MultiPartFile接口接收上传的图片,通过MultiPartFile对象的transferTo方法把接收到的图片文件传送到磁盘上。
6)将文件名保存到数据库DB,将图片保存到磁盘中

5.Json数据交互:

需要加入jackson的jar包
@RequestBody:将页面传到controller中的json格式字符串自动转换成java的pojo对象,json的key=pojo的属性名
@ResponseBody:将java中pojo对象自动转换成json格式字符串返回给页面

6.RestFul支持:

就是对url的命名标准,要求url中只有能名词,没有动词(不严格要求),但是要求url中不能用问号?传参
传参数:
	页面:${pageContext.request.contextPath }/items/itemEdit/${item.id}
	方法: @RquestMapping("/itemEdit/{id}")
	方法: @PathVariable("id") Integer idd

7.拦截器Interceptor:

作用:拦截请求,一般做登录权限验证时用的比较多
1)需要编写自定义拦截器类,实现HandlerInterceptor接口
2)在spirngMvc.xml中配置拦截器生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值