软件151 韩闯 1531610115
2016年12月23日
List集合特征:
1.存取数据有顺序
2.可以出现重复值
List的四个实现类(子类)
1.ArrayList 线程不同步 查询速度最快
2.LinkedList 线程不同步 增删速度最快
3.Vector 线程同步 又称为向量 先进先出
4.Stack 线程同步 栈 后进先出
线程不同步 处理速度快,但是不安全
线程同步 处理速度慢,但是安全
2016年12月27日
JavaEE 和javaSE不同步
Enumeration 枚举对象 对集合当中的数据元素进行遍历
Map 是对一组具有 键值对 映像关系的数据进行管理的集合
HashTable
HashMap
TreeMap
Properties 本地资源处理类
2017年2月6日
最常用的建模方法:
1.生命周期法
阶段:
1)需求分析: 找对象(需求)
用户的要求(需求)可分为性能的要求,环境/技术的要求,功能上的要求.
性能要求指标:时间,空间,安全系数
环境/技术要求: 环境就是指软件(操作系统,IDE(集成开发工具),中间件,数据库服务器)和硬件
功能的要求:功能可分为3类:传统功能,创意功能,特色功能
2)系统设计: 找类
类分为:
1)边界类:描述属性的类型
用例图中有多少个用例就有多少个边界类
2)实体类:描述对象的类型
用例图中有多少个用户就有多少个实体类
3)控制类:使用对象的类型
业务模型生成用例图(UML统一建模语言,图符式语言)
业务模型中心思想 以用户的视角出发,来认定系统当中所有的东西
1)找用户
用户:存在与系统外部,和系统直接进行交互,用户可以是人也可以是外部系统
2)找用例
用例:存在与系统内部,类似于系统当中的功能
3)建立用户与用例关系
2.原型法
适合于对时间要求非常苛刻的软件,在开发的过程中不断地与用户进行交流来完善系统当中所有的功能
多线程
操作系统中每一个应用程序都是一个进程
进程与进程之间不共享资源\数据
一个进程下的多个线程是共享数据的
线程是进程的最小单位
Runnable 是为了进程之间实现”多实现”.
多线程的生命周期:
1)创建
2)就绪
1.可运行 线程对象.start()
2.运行 run()
3)阻塞
Sleep()
4)销毁
2017年2月8日
泛型(genric):
即类型占位符,帮助开发人员解决类型任意化的问题
在设计程序时,不知道所要操作数据类型的情况下使用泛型
优点:
1.在编译期检查类型安全
2.所有强制类型转换都是隐式的,使得开发者对于形参的类型可以在不预知的情况下进行
*泛型中无法使用基本数据类型
*泛型通配符: <?>
* extends 在泛型中是一个范围,表示只能是该类或该类的子类.
Arrays 是对数组进行操作的类
Collections是对Map,Set,List进行操作的类
对日期时间封装的类:
1.java.lang.System
2.Java.util.Date
Java.sql.Date(对日期封装的类)
Java.sql.Time(对时间封装的类)
Java.sql.TimeStamp(时间戳,是对日期和时间封装的类)
3.Java.util.Calendar
TimeZone 时间区
GregorianCalendar 格林尼治时间
4.java.text.DateFormat
Java.text.SimpleDateFormat
2017年2月9日
JDBC:java database connectivity 即java数据库连接.提供了一种与平台无关的用于执行SQL语句的标准的java API,可以实现多种关系型数据库的统一操作,它由一组由java语言编写的类和接口组成
数据库驱动程序: 即数据库厂商按照sun公司的JDBC所指定的标准来给出的代码的具体实现细节的应用程序
JDBC驱动方式:
1.JDBC-ODBC桥驱动
2.JDBC本地驱动 又称JDBC直连
3.JDBC网络驱动
JDBC驱动操作的步骤
1.加载数据库驱动程序(java.sql.DriverManger)
a) 下载驱动程序
b) 装载至IDE的类路径下
c) 实例化驱动程序的对象
作用:通知应用程序加载的是哪一款数据库产品
2.连接数据库(获得数据源)(java.sql.Connection)
DriverManger.getConnection(连接地址,用户名,密码);
GetConnection常见异常:
1.TCP/IP异常 解决方法:SQL配置程序,将TCP/IP更改为启用状态,或打开TCP/IP服务,将该服务当中的TCP端口全部设置为1433
2.底层协议异常socketException
连接地址是由数据库厂商提供的 构成为:主协议(JDBC),子协议,IP,端口,数据库名称
Oracle地址:
Jdbc:oracle:thin:@localhost:1521:数据库名称
MySql地址
Jdbc:mysql://localhost:3306/数据库名称
SQLServer 地址
Jdbc:sqlserver://localhost:1433;DataBaseName=数据库名称
3.向数据库中发送SQL语句
Statement s=Connection.createStatement();
executeUpdate(“更新语句”)
ExecuteQuery(“查询语句”)
ResultSet 结果集,对查询语句返回出来的集合进行封装的接口
4.处理结果集
5.释放资源
Statement.close();
Connection.close();
配置文件中键对象提供给外部使用者,而值对象是系统需要获得的
SQLBean
JTabel 表格
2017年2月13日
Statement 在进行大量查询时速度较慢 运行期绑定 程序在运行时效率较慢
PreparedStatement 预编译对象\参数化处理对象(该对象是对数据库服务器发送指令的,和java语言所支持的编译期绑定没有冲突)\ 编译期绑定 , 创建时向数据库服务器当中发送SQL指令,目的是通知数据库服务器来编译SQL语句,SQL语句当中如果存在某字段对应的值,则有占位符”?”代替,这样就不会影响数据库服务器来编译SQL语句
PreparedStatement使用步骤:
1.创建预编译对象 c.preparedStatement() //编译
2.向对象传参 p.setXXX(index,value)
3.执行SQL语句 p.executeXXX(); //无需传参
preparedStatement的优点:
1.运行速度快
2.字段的值之间可以进行参数化传递
CallableStatement 调用存储过程
1.创建对象
2.传参(与preparedStatement雷同)
事务
保持逻辑数据一致性与可恢复性,必不可少的工具
事务提交的方式
1.自动提交
2.显示提交
3.隐式提交(不推荐使用)
事务的类型
1.JDBC事务
只能在同一个数据库下面
流程:
1)开始事务,首先应将提交状态由默认提交转换为显示提交 c.setAutoCommit(false);
2)执行SQL语句
3)产生异常则进行事务回滚 c.rollback();
4)没有异常提交事务 c.commit();
5)将提交状态转换为默认提交 c.setAutoCommit(true);
2.JTA事务
多个数据库之间
3.容器事务
一般情况下事务与存储过程一起使用
数据库/数据结构/字符串处理/日期时间
Final 修饰类的时候禁止继承,修饰方法禁止多态,修饰变量禁止修改
Switch 后可接byte,short,int,char,枚举类型
2017年2月17日
桌面程序:
所有的数据都保存在本地的计算机当中,运行效率高,但是存储容量有限制,数据不能共享
网络编程:
计算机的网络是由一组通信信道相互连接的机器组成.我们把这些机器称之为主机和路由器
主机:
指运行应用程序的计算机
路由器:
将信息从一个通信信道传递或转发到另一个信息信道
信息:
指字节序列也称之为报文(有用的数据的集合)
通信信道:
将字节序列从一个主机传递到另一个主机实现的手段(有线电缆,以太网)
协议:
相当于通讯的程序间达成的一种约定
TCP/IP协议
1.IP协议(Internet Protocol) 互联网协议
统一了数据传递的格式,将各种类型数据转换成字节序列即打包;指定接收方的地址(主机地址)
会存在 错发/漏发/顺序颠倒的问题,从而导致数据不安全
解决了格式和传输的问题
2.TCP协议(Transmission Control Protocol)传输控制协议
有自动寻址(应用程序的具体地址即端口)功能,不能独立存在,必须和IP协议一起使用,面向连接的协议,发送方和接收方必须同时在线才能发送数据
3.UDP协议(User DataGram Protocol) 用户数据报协议
也有自动寻址功能,非面向连接的协议,允许接收方不在线也能进行数据传输,当接收方上线之后,再去接收数据
Java.net包
对IP地址的支持:
InetAddress类
IP地址的两种形式
IPV4:该地址长32位能区分大约四十个亿的独立地址
IPV6:该地址长128位能容纳更多的地址
Socket 客户端套接字对象
ServerSocket 服务器套接字对象
网络应用程序的会话流程:
1.创建服务器对象
Ss=New ServerSocket(int port)
2.服务器处于阻塞状态等待客户端的连接
Socket s=ss.accept();(是在服务器中的代码)
3.创建客户端套接字对象
Socket s=new Socket(String IP,int port);
4.向服务器发送请求
OutputStream os=s.getOutputStream();
Os.write();
5.服务器接收请求
6.处理请求并生成应答结果
7.服务器返回应答结果
Ss.getOutPunStream
8.客户端接收应答
S.getInputStream()
9.客户端处理应答
10.客户端/服务器 释放资源
分布式运算:部署在不同结点的组件相互通讯而完成的一次运算任务
分布式运算的三层结构:
1.表示层(客户端)
2.逻辑层(服务器端)
3.数据层(数据库)
这三层将部署于不用物理地址的结点上
所遵循的数据传输协议为TCP/IP协议
2017年2月20日
*前端产生的任何不正常的现象都由前端自己去解决;
*能由客户端解决的问题不建议提交给服务器解决(服务器接收到的数据必须是精确的,其目的是减轻网络服务器的压力);
对象化的需求分析叫做业务模型,
业务模型
1.找用户群体
2.找用例(功能)
3.建立关系
工程:
工程结构
每张表要有一个与其业务无关的id字段
租车管理:
1.车辆信息管理
2.司机信息管理
3.订单信息管理
4.调度管理
用户:
1.车辆信息管理员
a) 录入车辆信息
b) 维护车辆信息
c) 查看车辆信息
d) 登录
i. 用户名
1. 前三个字段是部门代码
2. 第四第五字段是权限代码
3. 后面有相应的ID
ii. 密码
2.司机信息管理员a)
设计实体类
汽车 陈宣超
司机 徐娜
调度 李泰然
订单 薛志鹏
建表
设计边界类
JComboBox 下拉列表
JFileChooser 文件选择对话框
项目总结:
服务器端分为两类程序
1.管理程序
处理服务器并发问题,利用线程池
2.服务程序
TDD原理及应用
TDD:测试驱动开发,是敏捷开发中的一项核心实践和技术.
TDD 以测试用例为指导,要求开发人员开发出符合测试用例的程序,然后通过测试用例对程序进行验收,也叫做”测试现行的开发”;
测试用例:指定的集合,通过这个集合来验证是否满足用户的需求,集合中有三个元素:测试输入/执行条件/预期结果.
测试驱动开发的基本过程:
1.明确当前要完成的功能(可以记录成一个TODO列表)
2.快速完成针对此功能的测试用例编写
3.测试不通过(红色)
4.编写对应的功能代码
5.测试通过(绿色)
6.对代码进行重构,并保证测试通过
7.循环完成所有功能的开发
概括整个过程 红色-绿色-重构的过程
测试报告内容列表
1.项目简介:罗列需要介绍的内容.如项目简称的解释,项目背景
2.测试内容:测试模块的大纲
3.测试环境:测试环境的描述,包括客户端和网络环境
4.测试的数据:bug数,解决数,遗留数
5.罗列比较重要的bug并做简短的描述
6.测试数据分析,对于整个过程测试的一个分析,得出结论
7.遗留问题:对软件遗留问题有详细说明
前四位数字是城市
公司名称 四位
部门名称 四位
权限 四位
1000 司机
1001 汽车
1002 订单
1003 调度
用户ID 四位
2017年3月20日
HTTP传输协议: 超文本传输协议,是一种基于请求和应答的协议
XHTML 可扩展的超文本标记语言
HTML 超文本标记语言 用来设计网页即UI界面
XML 可扩展标记语言 可以解决标签自定义问题和标签任意嵌套问题即由最简单的语法格式来表达极其复杂的数据 作用:用来存储和传输数据
XML 特点
1)简单易用的标记语言
2)严格的格式
3)数据处理逻辑与显示逻辑分离
XML + java 语言可以实现云 XML可以跨语言,java可以跨平台
Java语言当中提供的对XML文档进行解析(读写)的两个组件是
1.DOM
2.SAX
第三方插件:
JDOM DOM4J
什么是协议?
类似于一个群体达成的共识
IP,TCP,HTTP 协议分别解决了什么问题?
2017年3月21日
JavaEE 企业级开发版本
服务器中所有的数据及信息都是以文档的格式来存储--标记文档
服务器端保存的文档分为静态页面和动态页面两种,静态页面是纯HTML,而动态页面是经过人机交互才能生成的页面(通过程序生成的页面),JavaEE当中实现动态页面的两个组件是Servlet 和 jsp,所以我们也可以将这两个组件称之为是web服务器的组件
HTML: 超文本标记语言,用来制定网页,被保存在服务器
浏览器: 作用是通过URL向服务器请求资源,服务器将资源返回给浏览器以后,浏览器负责显示网页
URL : 统一资源定位符
URL格式:
协议://IP:端口/文件夹/文件名称
http 超文本传输协议
Web 全称world wide web 缩写www,中文称万维网.web是一种体系结构,通过它可以访问遍布于因特网主机上的链接文档,符合以上特征的应用程序称之为web应用程序
Servlet的工作流程:
1)客户端向服务器发送请求
2)Web服务器将请求发送给Servlet
3)Servlet容器会产生一个servlet实例
4)Servlet构建一个响应并将其传给web服务器
5)web服务器将响应结果返回给客户端
在web应用程序当中对容器组件进行配置和管理的文档叫做web.xml
Servlet接口定义了servlet生命周期的相关方法
ServletConfig 接口是对定制于用户的信息被servlet所使用时建议通过servletConfig进行配置
GenericServlet :将servlet 和servletConfig整合在一起
HttpServlet:支持http传输协议的servlet类
Servlet的生命周期:
1)初始化 init() 由容器回调的方法;
2)Service() servlet程序执行入口,一个用来接收请求处理应答的方法,该方法也是由容器回调的方法;
3)Destroy() 当Servlet对象被销毁时由容器回调的方法
什么是Servlet
是一个java 类,可以将其理解为是嵌入了HTML代码的java类,作用是生成动态网页(通过流来生成)
手工部署一个web工程
1)创建一个文件夹,作为工程名称
2)在工程文件里面创建WEB-INF文件夹
3)打开WEB-INF文件夹,在里面创建classes和lib文件夹和web.xml文档,classes里面保存的是java类,lib里面保存的是资源库,例如:j2ee.jar;
4)编写Servlet并配置web.xml
5)将该文件夹存储到Tomcat服务器根目录下的webapp里面
6)启动服务器,启动方式--打开bin文件夹里startup.bat文件
7)打开浏览器,输入URL
2017年3月22日
基于B/S结构下的网络应用程序所使用的服务器叫做web服务器
Web服务器:
1.管理程序
2.服务程序:根据用户发送的请求生成动态页面,返回给客户端
部署web工程时,搭建环境之前必须要的工具:jdk;支持servlet容器的web服务器(eg:Tomcat);集成开发工具
Eclipse:
集成了JDK,可以集成web服务器,可以集成浏览器
HttpServlet:
Http请求:HttpServletRequest 组成:
1.请求方法get/delete/options/post/put/trace
2.请求头
3.请求正文
2017年3月23日
请求方法:
Get(): 查询
Post():更新
Delete():删除
Put(): 增加
Options:
Trace:
Get和Post之间的区别:
Get请求方法对应的是查询的功能,采用的是比较安全的幂等运算,请求数据通过url来传递,数据访问不安全,类似于具有保密信息的数据需要通过post来传递,get参数的最大容量为1024字节,request对象可以调用getQueryString()来获得请求参数;
Post对应的是更新的功能,提交数据时通过表单元素来提交,安全系数比较高,请求数据容量没有限制,如果因为容量过大导致异常,并不是Post本身的事情,而是服务器对请求数据的容量做了限制,request对象可以调用getParameter()等一系列方法获得请求参数
采集表单数据
Map
SQLBean
表单对用户来讲是表单,对系统来讲就是数据库当中的表
2017年3月25日
应答包括:
1.应答方法
2.应答头
3.应答正文
Selvlet 生命周期:
Init()
Service()
Destroy()
Web容器装在web组件的流程(时序图):
1)当web容器加载时,首先会寻找Servlet容器(即web.xml文件)
2)创建Servlet类型的对象(构造方法)
3)Servlet容器调用init()方法对Servlet当中的配置信息进行初始化(由ServletConfig进行初始化)
4)容器创建HttpServletRequest和HttpServletResponse对象,Servlet容器回调service()方法
5)销毁Servlet对象,由容器回调Destroy()方法;
ServletConfig:对配置信息进行管理的对象
如何配置?
配置信息都是定制与用户的信息
<servlet>
<description></description>
<display-name>MyConfigDemo</display-name>
<servlet-name>MyConfigDemo</servlet-name>
<servlet-class>jq.servlet.MyConfigDemo</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>lx</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
1.表的设计
2.登录功能的实现(自动登录 调通即可)
3.商品搜索(分页算法)
3月30日
系统中集成的数据在ServletContext中进行配置
WEB工程中定制于Servlet用户的资源在ServletConfig中进行配置
配置数据信息时使用ServletContext、ServletConfig
系统集成的共享对象 ServletContext
】
在两个不同的Servlet类中进行数据传递的时候可以将数据转发给servletDispatcher:类进行处理
servletDispatcher:
include():包含。在JSP中被经常使用
forward():转发。可以将当前的请求以及请求当中的信息转发给另外一个Servlet进行处理。
注意:
1.RequestDispatcher可以将当前Servlet中的求情信息转发个另外一个Servlet进行处理,从而实现了多个Servlet之间信息传递的功能,但无论转发给多少个Serrvlet,请求和应答让然是浏览器发送过来的请求和应答。
2.RequestDispatcher在进行转发时地址栏中的URL不会发生改变。
3.RequestDispatcher可以实现Servlet和Servlet间的跳转,也可以实现Servlet和HTMl之间的跳转。
4.静态网页和动态网页之间的跳转request.reDirect();
转发和重定向之间的区别:重定向会改变地址栏中的url,代表的时新一轮的请求和应答,而转发不会改变地址栏的URL代表的时原来的请求和应答。
5.如果请求不发生改变,使用requestDispatcher来实现。(如果不需要会话跟踪,可以使用重定向完成页面的跳转,如果需要会话跟踪,必须选择requestDispatcher中的forward()方法进行转发)
3月31日
会话跟踪:会话时访问特定web站点时用户执行的一组活动,记住不同会话过程成为会话跟踪。
方式:
1.隐藏表单字段:
缺点:代码不重用,生产力下降。程序中产生大量的冗余数据。可以在浏览器中直接看到源码,数据不安全。
2.Cookie的使用:cookies为一下小文本文件,目的用于Web服务器记录用户信息。Cookies用键值对的形式存储,是实现会话跟踪的方法之一。
运行原理:
a.浏览器向服务器发送请求时,如果需要进行会话跟踪,可以在服务器端创建一个Cookies对象,用来存储会话跟踪信息
b.服务器向客户端发送响应时,可以以应答的形式返回给客户端
c.客户端接受了带有cookies类型对象的应答以后可以将cookieis下载到本机当中对cookies进行存储。
d.当客户端再次请求服务器是,cookies对象会以请求的方式提交给服务器,使得服务器可以轻松的获得上一次会话的记录。
注意:
(1)在应用addcookie()函数创建Cookie之前不能有任何HTML输出
(2)浏览器创建一个cookie后,对于每一个针对这个网站的请求,都会在Header中带着这个cookie,不过对于其他网站的Cookie请求时绝对不会跟着发送的,而且浏览器会这样一直发送,知道Coolie到期为止
(3)使用CooKie的限制,如果cookie不设定过期时间,name它的生命周期为浏览器会话的期间只要关闭浏览器,cookie就会消失,这种Cookie被称为会话Cookie,一般不保存在硬盘上,而是保存在内存当中,
(4)服务器可以利用Cookie找出计算机名,ip地址或计算机的其他资料,多以存在不安全等因素。所以有些浏览器是禁止Cookie的写入的,遇到这种情况可以使用Session
3.URL的重写:所谓URL重写就是get请求参数的应用,当服务器响应浏览器的上一次请求时将某些信息以超链接的方式响应给浏览器,超链接中包含请求信息。
4.HttpSession会话管理
HttpSession hs=new request.getSession();
如果之前服务器没有创建Session对象,则返回为null
HttpSession hs=new request.getSession(true);
如果之前服务器没有创建Session对象,则创建一个新的Session对象
Session的使用:
Hs.setAttribute(String key,Object object);
Hs.getAttribute(String key);
Cookiet与Session之间的区别:
1.Cookie的数据是保存在客户端、Session的数据是保存在服务器
2.Cookie不安全
3.Session会在一定的时间内保存在服务器上,当访问增多是,会占用服务器的性能
4.单个Cookie保存的数据不能超过4k。很多浏览器都限制一个站点最多保存20个Cookie
5.Cookie保存的时文本,Session保存的是对象
Session对象的销毁:
服务器关闭的时候有可能销毁Session
Web工程被重新装载的时候有肯能销毁Session
setMaxInactiveInterval设置Session对象的存活时间
配置web.xml文件
<session-config>
<session-timeout>30</session-timeout>
</session-config>
电商平台任务:
1.注册登录
2.自动登录
4月6日
JavaEE架构
客户端
Web服务器(支持Servlet容器的服务器)
容器管理的共享对象:
HttpServletRequest 、ServltContext、Session、pageContext
共享范围:一次会话、整个项目运行期间、通过程序控制存活时间、单个页面(jsp)
Servlet过滤器
作用:在Servlet容器处理请求之前可以改写request对象当中的信息以及在Servlet生成应答以后没有返回个客户端之前可以改写response信息。
特点:
使用过滤器的情况:
1.针对所有的Servlet,产品经理想了解从请求到响应之间的运行性能(性能测量)
2.针对某些特定的页面,客户希望只有特定的用户来访问(用户验证)
3.出于安全性能的考虑用户输入的字符必须进行过滤并替换成无害字符(字符校验、转换)
4.某些页面输出内容太多、希望压缩后再发送给浏览器或服务器(压缩)