java SpringMVC SSM整合
SpringMVC
SpringMVC是一种基于java实现MVC设计模型的请求驱动类型的轻量级Web框架
他是通过一套注解,让一个简单的pojo类称为处理请求的控制器,基于pojo类中的方法,一个方法就是我们之前的一个Servlet,无需实现任何接口,同时他还支持RESTFUL风格编程格式的请求
本质就是一个Servlet
MVC:Model View Controller
Model:主要是用于数据的封装--->pojo--->javaBean
View:解析jsp生成html页面--->jsp
Controller:控制器 用于服务器和客户端交互 一个Servlet
请求驱动类型
请求-响应类型
SpringMVC在三层架构中的地位和位置
SpringMVC处理流程
SpringMVC的优势
? 清晰的角色划分
? 分工明确
? SpringMVC可以和Spring框架实现无缝衔接
? 支持RESTful风格
? 简单文件上传
? 约定大于配置的契约式编程支持
? 开箱即用
? 基于注解的零配置支持
? 功能强大的数据验证,格式,绑定机制
SpringMVC的Hello World快速入门
开发步骤
? 导包:Spring的核心容器包(四个)+日志包(两个commons-logging/log4j)+aop(面向切面)+web(web包)+webmvc()+jstl(自定义标签库)+servlet()+jsp
? 粘贴web下面的资源(取出web.xml)
? 创建数据库文件.导入crm_只有.sql
? 创建一个包叫controller,这个就是我们的web包
? 在controller包下面创建一个类叫做Controller,并在类上面添加注解@Controller
? 书写展示所有信息的方法,并在方法上添加注解@RequestMapping
? 新建springmvc.xml文件,扫描controller包
<!--扫描controller包-->
<context:component-scan base-package="com.zhiyou100.web.controller"/>
SpringMVC框架加载执行原理分析
首先SpringMVC本质上是一个Servlet 借助于前端控制器DispatcherServlet
在webxml文件中配置前端控制器DispatcherServlet,它是一个Servlet,所以我们可以按照Servlet的配置方式配
<!--配置前端控制器 DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<!--SpringMVC-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--首先加载DispatcherServlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
使用扩展名配置
在<url-pattern>中配置通用映射*action
当客户端请求发送过来时,首先经过前端控制器,前端控制器根据请求的资源映射调用处理器映射器组件
HandleMapping,匹配url,当匹配到url之后,把结果返回给前端控制器,前端控制器收到结果后调用处理器适配器
来匹配具体哪个方法,当方法被匹配到之后,如果方法上有参数,调用HttpMessageConverter,进行数据格式校验,
数据封装,数据校验之后,开始把数据绑定到参数上,调用处理器来执行具体的方法业务内容
处理器处理完,把结果返回给处理器适配器,处理器适配器在把结果(ModelAndView)返回给前端控制器,根据结果
前端控制器来调用视图解析器,同时把view视图(String字符串表示的)传输给视图解析器ViewResovler
视图解析器根据视图匹配服务器中到底哪一个视图(jsp视图)
找到之后,把视图返回给前端控制器
前端控制器根据视图调用视图组件View,同时把试图信息传输给view组件
View组件开始解析,把逻辑视图转换成物理视图,生成html页面.返回给前端控制器
前端控制器,把html静态页面和model数据一块通过响应的方式发送给客户端
SpringMVC组件介绍及配置(一个中心和三个基本点)
? 前端控制器 DispatcherServlet 中心
他是整个流程控制的中心,由他来调用其他组件处理用户的请求
设计他的初衷是为了降低组件之间的耦合性
? HeadleMappeing 处理器映射器
负责根据用户的url请求 找到headle即处理器
SpringMVC提供了不同的映射器实现机制:配置文件方式,实现接口方式,注解方式等
@RequestMapping(),采用注解方式是目前企业中最为流行的方式.
? Headle处理器
Headle是继前端控制器之后的后端控制器,在前端控制器的调配下headle对具体用户请求进行处理.
因为Handle一般处理的都是业务上的请求,所以他一般都是开发人员完成的
? HeadleAdapter:处理器适配器
通过HeadleAdapter对处理器进行解析执行.主要是适配器模式的匹配
? ViewResovler视图解析器
ViewResovler负责将处理的结果生成View视图
? View视图
SpringMVC提供了很多个View视图,如jstlView,freemarkerView,pdfView等
我们最常用的是jsp视图.
? 说明
在SpringMVC各个组件中,处理器适配器,处理器映射器.视图解析器称之为SpringMVC的三大组件,可以认为是一个中心,
三个基本点.需要用户开发的组件有,Headle,view
? 配置相关的组件
○ 配置处理器配置器,处理器映射器
通过查找DispatcherServlet.properties文件发现,建议你配置如下两个类
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
此时这两个组件就交给Spring容器管理.
注解驱动
在SpringMVC中,提供了使用注解驱动来加载处理器适配器,处理器映射器组件
<!--配置注解驱动 涵盖了处理器映射器和处理器适配器-->
<mvc:annotation-driven/>
视图解析器
public static final String REDIRECT_URL_PREFIX = "redirect:";
public static final String FORWARD_URL_PREFIX = "forward:";
@Nullable
private Class<?> viewClass;
private String prefix = "";
private String suffix = "";
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
InternalResourceViewResolver
静态资源放行
如果前端控制器在url-pattern中采用缺省配置,意思是想要拦截当前应用中的静态资源.
静态资源需要开发者自己来调配
如果应用中还要使用静态资源,此时就涉及到,静态资源放行问题.
注意:此处有缓存,需要先清除cookie值.
方式一
前端控制器本质上就是一个Servlet,在Tomcat服务器内部对缺省配置有单独的处理,他采用的是静态资源放行.
如果想要使用tomcat默认对缺省配置的处理,需要开启tomcat的缺省配置.
<!--静态资源放行-->
<!--方式一 采用tomcat默认的处理方式 开启tomcat缺省配置处理方式-->
<mvc:default-servlet-handler/>
方式二
手动建立映射关系
使用标签<mvc:resources location = "/img/" mapping = "/images/**"/>
mapping:服务器的映射路径 url上面的路径
location:映射应用当中具体的静态资源 静态资源的加载路径
<!--方式二 采用手动映射-->
<mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/lib/**" location="/lib/"/>
**代表子文件也可以
SSM整合
? 导包
1.Spring-context包 含有 核心容器中的四个jar包和aop包
…
大致32个jar包
详见day70_SSM01工程
? 在resources资源文件夹下面新建两个目录.一个是spring(Spring的核心配置) 一个是mybatis(mybatis的核心配置)
? 把db.properties文件和log4j.properties文件粘贴到resources目录下
? 在spring目录下创建springmvc.xml文件
○ 设置处理器映射器和处理器适配器的注解驱动
○ 开启扫描controller组件
○ 配置视图解析器 添加前后缀
? 在spring目录下创建applicationContext-dao.xml
○ 引入数据源db.properties
○ 配置连接池依赖于db.properties文件 生成dataSource对象
○ 配置SqlSessionFactory对象
○ 配置mapper扫描
? 在spring目录下创建applicationContext-service.xml文件
○ 配置扫描service组件
<!--配置扫描service组件-->
<coontext:component-scan base-package="com.zhiyou100.service"/>
? 在spring目录下创建applicationContext-tx.xml文件
○ 配置事务。
? 在mybatis目录下创建mybatis-config.xml文件
? 配置web.xml文件
○ 配置上下文监听器 ContextLoaderListener 读取spring的配置文件
○ 配置前端控制器 DispatcherServlet 读取 springmvc.xml配置文件
? 创建mapper, util, pojo包对应的类
参数绑定
默认支持参数类型
HttpSession对象.HttpServletRequest对象.HttpServletResponse对象(doGat,doPost)
还可以使用Model对象(数据封装模型),大多是用于回传数据的(类似于Request域)
ModelMap对象 大多是用于回传数据的(类似于Request域)
简单类型参数
基本类型:四类八种
一般情况下在使用基本类型的时候,使用包装类.,因为基本类型不能接收null值
备注:
对于boolean类型的参数,请求的参数值为1时后台接收值为true 反之 请求的参数值为0时后台接收值为false
String
@RequestParam注解使用介绍
当表单中的name属性和请求的参数名称不匹配时,可以使用@RequestParam注解 该注解可以手动和name属性建立映射关系
? name属性:指定参数名称,确保name属性名称一致
? required属性:表示传过来的name属性是否为必须的,默认值为true
? defaultValue属性:如果name属性没有传值,可以使用defaultValue指定请求参数的默认值
参数绑定Pojo类
中文乱码
参数绑定包装类
数组参数绑定
集合类型参数绑定
自定义格式类型转换器