一、拦截器
Spring MVC的拦截器(Interceptor) 类似于Java Servlet的过滤器(Filter)。前面学习Java Web学过一点过滤器。
拦截器的作用 是拦截用户的请求,并做相应的处理 。例如在JSP提交表单数据给Controller,先是提交给拦截器的类。比如权限验证,是否登录,然后再交给Controller处理。
作法:需要配置拦截器类。Interceptor类。
接着需要在Springmvc.xml文件里面 注册拦截器类。并配置拦截器作用的路径。
拦截器 的类用的不多,在springmvc里面,对登录权限进行判断,一般都是使用的数据验证类。
二、数据验证(需要记忆)
数据验证,在企业应用里面用的比较多,但一般都是结合 统一异常处理 的方式进行处理。现只讲一下数据验证的方式。
它的作用是,使得输入的数据符合 预期,否则 就提示输入数据的格式问题。
这里我们学习Spring框架自带的验证组件。Spring验证器:
Validator接口:(自带的)
存在两个方法(自带的):boolean supports(Class<?> klass)
void validate(Object object,Errors errors)
存入错误消息的方法是reject 或者rejectValue
应用实训:编写一个添加商品的表单。
要求:1.商品名和商品详情不能为空。
2.商品价格在0到100之间
3.创建日期不能在系统日期之后。
代码分析:
第一步:导入依赖 (和前面的依赖是一样的。Spring自带的验证器不需要额外导入包)
第二步:配置web.xml文件,和之前一样
第2.5步:配置Validator类(验证器类)和错误消息的属性文件(例如error.properties,这个文件需要在springmvc里面注册噢。)
这个类自定义,但继承Validator类。并且重写它的两个方法。最后根据POJO的属性,对每一个属性进行一次判定(数据验证。符合上述的要求即可)
第三步:配置POJO、Service层、Contoller层 。方法和之前的差不多。
注意不同的是Controller层可以使用第2.5层定义的Validator(验证器类)。
第四步:配置View页面。创建数据输入页面addGoods,jsp。 (使用和前面学过的 数据绑定 去绑定POJO类型。)
需要注意一下JSP 和Controller 是可以相互转换的,也就是说,JSP的创建可以放在创建Controller之前。
第五步:配置Spring.mvc。和前面一样。
不过,多了 配置消息属性文件(就是第2.5步创建的Validator类),以及注册格式转换器。
代码分析优化:
像上面那样分为步骤来编写,很容易 因为Validate类出现问题而导致整个 项目出现问题。建议,先按 数据绑定的方式对代码进行编写。如果数据绑定通过了,并且最后能查看商品的详细页面。再接着去 修改代码,添加数据验证的方式。
数据绑定的方式步骤 的一点感悟:(建议多加练习这个方式,获得最后的数据绑定总结)
一开始,盲写数据绑定。遇到的一个问题是,先编写JSP页面进行数据绑定到POJO类,还是先编写Controller类。
在编写代码步骤的 建议:
POJO类是首先编写的。
再编写Service类(业务逻辑层,它的方法一般是一个判断类型(判断是否添加成功),一个集合类型(伪装数据库集合,将POJO的数据集合在一起。))。这个Service层的编写 需要重点注意一下,它需要很强的抽象逻辑。分为一个接口和一个实现类。你要思考,在Controller需要得到什么数据,那么就把得到的数据,用抽象方法在Service层表示
再编写Controller类(要用到service的注入,以及service的方法。比如:判断条件,然后选择返回一个页面,在比如:使用model.Attribude,将service层得到的数据 封装在model类型里面。)。最后编写JSP页面。
再加一点感悟:
这是控制Controller类的,它使用goods表示是一个Goods的类型(POJO类),它实际是传给了JSP类里面。
小结:
所以获取Controller类里面的model.Addribute(" name",service层的方法 )
有两种方式:第一种,最常用的是EL表达式:${name}
第二种,就是在表单元素里面的modelAttribute="name" 。
总结:数据验证,需要额外创建 Spring的验证器类 以及对它的类进行配置注册。
三、统一异常处理(重点部分)
请结合数据验证 的方式,判断异常处理 的过程有何不同。
异常处理方式比数据验证方式用的多,而且异常处理方式有的时候也可以代替数据验证。所以统一异常处理这个知识点需要掌握。
主要介绍 自定义异常类。因为无论是dao、service、Controller层。都是可以throws Exception。所以,异常类的实现 单独用一个exception包来存放,对这些层里面抛出的异常,这里我们主要介绍两种方式来实习,这两种方式都用的比较多。
第一种:HandlerExceptionResolver接口实现。
这个是系统自带的类,我们定义好了异常类,需要继承implements它,它存在一个方法,然后你重写方法就行。
不过,这种系统自带的异常类。使用的时候,需要去springmvc.xml文件里面,注册配置。
一般都是一句:<bean class=" exception.自定义的类"/>
第二种:通过注解实现声明异常类。@ExceptionHandler (不过实践运用中,这个省略关系不大) (最常用这种方式)
这种异常类都是自定义,并且没有继承关系。
但是,需要在控制层里面,对需要进行异常处理的Controller类 进行继承自定义的这个类,例如:
@Controller
public class TestExceptionController extends BaseController { }
暂时没有例子。
四、SSM框架整合(本此JavaEE学习的最终目标,非常重要)
本次学习的最终目标,就是能够实现SSM框架的整合。
在前面第一部分的学习,我们提到了Spring和MyBatis的整合,第二部分学习SpingMVC的框架。现在结合这三个框架一起使用。SSM其实就是(Spring、Spring MVC、MyBatis)这三个大框架的整合。
以应用项目为实例,进行这部分的学习:
项目:根据用户名 模糊查询用户信息。