程序逻辑流程
面向对象(OOP):编程思想;编码量,使用一些封装继承,工作后理解会越来越深
API:后面学的都是API(servlet和后面的框架也是API),不可能从底层开始写代码,要调用方法
如:
类.属性.方法()
System.out.println()
数据库:最大优点为查询方便
JDBC:一个用java连接数据库的api
开启数据库服务:net start mysql
装软件是安装MySQL的服务
前端:HTML CSS JavaScript jQuery
只写前端中小型公司做不到
我们要求把前端页面做规整,稍微美化一下,看到舒服一些
JavaWeb:和服务器具有交互功能的动态网站
retrieve检索,查询
DBA:大型公司有的数据库管理员
权限:grant授予 revoke收回 deny拒绝
transaction:事务
CRUD
约束:保证数据完整性(真实有效)
主键
唯一键
外键:引用完整性,降低冗余(把表分出去),查询变慢(传统项目,三界范式)
默认值
非空
检查约束:MySQL
公司不差钱,都放一个表里面,但也不是一个外键都没有,会变少:
顺序不可更改
标准写法
外连接
完全外连接(项目里没什么意义)
UINON:自动去重;可以用UINON来模拟效果
用外连接查询,内连接是查询不出来的
用子查询
相关子查询(用函数):括号内用到外层的东西,不能单独执行
exists 嵌套子查询,有数据为真,没有就为假
不用函数的相关子查询
临时表必须有别名
乱码本质:编码和解码不一致
编码和解码设置成一样的就不会乱码
数据库设置一下编码格式
练习:
4题.
6题:两张临时表
9题
函数替换null
还有很多公司在用Eclipse(免费)
1.test不能有参数和返回值
java只设计了接口,但不实现,让数据库生成厂商去实现
把工具项目打成包,不要选择test包
右键打成jar包,搜索jar
ctrl+shift+o自动优化包
测试类,和src同级别
每一个方法对应一个测试类
C3P0管理连接池
类路径就是src下
配置成自己的信息
理解含义,不用改
用连接池获取连接
JMeter;Maven后面要学的;都是apache阿帕奇的
beanUtils明天用;DBCP也是连接池
我们用dbutils
以后数据库增删改这么写
后获取连接源
先获取连接源
A都要自己写
B连接不需要自己写
C增删改查不需要自己写
D都不需要自己写
执行test方法之前创建TxQueryRunner对象
基本类型都用包装类型
一个类的对象就是一个bean
1.查询一个
2.查很多
alt+shift+L;
3.单行单列查询
4.转map
5.转ListMap
6.连表查询
用map接收
在把map转成bean,使用工具包
teacher封装的类(就这么写)
里面帮你新建了对象,而且帮你抛了异常,直接用new对象接受就可以了
7.三表查询
增加一个中间表,转换成两个多对多
查询一门成绩
所有成绩
查询某号课程和选择这门课程的所有学生
查询所有课程,和选择这门课程的所有学生
查询指定的学生和该学生选修的所有课程
查询所有学生和该学生选修的所有课程
敲熟,就这么点事
1.查询所有员工
2.不能用连表(用Map做),查出来是两个bean,应该是一个bean
3.查询所有部门及部门里的所有员工
建立外键关联关系:
关系模型:数据库中体现关系的只有一个字段;子表体现关系,主表中没有
对象模型:一般不写id(如private Integer sid),而是写对象,用的时候就查,不用可以不查;多对一就是一个集合
一对一:在外键类新建一个主键对象
一对多:在主键类建立一个外键类对象的集合
多对多:转成一对多或多对一
属性指的是get和set,起名要规范,属性和字段要对上,
如name对应getName和setName,否则或报各种错误
创建有参,一定把无参的构造器写上
注意:对象名和列名不能一样:score一样,赋值时会报错
2.5没有注解,3.0有注解
连接源码
把封装好的config接收一下,返回就不为null了
1.约束文件和配置
2.init方法
调用父类GenericHttp中,给定义好了,就不为空了
要自己定义用下面的模板方法(重载方法)
初始化:第一次惩罚,现在一般都配上
默认第一个用户访问的时候初始化,配置好这个默认启动tomcat时全部加载好
3.配置自定义初始化参数
获取自定义参数(获取一个和获取所有)
4. doGet
重写service,里面会强转servletrequest,然后调用doget和dopost
5. doPost
6.状态码
302重定向
html:浏览器显示效果
xml:存储数据,配置文件
1.基本语法规范
2.约束文件:用别人的框架,去配资文件要遵循一定的规则
有两种:.dtd和.xsd
数据
页面
Servlet
表示层:UI用户界面(控制台,Windows,Web)
业务逻辑层:处理特定业务需求:中间层,实际商业项目最复杂的是业务
数据访问层:执行数据库CRUD
uuid:可以按照特定的算法,生成一个不重复的32位
的字符串,算上-是36位
数据库里:(有是有,但是最终用java来做)
java
MD5加密,做了一个转换,核心方法是diget()
下面是CommomUtils里
uid主键
自动增长
业务主键 学号 学员代码-系代号-入学年份-班级编号-01
三个方法
按规范建立test类
dao层直接操作数据库
登录,注册判断没必要返回boolean值,抛个异常就好了,新建一个userexception类
其实没必要打印异常信息,这里是为了方便开发者自己查看,加了个打印
具体逻辑
1.三个异常是平级的,但前两个是用户异常,捕获的是dao异常,不会捕获到用户异常,最终都抛给调用者来处理
2.或者在dao层直接抛系统异常
捕获抛的对应的异常,抛出自定义异常
3.或者test测试:最上层的调用者(跟service是同层的)来处理异常(测试,获取异常信息)
在spring框架里非受查异常最简单,受查异常有一套处理方法,平时还是写非受查异常
最复杂的是业务,要求越多,逻辑越复杂;业务要去公司去了解,根据客户的需求来分析业务,没做过这个行业根本不懂其中的细节怎么用业务实现,首先要去理解客户的专业名词,搞清楚客户行业的流程
如借书,每个业务都需要操作好几张表
如论坛发帖
1.数据验证
前端验证:js或jQuery,验证插件
οnsubmit=“boolean”
不要相信前端,传过来的信息是有问题的,用户可以绕过前端
前端也要有验证,可以减轻服务器的压力,例如格式,长度,一致等这些验证
内网部署可以不写后端,都是自己人,没人攻击网络
后端验证:Servlet使用Java代码验证
确保执行业务之前,数据有效
部署到外网的必须有后端
ajax验证:提高用户体验,还是靠
js(XmlHttpRequest)请求服务器
2.注册验证
同步请求流程
验证格式用正则表达式:
没有通过
通过验证
回显一个验证的信息到注册页面
数据回显:通过el
添加数据回显
验证码,要给一个流,传图片用字节流,传文本一般用字符流
流程
得到验证码文本,要先调用getImage,才有getText
切换图片验证码
changeImage():
调用登录
totalPage的set可以不要,get是算出来的
jsp页面
页面控制
页码数量的控制,把begin和end加入pageBean,也不需要get和set,写一个方法进行赋值
这个注意要放在最后,要用到前面的值
把totalpage改成getTotalPage()
关键拿到dao层的条件,在外面拿到一个sql
方法为进行sql的拼接
因为不知道有多少个参数,用数组也不好用,所以用集合转成数组来传参
添加params内模糊查询等条件
在params里面再添加两个参数,limit后面的
画红线的写错了,要接收一个新的sql,不然语句没有变,还是原来的
封装成一个完整的pageBean,跟前面分页是一样的
jsp页面:加一个条件表单
cookie被禁用,session还想用怎么办
session是个键值对,key为sessionId,value为嵌套一个map来存储数据
使用get网页传值的方法来解决cookie被禁用(百度做法)
拼接参数要把pageIndex过滤掉,因为这个值是页码请求发送的
jsp组合条件查询form回显,其他正常回显即可,select复杂点,要每条加个条件判断来回显上条记录
地址的写法改一下
不能写在el里面
写在外面
一开始index请求的地址不请求查全部,那个方法可以删掉,直接请求这个组合条件查询即可
地址显示
删除的流程思路:
具体:
页面请求地址
写一个confirm方法的确认框
更新的思路流程:(这个是跳转到list,一般改完都是回到第一页)
不能直接跳转jsp页面,请求转发会带一个cid参数,有一个模糊查询,转发过去是没有页面的,所以用重定向,忘记这个cid
具体:
新建一个更新页面,新建一个新update的方法
异步的JS和XML
异步:无刷新,局部刷新
JS:使用JS(XmlHttpRequest不同的浏览器里面对象不一样)发送异步请求,响应数据使用JS解析
前端用ajax验证后,也要通过后端验证
XML:响应数据的格式(浏览器都支持XML解析,不同内核的浏览器提供解析XML的API不同,现在都使用JSON
js的初始化
jquery的底层是js,jquery里面可以写js代码
js里也可以写jquery
$(function)和window.onload只能写一次,前者加载更快,因为是把所有代码加载完就执行,后者把代码加载完,代码中的资源也要全部加载完毕才会执行。
上面是下面的缩写,$是jquery的缩写
代码可以混用,但是对象不能混用,各有自己的一套系统,DOM对象只能使用DOM的方法来操作,jQuery同理。
上面不对,不同对象方法不能混用
对象转换:jQuery中的$(),是工厂函数,任何对象经过工厂加工都会变成jQuery对象;一般没人这么转,直接用jQuery
转换为jquery对象,再用dom的方法,就是错误的,如下图
jquery转换成DOM对象
JSON对象:map–key,value,(对象–属性,属性值)
用this
dom对象
只有一个参数肯定是下标,根据下标找数据,两个参数才有对象,dom是下标,不要只看名字
JSON串
把JSON串转成JSON对象
把JSON串转成JSON对象
对象转串
jsonlib
fastjson 阿里
gson 谷歌
jackson SpringMVC框架底层用的就是Jackson
响应一个JSON字符串:底层都是以流的形式传输
接收和解析:
1.最原始的方法,参数很多,很多细节可以控制,其他方法调用的都是它
2.post方法,串转换为对象
不想写转换,post里再写一个参数用来转换成对象
3.集合解析
4.get
模拟异常
jsp、servlet动态资源,tomcat能解析
html、js、css静态资源,tomcat不能解析
1.jsp里可以用jstl写
js里不可以这么写
js中window中location属性
2.封装servlet路径(前后端不完全分离,当前服务器下,不是绝对路径)
3.统一json格式的响应数据
4.封装解析方法
5.页码
整个表单条件提交
每次请求清空数据
把页码藏在表单里一起提交
传页数
6.编辑和删除
删除
cid那一行绑定一个id叫cid
编辑
获取参数值
把查询绑定一个servlet请求,做更新
不想写判断
r:已经把/项目名加好了,直接加地址名
封装了一个BaseServlet的父类,用反射解决了判断和重定向,学会使用
以后改成这样来写,要把private改成public,且返回类型为String,同步返回跳转地址,f:转发和r:重定向;默认f:,可以不写,但一般加上代码可读性提高;异步返回null。
同步
异步