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

Java中级班SSM笔记相关推荐

  1. 北风网java微信_北风网--Java中级班之JSP+servlet+论坛项目+论坛项目MVC实现

    本次培训的重点在与项目实战培训,项目实战培训中讲采用MVC设计模式进行开发,考虑点主要是为了高级部分的框架学习打下很好的基础,通过本次培训,学员能够很好的掌握MVC下Web项目设计的方法,在JSP+s ...

  2. Java中级部分内容笔记 异常 I/O 集合框架 泛型 Lambda

    Java中级学习过程 参考的是所长的Java中级内容 1异常处理 1.1异常的定义 在我们打开文件的过程中,文件可能存在且被打开,也有可能不存在.在此时,Java会自动抛出一个异常,让我们必须去处理两 ...

  3. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

  4. python全栈开发中级班全程笔记(第三模块、第一章(1.面向对象基础))

    python全栈开发笔记第三模块           第一部分 第一章 :面向对象(类) 一.面向过程编程1.面向过程编程:主要是过程二字,所谓过程,就是指解决问题的步骤,也可以说是设计一套流水线(机 ...

  5. Java基础班学习笔记(13)IO流

    知识要点: 1:异常(理解) (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeExcept ...

  6. Java基础班学习笔记(8)

    1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 如何 ...

  7. Java基础班学习笔记(15)GUI图形界面编程

    1:如何让Netbeans的东西Eclipse能访问. 在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可. 注意:修改项目编码为UTF-8 2:GUI(了解) (1)用户 ...

  8. 潭州Java中级班(day_04)

    1.简单的自我介绍,作业实现的方法不限. (100分) package com.tz.Demo;import java.util.Scanner;public class Test {public s ...

  9. Java基础班学习笔记(6)

    1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C: ...

  10. 潭州Java中级班(day_13)-异常概述

    异常 Throwable类是Java语言中所有错误Error和异常Exception的Throwable类* * Throwable:* ----Error:错误的意思* ----StackOverf ...

最新文章

  1. C#: static关键字的作用
  2. “数据中心运维管理VIP学习群”问题汇总(一)
  3. STL中迭代器的作用,有指针为何还要迭代器
  4. Java的二十三种设计模式(原型模式(Prototype))
  5. Robot framework 引入 Selenium2Library 类库:
  6. OpenJudge 2810(1543) 完美立方 / Poj 1543 Perfect Cubes
  7. python线性回归做预测_python-线性回归预测
  8. 京东商城登录逻辑分析,实现程序登录京东商城
  9. 磊科路由器信号按键_磊科路由器怎么设置中继? | 192路由网
  10. 甲骨文裁员,华大人员瘦身优化,亚马逊鼓励离职?
  11. 《辛雷学习方法》读书笔记——第二章 心态
  12. TensorFlow2.0-GPU加速
  13. UTM投影分带标准及投影转换
  14. 斗地主不算花色算大小王,起初发到的17张牌有多少种?
  15. 微软与纳斯达克开展合作将区块链产品整合至纳斯达克服务中
  16. ★ 我的世界各类奇葩武器实现!(命令方块1.13+)
  17. 【PTA】7-7 大炮打蚊子
  18. 解读GDPR | 你应该知道的那些事儿
  19. BufferedInputStream的作用比较
  20. Matlab的parfor的使用条件

热门文章

  1. MLU370用户指南 or MLU370-YOLOV5快速训练推理!!速度起飞
  2. java什么是reference_Java语言中几个Reference常见的作用详解[Java代码]
  3. 闪耀AWE2019,青莲云再度荣获艾普兰智能创新奖
  4. 查看ip地址及设置启动项
  5. 拼凑sql_R中的拼凑包
  6. 商业周刊封面文章:百度如何赢在中国
  7. Max Consecutive Ones
  8. web无插件解码播放H264/H265
  9. keras CAM和Grad-cam原理简介与实现
  10. Python学习(二): Python xml 读取之 ET.parse()