JavaWeb-知识梳理加项目优化

技术的语言表达

JavaSE

程序逻辑流程

面向对象(OOP):编程思想;编码量,使用一些封装继承,工作后理解会越来越深

API:后面学的都是API(servlet和后面的框架也是API),不可能从底层开始写代码,要调用方法

如:
类.属性.方法()

System.out.println()

二阶段

数据库:最大优点为查询方便

JDBC:一个用java连接数据库的api

开启数据库服务:net start mysql

image-20200817095245962

装软件是安装MySQL的服务

前端:HTML CSS JavaScript jQuery

只写前端中小型公司做不到

我们要求把前端页面做规整,稍微美化一下,看到舒服一些

JavaWeb:和服务器具有交互功能的动态网站

一、数据库

image-20200817101324568

retrieve检索,查询

DBA:大型公司有的数据库管理员

权限:grant授予 revoke收回 deny拒绝

transaction:事务

CRUD

image-20200817100600492

约束:保证数据完整性(真实有效)

​ 主键

​ 唯一键

​ 外键:引用完整性,降低冗余(把表分出去),查询变慢(传统项目,三界范式)

​ 默认值

​ 非空

​ 检查约束:MySQL

公司不差钱,都放一个表里面,但也不是一个外键都没有,会变少:

image-20200817103441103

单表查询

image-20200817101621682

顺序不可更改

image-20200817112305721

标准写法

image-20200817112330815

多表查询

外连接

image-20200817112904402

完全外连接(项目里没什么意义)

UINON:自动去重;可以用UINON来模拟效果

image-20200817113819035

image-20200817113854799
子查询(最灵活,什么都可以用)

用外连接查询,内连接是查询不出来的

image-20200817115235485

用子查询

image-20200817115225752

相关子查询(用函数):括号内用到外层的东西,不能单独执行

exists 嵌套子查询,有数据为真,没有就为假

image-20200817115554479

不用函数的相关子查询

image-20200817120703727

image-20200817121216692

临时表必须有别名

image-20200817121501879

image-20200817121718481

解决乱码

乱码本质:编码和解码不一致

编码和解码设置成一样的就不会乱码

image-20200817143721132

数据库设置一下编码格式

image-20200817144127535

练习:

4题.

image-20200818094129462

6题:两张临时表

image-20200818095210726

9题

image-20200818100145712

image-20200817152444398

函数替换null

image-20200817152520037

二、JDBC

2.1 Eclipse使用详讲

还有很多公司在用Eclipse(免费)

1.test不能有参数和返回值

image-20200817161747055

2.2 打jar包

java只设计了接口,但不实现,让数据库生成厂商去实现

image-20200817163721204

把工具项目打成包,不要选择test包

右键打成jar包,搜索jar

ctrl+shift+o自动优化包

测试类,和src同级别

image-20200817164502788

​ 每一个方法对应一个测试类

image-20200817164529641

2.4 配置连接池

image-20200817165940919

C3P0管理连接池

image-20200817171519872

类路径就是src下

image-20200817170021988

配置成自己的信息

image-20200817170044578

理解含义,不用改

image-20200817170329582

用连接池获取连接

image-20200817170645112

2.5 封装CRUD

JMeter;Maven后面要学的;都是apache阿帕奇的

beanUtils明天用;DBCP也是连接池

我们用dbutils

以后数据库增删改这么写

后获取连接源

image-20200817172022379

先获取连接源

image-20200817172217012

  • 查询自己上网查怎么写

2.6 使用JDBC连接MySQL数据库需要的jar包

image-20200817172513779

A都要自己写

B连接不需要自己写

C增删改查不需要自己写

D都不需要自己写

2.7 关闭数据源

执行test方法之前创建TxQueryRunner对象

image-20200818103712828

基本类型都用包装类型

image-20200818103935009

一个类的对象就是一个bean

image-20200818104437198

2.8 查询

1.查询一个

image-20200818104527207

2.查很多

alt+shift+L;

image-20200818105005202

3.单行单列查询

image-20200818105728987

4.转map

image-20200818105520682

5.转ListMap

image-20200818105744981

6.连表查询

image-20200818111557613

用map接收

在把map转成bean,使用工具包

image-20200818111938524

image-20200818112334460

image-20200818112820347

teacher封装的类(就这么写)

image-20200818113152330

里面帮你新建了对象,而且帮你抛了异常,直接用new对象接受就可以了

image-20200818213343330

7.三表查询

增加一个中间表,转换成两个多对多

image-20200818224231457

image-20200818171332646

image-20200818160648614

查询一门成绩

image-20200818160244583

所有成绩

image-20200818160528051

image-20200818160608347

查询某号课程和选择这门课程的所有学生

后面连表查询可不可以用map来写?

image-20200818172327054

查询所有课程,和选择这门课程的所有学生

image-20200818172646156

查询指定的学生和该学生选修的所有课程

查询所有学生和该学生选修的所有课程

敲熟,就这么点事

image-20200818171228241

  • 练习:

image-20200818115435711

1.查询所有员工

image-20200818152733680

2.不能用连表(用Map做),查出来是两个bean,应该是一个bean

image-20200818153605207

image-20200818153435040

3.查询所有部门及部门里的所有员工

image-20200818154056073

2.9 分层建包

建立外键关联关系:

关系模型:数据库中体现关系的只有一个字段;子表体现关系,主表中没有

对象模型:一般不写id(如private Integer sid),而是写对象,用的时候就查,不用可以不查;多对一就是一个集合

一对一:在外键类新建一个主键对象

一对多:在主键类建立一个外键类对象的集合

多对多:转成一对多或多对一

image-20200818111319323

2.10 规则

属性指的是get和set,起名要规范,属性和字段要对上,

如name对应getName和setName,否则或报各种错误

image-20200818142018702

创建有参,一定把无参的构造器写上

image-20200818142327112

注意:对象名和列名不能一样:score一样,赋值时会报错

image-20200819093751058

三、JavaWeb

image-20200819093630807

3.1 Eclipse配置tomcat环境

3.2 创建JavaWeb项目

2.5没有注解,3.0有注解

连接源码

3.3 Servlet

image-20200819101459416
3.3.1三个生命周期方法两个使用方法

image-20200819112153766

把封装好的config接收一下,返回就不为null了

image-20200819112652017

image-20200819112223939

3.3.2.servlet继承HttpServlet

1.约束文件和配置

image-20200819110350890

image-20200819104937617

2.init方法

调用父类GenericHttp中,给定义好了,就不为空了

image-20200819112652017

image-20200819113252012

要自己定义用下面的模板方法(重载方法)

image-20200819114847427

image-20200819113438330

初始化:第一次惩罚,现在一般都配上

默认第一个用户访问的时候初始化,配置好这个默认启动tomcat时全部加载好

image-20200819110921316

3.配置自定义初始化参数

获取自定义参数(获取一个和获取所有)

image-20200819115935910

4. doGetimage-20200819153646259

重写service,里面会强转servletrequest,然后调用doget和dopost

image-20200819155140187

5. doPostimage-20200819153657441

6.状态码

302重定向

image-20200819153742359

3.4 XML

html:浏览器显示效果

xml:存储数据,配置文件

1.基本语法规范

image-20200819105520730

2.约束文件:用别人的框架,去配资文件要遵循一定的规则

image-20200819105626872

有两种:.dtd和.xsd

3.5 MVC模式

3.5.1 Module(逻辑层+数据层)

数据

3.5.2 View(表示层)

页面

3.5.3 Controller(表示层)

Servlet

三层

表示层:UI用户界面(控制台,Windows,Web)

业务逻辑层:处理特定业务需求:中间层,实际商业项目最复杂的是业务

数据访问层:执行数据库CRUD

3.6 分层—注册

3.6.0 uuid加密

uuid:可以按照特定的算法,生成一个不重复的32位

的字符串,算上-是36位

数据库里:(有是有,但是最终用java来做)

image-20200820104954109

image-20200820105827177

java

image-20200820105041643

image-20200820105101864

MD5加密,做了一个转换,核心方法是diget()

image-20200820105901569

下面是CommomUtils里

3.6.1 控制层(service+dao)

uid主键

​ 自动增长

​ 业务主键 学号 学员代码-系代号-入学年份-班级编号-01

三个方法

按规范建立test类

image-20200820111144223

dao层直接操作数据库

image-20200820111548308

登录,注册判断没必要返回boolean值,抛个异常就好了,新建一个userexception类

其实没必要打印异常信息,这里是为了方便开发者自己查看,加了个打印

image-20200820112352188

具体逻辑

image-20200820112518632

1.三个异常是平级的,但前两个是用户异常,捕获的是dao异常,不会捕获到用户异常,最终都抛给调用者来处理

image-20200820112851869

2.或者在dao层直接抛系统异常

image-20200820141307830

捕获抛的对应的异常,抛出自定义异常

image-20200820141359519

3.或者test测试:最上层的调用者(跟service是同层的)来处理异常(测试,获取异常信息)

image-20200820113147085

在spring框架里非受查异常最简单,受查异常有一套处理方法,平时还是写非受查异常

最复杂的是业务,要求越多,逻辑越复杂;业务要去公司去了解,根据客户的需求来分析业务,没做过这个行业根本不懂其中的细节怎么用业务实现,首先要去理解客户的专业名词,搞清楚客户行业的流程

如借书,每个业务都需要操作好几张表

image-20200820115044091

如论坛发帖

image-20200820115224701

3.6.2 表示层

1.数据验证

前端验证:js或jQuery,验证插件

​ οnsubmit=“boolean”

​ 不要相信前端,传过来的信息是有问题的,用户可以绕过前端

​ 前端也要有验证,可以减轻服务器的压力,例如格式,长度,一致等这些验证

​ 内网部署可以不写后端,都是自己人,没人攻击网络

后端验证:Servlet使用Java代码验证

​ 确保执行业务之前,数据有效

​ 部署到外网的必须有后端

ajax验证:提高用户体验,还是靠

​ js(XmlHttpRequest)请求服务器

2.注册验证

同步请求流程

image-20200820160624471

image-20200820155939423

验证格式用正则表达式:

image-20200820160251714

没有通过

image-20200820160840092

通过验证

image-20200820161324903

回显一个验证的信息到注册页面

image-20200820161424043

数据回显:通过el

image-20200820162648747

添加数据回显

image-20200820162853015

3.7 登录

image-20200820165449376

image-20200821093441031

验证码,要给一个流,传图片用字节流,传文本一般用字符流

image-20200821095029331

流程

image-20200821121022826

得到验证码文本,要先调用getImage,才有getText

image-20200821095653221

切换图片验证码

changeImage():

image-20200821100533366

调用登录

image-20200821143514750

3.8 分页(同步请求)

3.8.1 sql语句

3.8.2 pageBean<T>

image-20200821121440447

totalPage的set可以不要,get是算出来的

image-20200821111812182

image-20200821143157182

image-20200821114504439

image-20200823180329839

jsp页面

image-20200821121622534

image-20200821121641812

页面控制

image-20200821121703585

页码数量的控制,把begin和end加入pageBean,也不需要get和set,写一个方法进行赋值

image-20200821152911123

这个注意要放在最后,要用到前面的值

image-20200821155113973

把totalpage改成getTotalPage()

image-20200821153952687

image-20200823231158694

3.9 多条件组合查询(同步请求分页)

关键拿到dao层的条件,在外面拿到一个sql

方法为进行sql的拼接

image-20200821170445438

因为不知道有多少个参数,用数组也不好用,所以用集合转成数组来传参

image-20200821170623767

添加params内模糊查询等条件

image-20200824195704998

image-20200821170819367

在params里面再添加两个参数,limit后面的

画红线的写错了,要接收一个新的sql,不然语句没有变,还是原来的

image-20200821171655674

封装成一个完整的pageBean,跟前面分页是一样的

jsp页面:加一个条件表单

image-20200824092949410

组合查询:数据回显(post表单提交,session,request(get))

cookie被禁用,session还想用怎么办

image-20200824094118422

session是个键值对,key为sessionId,value为嵌套一个map来存储数据

使用get网页传值的方法来解决cookie被禁用(百度做法)

image-20200824095317412

拼接参数要把pageIndex过滤掉,因为这个值是页码请求发送的

image-20200824100418848

jsp组合条件查询form回显,其他正常回显即可,select复杂点,要每条加个条件判断来回显上条记录

image-20200824100201380

地址的写法改一下

不能写在el里面

image-20200824101010984

写在外面

image-20200824101257258

一开始index请求的地址不请求查全部,那个方法可以删掉,直接请求这个组合条件查询即可

地址显示

数据控制:页面点击后,怎么更新同步请求,怎么跳转

删除的流程思路:

image-20200824111439170

具体:

页面请求地址

写一个confirm方法的确认框

image-20200824222657635

image-20200824222726592

image-20200824223132811

更新的思路流程:(这个是跳转到list,一般改完都是回到第一页)

image-20200824105123064

不能直接跳转jsp页面,请求转发会带一个cid参数,有一个模糊查询,转发过去是没有页面的,所以用重定向,忘记这个cid

image-20200824105833173

具体:

image-20200824110816107

新建一个更新页面,新建一个新update的方法

image-20200824111106234

3.10 异步请求(AJAX)

3.10.1

异步的JS和XML

异步:无刷新,局部刷新

JS:使用JS(XmlHttpRequest不同的浏览器里面对象不一样)发送异步请求,响应数据使用JS解析

前端用ajax验证后,也要通过后端验证

XML:响应数据的格式(浏览器都支持XML解析,不同内核的浏览器提供解析XML的API不同,现在都使用JSON

3.10.2 jquery是对js的封装,可以混着用,但要用对

js的初始化

image-20200824153958978

jquery的底层是js,jquery里面可以写js代码

image-20200824154044154

js里也可以写jquery

image-20200824154201777

$(function)和window.onload只能写一次,前者加载更快,因为是把所有代码加载完就执行,后者把代码加载完,代码中的资源也要全部加载完毕才会执行。

上面是下面的缩写,$是jquery的缩写

image-20200824154640254

3.10.3 DOM对象和jQuery对象

代码可以混用,但是对象不能混用,各有自己的一套系统,DOM对象只能使用DOM的方法来操作,jQuery同理。

上面不对,不同对象方法不能混用

image-20200824154917835

对象转换:jQuery中的$(),是工厂函数,任何对象经过工厂加工都会变成jQuery对象;一般没人这么转,直接用jQuery

image-20200824155349589

转换为jquery对象,再用dom的方法,就是错误的,如下图

image-20200824155605050

jquery转换成DOM对象

image-20200824155738523

3.10.4 JSON对象和JSON串(只有对象才能遍历,字符串不行)

JSON对象:map–key,value,(对象–属性,属性值)

遍历:一个参数image-20200824160423309

两个参数image-20200824160526405

例:image-20200824160730902

用this

image-20200824160841902

dom对象

image-20200824160903983

只有一个参数肯定是下标,根据下标找数据,两个参数才有对象,dom是下标,不要只看名字

image-20200824161110036

JSON串

把JSON串转成JSON对象

image-20200824161347254

把JSON串转成JSON对象

image-20200824161705995

对象转串

image-20200824161813983

3.10.5 服务器响应JSON

jsonlib

fastjson 阿里

gson 谷歌

jackson SpringMVC框架底层用的就是Jackson

响应一个JSON字符串:底层都是以流的形式传输

image-20200824164334484

接收和解析:

1.最原始的方法,参数很多,很多细节可以控制,其他方法调用的都是它

image-20200824164710470

2.post方法,串转换为对象

image-20200824165607222

image-20200824165458209

不想写转换,post里再写一个参数用来转换成对象

image-20200824165704521

3.集合解析

image-20200824170102443

image-20200824170112740

4.get

3.10.6 统一响应格式,统一异常处理

image-20200824170957867

模拟异常

image-20200824171129480

image-20200824171140157

3.11 分页(异步请求)

jsp、servlet动态资源,tomcat能解析
html、js、css静态资源,tomcat不能解析

3.11.1 封装请求方法

1.jsp里可以用jstl写

image-20200825093655523

js里不可以这么写

image-20200825093920802

js中window中location属性

image-20200825094651150

2.封装servlet路径(前后端不完全分离,当前服务器下,不是绝对路径)

image-20200825101443818

3.统一json格式的响应数据

image-20200825100031641

4.封装解析方法

image-20200825100749263

image-20200825102213548

5.页码

整个表单条件提交

image-20200825104041546

每次请求清空数据

image-20200825104534433

image-20200825104846032

把页码藏在表单里一起提交

image-20200825105426283

传页数

image-20200825105027402

6.编辑和删除

删除

cid那一行绑定一个id叫cid

image-20200825144610680

image-20200825144245446

编辑

image-20200825144713112

获取参数值

image-20200825145215367

把查询绑定一个servlet请求,做更新

四、项目

4.1 格式

不想写判断

image-20200825151029816

r:已经把/项目名加好了,直接加地址名

image-20200825153327336

封装了一个BaseServlet的父类,用反射解决了判断和重定向,学会使用

以后改成这样来写,要把private改成public,且返回类型为String,同步返回跳转地址,f:转发和r:重定向;默认f:,可以不写,但一般加上代码可读性提高;异步返回null

同步

image-20200825154453165

异步

image-20200825154715255

image-20200825164103596

image-20200825164110082

image-20200825164205489

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值