JavaEE学习的第三部分(重点在第四个知识点,SSM框架整合)

一、拦截器

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)这三个大框架的整合。

以应用项目为实例,进行这部分的学习:

项目:根据用户名 模糊查询用户信息。

问题分析:

第一个问题:

Caused by: java.lang.UnsupportedClassVersionError: org/mybatis/spring/SqlSessionFactoryBean has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (鏃犳硶杞藉叆鐨�.绫� [org.mybatis.spring.SqlSessionFactoryBean])
        

原因:org.mybatis.spring.SqlSessionFactoryBean 类是由一个比当前 Java 运行时更新的版本编译的(类文件版本为 61.0),而当前 Java 运行时只能识别最高到 52.0 版本的类文件。

纠错:在pom.xml文件里面,改变mybatis的版本。将mybatis的版本降低一些,或者mysql的版本提高一些。

第二个问题:

第三个问题:(多加练习。)

测试是否获取dao的数据。(没有进行测试,结果导致,是否获取到了数据都不知道。所以以后做SSM的框架,从数据库提取的数据都进行测试一下。)

测试作法:

在Controller编写TestController 类方法 和Test 类测试。

TestController 类方法:编写测试用到的数据。(调用的是Dao类的方法)

Test类:就是调用applicationContext.xml文件的类方法,进行调用上一个的test方法。

将第二个问题解决之后,发现,代码可以运行的通了,而且符合预期!!!诀绝子

请多加练习SSM框架,建议组合式练习,先练习spring+mybatis的框架整合,在添加spingmvc的框架。

一定要理解springmvc是怎么绑定POJO的,因为在mybatis的框架里面,我们发现,它连接数据库之后对数据获取进行测试,是对POJO类型 ,就是设置了setName="某个字符串",就是加了这样的设置,才能进行测试。

但在springmvc框架里面不需要进行这样的设定。(这个地方一定要多加练习,了解它们是怎么就绑定了POJO类的)

练习:使用工厂模式的思维进行练习

实现登录,注册,查询三个功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值