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

这篇具有很好参考价值的文章主要介绍了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类里面。

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

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

小结:

所以获取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的版本提高一些。

第二个问题:

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

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

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

测试作法:

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

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

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

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

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

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

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

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

实现登录,注册,查询三个功能。文章来源地址https://www.toymoban.com/news/detail-528579.html

到了这里,关于JavaEE学习的第三部分(重点在第四个知识点,SSM框架整合)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉OpenCv学习系列:第四部分、键盘+鼠标响应操作

    键盘响应中有一个函数叫做 waitKey ,所有的获取键盘键值都是通过waitKey函数实现的。 1.键盘响应事件 cv.waitKey( [, delay] ) -- retval delay如果没有声明或者delay=0,表示一直阻塞 delay大于0,表示阻塞指定毫秒数 retval返回的对应键盘键值,注意:在不同的操作系统中可能会有差异! 典

    2024年02月09日
    浏览(49)
  • JDK1.8新特性(部分)【Lambda表达式、函数式接口】--学习JavaEE的day41

    day41 JDK1.8新特性简介 速度更快 - 优化底层源码,比如HashMap、ConcurrentHashMap 代码更少 - 添加新的语法Lambda表达式 强大的Stream API 便于并行 最大化减少空指针异常 - Optional Lambda表达式 简介 Lambda是一个匿名函数(方法), 允许把函数作为一个方法的参数 。利用Lambda表达式可以写出

    2024年04月25日
    浏览(36)
  • 基于unity的google小恐龙游戏5----第四个BOSS

    上一篇文章我实现了第三个BOSS,蜂后,这个boss实际上跟眼珠子没有什么大区别,不过还是有一些需要斟酌写好的,无论是什么,就算他再简单也好,也总是有他的意义。我觉得搞这样的练习最重要还是体会过程,积累一些经验。最后总会有收获的。本来我是想写一些新的东

    2024年02月19日
    浏览(40)
  • JavaEE之多线程编程:4. 线程安全(重点!!!)

    下面我们来举个例子: 我们大家都知道,在单线程中,以下的代码100%是正确的。 但是,两个线程,并发的进行上述循环,此时逻辑可能就出现问题了。 上述这样的情况就是非常典型的线程安全问题。这种情况就是bug!! 只要实际结果和预期的结果不符合,就一定是bug。 想

    2024年01月25日
    浏览(41)
  • 数字图像处理第三章 学习笔记附部分例子代码(C++ & opencv)

    本系列博客参考书为, 数字图像处理第三版-冈萨雷斯 第三版教材中图片下载地址: book images downloads vs2019配置opencv可以查看:VS2019 Opencv4.5.4配置教程 后续剧情: 数字图像处理 第四章 频率域滤波 学习笔记 数字图像处理 第六章 彩色图像处理 学习笔记 数字图像处理 第七章 小

    2024年02月03日
    浏览(83)
  • jpa框架部分重点

    1.1 service 业务层 @Override public ListMapString,EnterpriseFiscalVo getDistrictCounty() {     ListMapString,EnterpriseFiscalVo list = enterpriseFiscalRepository.getDistrictCounty();     return list; } 1.2  repository 层 @Query(value = \\\"select n\\\" +         \\\"sum(elect.value) as electValue ,n\\\" +         \\\"sum(fiscal.output_value)  a

    2024年02月10日
    浏览(33)
  • 正则表达式第三四个作用:替换、切割

    目录 方法二 replaceAll: 方法三:spilt: 方法一之前已经见过了: 形参中: 参数regex表示一个正则表达式。可以将当前字符串中匹配regex正则表达式的字符串替换为newStr。 代码演示 控制台: 博尔特vs布雷克vs鲍威尔 replaceAll 方法细节: //方法在底层跟之前一样也会创建文本解

    2024年01月22日
    浏览(31)
  • C语言入门教程,C语言学习教程(第三部分:C语言变量和数据类型)二

    前面我们多次提到了字符串,字符串是多个字符的集合,它们由 \\\" \\\" 包围,例如 \\\"http://c.biancheng.net\\\" 、 \\\"C语言中文网\\\" 。字符串中的字符在内存中按照次序、紧挨着排列,整个字符串占用一块连续的内存。 当然,字符串也可以只包含一个字符,例如 \\\"A\\\" 、 \\\"6\\\" ;不过为了操作方

    2024年01月17日
    浏览(51)
  • C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)

                                                        懒大王感谢大家的关注和三连支持~    目录 前言 一、并发服务器 1.进程并发服务器 实例代码如下:  2.线程并发服务器 实例代码如下:  二、域通信 域通信TCP实例代码如下:  三、广播与组播(UDP)  1.广播 实例代码

    2024年02月05日
    浏览(47)
  • 计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

    计算机网络复习系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称缩写 给大家整理了一下计算机网络中的重点概念,以供大家期末复习和考研复习的时候使用。 参

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包