Java中级班SSM笔记

SSM

Spring+SpringMVC+MyBatis;
Web MVC框架:SpringMVC。
Spring:的核心工功能:控制反转(IoC),依赖注入(DI)–bean;
MyBatis:提供持久层操作的一个框架;
什么叫MVC:M是数据,V是能看到的东西,C是逻辑;

开发工具

IDEA;
项目管理工具:Maven:必须能联网!

Maven项目

1 项目目录结构是约定好的,遵守“约定大于配置”的理念;
2 src/main/java下放源码;
3 src/main/resourses下放非源码文件,比如配置文件;

使用Spring

0 添加Spring核心库,
1 可以在任何类型的项目中使用;
2 必须有配置文件,配置文件是XML;
3 在配置文件中定义Bean和Bean之间的关系;
4 Bean的定义的要素:Bean类名用于创建Bean对象,Bean名字,用于在其它地方引用它;
5 Bean的注入有两种常用方式:可以通过构造方法参数注入,也可以通过属性注入。

如何打开Maven工程?

Bean生命期是什么样的?
Bean的实例是如何被创建出来的? 通过什么技术?

动态代理

1 在程序运行中创建出代理,这就叫动态代理;
2 有两态API可以使用:一是JDK代理,二是CGLIB代理;
3 JDK代理需要被代理的类从接口派生,而CGLIB不需要;

Spring AOP

1 AOP 面向切面的编程
2 AOP可以一次性增强多个类的多个方法,其底层基于动态代理实现;
3 请自行搞懂AOP的相关概念:切面、连接点、切点、通知、织入等;
4 SpringAOP可以跟据被切的类是否实现了接口,决定底层利用JDK还是CGLib;

MyBatis

1 是一个ORM层框架;
2 用于访问数据库;
3 MyBatis不是一个纯ORM框架;
4 ORM 是Object-Relationship-Mapping;

使用过程:

1)添加依赖项
2)创建配置文件,配置数据源;
3)创建映射文件,写出SQL查询语句;
4)创建实体类;
5)创建会话工厂;
6)获取会话;
7)执行查询;
通过Session执行查询有两种方式,推荐使用接口进行查询的方式,此方式需要定义一个接口,接口对应Mapper文件的元素,接口中的方法对应中的查询语句;

安装MySQL服务,推荐使用XAMPP套件;其中包含了数据库的Web形式管理程序PhpMyAdmin;

为了保证无字符乱码,必须保证数据库与程序中的字符集和字符编码全部一致。
字符集与字符编码是不同的概念,字符集是对一坨字符的编号方案;字符编码是字符序号的表示方法;
UTF8是编码方法,Unicode是字符集编号方案;

SpringMVC

1 MVC:数据、视图、业务逻辑分离;
2 SpringMVC利用一个DispatcherServlet接管了所有路径的请求,然后分发给不同的Controller;
3 一个请求首先由Controller处理,处理完成后转给View层(一般是JSP),View层产生HTML最终传给浏览器;
使用步骤:
1 添加依赖库;
2 配置Web.xml,使SpringMVC的Filter起作用;
3 添加SpringMVC配置文件;
4 添加Controller类和方法以响应请求;

C与V之间如何传递数据?

SSM整合

1 SpringMVC是MVC架构的核心;
2 SSM中利用Spring的IoC功能自动管理各框架要创建的对象;还利用Spring的AOP实现了数据库事务的自动切入;
3 利用MyBatis实现了C与M的分离;
过程:
1)添加三个框架的依赖库,尤其注意Spirng和MyBatis的整合库,没有它,Spring无法以Bean的形式管理MyBatis中的对象;
2)修改web.xml,在里面添加Spring的ContextLoaderListener和Spring的DispatchServlet;
3)为ContextLoaderListener和DispatchServlet分别添加配置文件。DispatchServlet的配置文件中主要配置MVC框架相关的参数,比如如何找到Controller,如何找到view层文件,是否支持Web文件上传等,而ContextLoaderListener的配置文件中主要配置MVC无关的参数,比如如何整合MyBatis,MyBatis的数据源,如何为某些类切入事务管理等等。
4)创建Controller类,处理业务;
5)创建Mapper接口和Mapper文件,访问数据库;
6)创建JSP文件,产生HTML;
Spring整合MyBatis后,获取Mapper实例时,只需要使用自动注入即可;

版本控制服务

首选Git。
1 它能对每次修改进行记录,每次记录都有一个版本号,可跟据需要回滚;
2 它能实现多人协作开发,帮助开发者之间同步工程的内容;

Git的初次使用过程:

1)建立远程仓库;
2)建立本地项目;
3)在本地项目中创建本地仓库;将项目文件添加到本地仓库,提交这次改变到本地仓库;
4)将本地仓库与远程仓库关联;
5)将远程仓库的内容拉到本地来与本地内容合并;
6)将合并提交到本地仓库;
7)将本地内容上传到远程仓库;

项目开发管理

1 使用敏捷开发管理平台;
2 开发过程分为多个迭代,每个迭代是一段比较短的时间,一般最短一周,最长一个月;
3 每个迭代都包含多个任务,为一个迭代增加任务,就是做一段时间的计划;
4 在需求分析阶段可以在“项目规划”中把功能规划出来,功能分成三层,Story层的功能可以直接做为任务分配到迭代中;
5 任务有状态,刚分配的任务是“新建”状态,任务处理人在处理任务时需要把状态改为“进行中”,处理完成后改为“已解决”,然后由测试人员开始测试,此时需改为“测试中”,如果测试出错,改为“已拒绝”,这需处理人重新处理任务,如果测试通过,改为“已关闭”,这种状态才表示任务完成了。

单元测试

1)最流行的Java测试框架是JUnit;
2)Maven中,测试代码必须放在“src/test/java”下;
3)因为我们的项目中使Spring集成了MyBatis以及其它对象,所以测试代码的运行也需要Spring的支持,所以下要添加spring-test库;
4)需要告诉测试用例类如何找到Spring的配置文件,用注解:@ContextConfiguration(locations={“classpath:spring-context.xml”})
5)测试类中包含测试代码的类需要以@Test注解;
6)test下的代码仅用于开发阶段的测试,打包发布项目时,不被包含;

SpringMVC中添加一个页面的过程:

1)在Controller中添加一个方法对应对页面的请求;
2)为这个方法添加注解,说明其对应哪个路径;
3)在这个方法中返回view层文件的名字;
4)添加view层的文件(jsp);

创新课堂项目开发

一:创建数据库,建立用户表

二:实现用户登录和注册功能

1 表单提交后,SpringMVC的Controller如何接收数据?
       在请求响应方法中,为提交的数据添加对应的参数,利用注解指定参数对应的数据;
2 添加用户成功后,如何获取这条记录的ID?使用MyBatis的主键回填技术,其要点为:
   1)在Mapper文件中设置需要主键回填的方法元素的属性;
   2)启用主键回填:useGeneratedKeys=“true”;
   3)指定回填到对象的哪个属性:keyProperty=“id”;
3 如何在多次请求之间共享数据?使用HttpSession
4 如何保持页面与URL地址中路径的一致?使用重定向

三:实现登录拦截

1 JSP中使用Filter拦截Servlet和Jsp的访问;
2 SpringMVC中使用拦截器拦截所有页面的请求;
3 使用步骤分两步:1)实现拦截器类;2)配置拦截器;

四:实现登录验证码

五:实现课程类别管理

1 类别分两级
2 两级类别之间是父子关系,要取得1级类别时自动取得2级类别,需使用MyBatis的级联技术;
3 如果实体类的属性与表的字段名完全相同,MyBatis可以做到表与实体类的字段之间自动映射(这里面还包含了字段与属性间数据类型的自动转换,即JDBC类型与Java类型之间的转换),但如果无法自动转换,就需要我们自定义映射关系,使用<ResultMap>。当然要使用级联的话,也需要定义<ResultMap>。
4 步骤:
   1)在数据库中创建两个表catagory1和catagory2,对应一级类别与2级类别;
   2)创建实体类,对应这两个表;
   3)创建Mapper接口,在Mapper文件中定义这个接口的查询语句,用于访问这两个表;
   4)创建新的Controller类和Service类,用于处理类别相关的请求;
   5)在JSP中利用jstl循环动态产生每个类别的HTML元素,以展示类别;

六:实现课程创建

1 文件上传与接收;
   1)需要依赖库:commons-fileupload;
   2)需要在mvc配置文件中配置multipartResolver;
   3)在网页中以Form的形式提交,仅支持HTTP POST方法;
   4)在Controller的响应方法中以参数形式接收,参数类型必须是MultipartFile
   5)需要将文件保存到服务端某个约定的文件夹下;
   6)需要获取提交文件的原始文件名(使用方法getOriginalFilename()),主要是为获取其扩展名;

课程分页展示

1 分页中用到的参数:当前页开始序号、一页多少条、当前页号、上一页页号、下一页页号、第一页页号、最后一页页号,总页数。页号的计算:当前条的序号÷每页条数。
2 推荐使用MyBatis分页插件PageHelper实现分页;
3 分页的本质是组织出合适的数据表查询语句;
4 使用步骤:
   1)添加依赖项;
   2)为sqlSessionFactory配置分页插件;
   3)在调用查询数据表的方法之前,调用PageHelper.startPage();
   4)要想获取分页信息,创建PageInfo对象;

验证码

1 什么是验证码?用图像显示出的一组动态变化的内容,为需要手动操作的业务防止程序操作;
2 浏览器显示出的是一个图像;
3 每点一下这个图像就改变一次内容;
4 内容是在后台随机产生的,后台跟据验证码的内容创建出内存中的图像,返回给浏览器。这个过程肯定在Controller的一个方法完成,网页要显示这个图像,只需要让img的src指向这个方法的路径即可;
5 验证码可以自己计算,但是要产生高级复杂的验证码还要借助第三方库:jcaptcha。注意,如果你使用JDK7以上的版本,最好使用jcaptcha2.x,而不是jcaptcha1.x ;
6 必须保证验证码不被浏览器缓存,可以在图像HTTP包的包头中设置缓存参数,但是这还不够,还需要在HTML的img元素中做一些手脚,只要保证了每次img的URL都发生变化,浏览器就不从缓存中取之前的图像;

BootStrap

Ajax

1 Ajax是通过JavaScript以异步形式访问服务端功能的技术;
2 异步调用离不开回调函数,发出一个异步请求后,回调函数是在请求返回后执行,但什么时候执行无法预料;
3 JavaScript在浏览器端才是代码,在服务端只被当作文本;
4 虽然JavaScript有原生的Ajax API,但是大家都使用jQuery;

JSON

RestFul Controller

你可能感兴趣的:(开发工具,web,java)