前端基础
1 HTML
超文本标记语言,最新版本是HTML5,常见版本是HTML4.01
标签说明
<!DOCTYPE>:说明HTML使用版本和标准
<html></html>:说明是一个html文档
<head><head>:头部信息
<body><body>:主体标记
<textarea><textarea>:多行文本标记
注释
<!-- -->
2 CSS
层叠样式表,用于控制网页样式,并允许将样式信息和网页内容分离的标记语言。
2.1 好处
1.美化网页
2.提高代码复用率
3.实现结构与样式相分离
2.2引入方式
1.行内样式:写在标签内部的样式
标签内使用style属性,在其内部书写样式
color:字体颜色
2.内部样式:写在html文件内的样式
在head标签内使用style标签
选择器{
样式名:属性值;}
3.外部样式
a 新建css文件
b 让css文件与html文件关联,使用<link />
c 在css样式中书写样式语句
内部样式优先级与外部样式相等。谁后写以谁为主,即谁离标签近以谁为主
优先级:行内样式 > 内部样式 = 外部样式
2.3 选择器
1.通用选择器
* 可以选择到所有元素
项目中比较普遍的样式都可以在此内部写出,不常用的样式尽量不要在此使用
2.元素选择器:直接以标签的名字作为选择器使用
3.类选择器 class
a.在标签内使用class属性,给标签命名一个名字className
b.使用 .className的方式,作为选择器,选中该标签
注意:class 是可以重复命名的
元素名.className 限定所有使用此className的标签,只有此类标签可以使用
一个标签可以使用多个class 使用空格隔开即可
4.id选择器:主要在js中使用id
a.在标签内使用id属性,命名idName
b.在样式中使用#idName的方式,作为选择器
id不能重复命名,主要在js中使用,但如果只是在css中,是可以重复显示效果
优先级:id>class>元素>*
3 JavaScript-Web动态脚本语言
Web动态脚本语言,嵌入网页中,给网页添加动态功能。简称JS语言,现在的标准是ES6
3.1 HTML DOM树
把HTML各节点做成树模型
document对象表示整个页面
获取指定元素的两种方法
1 通过id属性获取元素
document.getElementById(“id名”)
2 通过name属性获取元素
name属性可能相同,返回一个数组,使用数组下标获取指定元素
document.getElementByName(“name名”)[0]
3.2 JS的引入
1 内嵌式
在head部,使用<script></script>引入
<script type=”text/javascript”>js代码</script>
2 外链式
当js代码比较复杂或js代码需要在多处使用,可用外链式。
使用<script></script>,增加src加入js文件路径
<script type=”text/javascript src=”js文件路径”></script>
3.3 数据类型
类型 | 含义 | 说明 |
Number | 数值型 | 不区分整型和浮点型,不要引号括起来 |
String | 字符型 | 用单引或双引括起来 |
Boolean | 布尔型 | true、false两种值 |
Object | 对象型 | 一组键值对集合 |
Null | 空类型 | 没有值 |
Undefined | 未定义类型 | 变量被创建但未赋值 |
3.4 变量
JS是弱语言,在声明变量时不用指定变量类型
使用var声明变量
var num=13
3.5 方法
方法名唯一,区分大小写。
使用function声明方法
function fname(参1,参2){语句
return 表达式}
常用方法
alert():弹出警示对话框
3.6 常用事件
JS使用事件驱动,响应用户操作。
类型 | 事件 | 说明 |
鼠标 | onclick() | 鼠标单击 |
表单 | onblur() | 失去焦点 |
onchange() | 失去焦点且元素改变 | |
onfocus() | 获得焦点 | |
onreset() | 表单被重置 | |
onsubmit() | 表单被提交 | |
页面 | onlodad() | 页面加载完成 |
3.7 常用对象
Windows对象:浏览器窗口,用于获取窗口大小、位置和设置定时器。
Date对象:日期和时间对象,使用时要new,提供get和set方法
var myDate=new Date()
String对象:字符串对象,提供对字符串处理的方法
3.8 ES6高级语法
let:提供了块作用域
变量作用域范围更小,控制更加细粒度,更加节省资源
let x = 10;
const:常量,不能修改,不能再次赋值。
const P = 3.14;
arrow function:箭头函数,新语法形式,较难理解
var es6Fun = () => "es6箭头函数无参"
通信基础
1 XML传输格式
统一的数据传递格式,解决不同语言之间数据传递格式不兼容。
特点:标记成对出现,标记可嵌套,可自定义标记
1.1 HTML和的XML区别
1)HTML用来显示数据,XML用来传递数据
2)HTML不区分大小写,XML严格区分大小写
3)HTML中空格自动过滤,XML空格不会自动删除
4)HTML标记是预定义的,XML标记可以自定义
1.2 XML声明
XML文档声明位于第一行
<?xml 版本 编码 文档独立性>
<?xml version=”1.0” encoding=”UTF-8” standalone”yes”?>
1.3 XML元素定义
<城市>贵阳</城市>
1.4 XML元素属性定义
属性是对元素的进一步说明
<售价 单位=”元”>23</售价>
1.5 XML约束语言-DTD
对XML标签约束,早期出现。
1 DTD文件引入
内嵌式
<?xml version=”1.0” encoding=”UTF-8” standalone”yes”?>
<!DOCTYPE 根元素 [DTD语句]>
外链式
<!DOCTYPE 根元素 SYSTEM “DTD文件路径”>
2 DTD元素定义
<!ELEMENT 元素名称 元素内容>
1.6 XML约束语言-Schema
Schema采用XML语法格式,比DTD更好理解。
Schema和XML的合法性检测机制相同
Schema比DTD支持更多数据类型,约束能力比DTD更强
引入:通过“xsi:schemaLocation”声明
元素定义
<xs:element name=”元素名称” type=”数据类型”>
2 HTTP传输协议
超文本传输协议,解决客户端和服务端数据传输。
HTTP请求消息包括:请求行、请求头、实体
HTTP响应消息包括:响应行、响应头、实体
请求行:位于第一行,有3部分:请求方式、资源路径、HTTP版本
GET index.html HTTP/1.1
2.1 常用请求方法
1)get请求:直接在浏览器地址输入url
?问号后为参数,参数间用&隔开
https://www.baidu.com/?source=baidu
2)post请求:以实体传输内容
post比get更安全,post传输数据大小无限制
3)put请求:修改数据
2.2 常用状态码
状态码 | 说明 |
202 | 请求成功 |
302 | 重定向错误 |
304 | 客户端缓存版本是最新的 |
404 | 请求地址错误 |
500 | 服务器错误 |
Servlet-请求与响应
1 Servlet基础
1 Servlet是指java中Servlet抽象类及其实现类
2 Servlet是用来处理客户端请求,并返回响应
1.1特点:
1 方便:提供大量工具用来处理http请求
2 跨平台:Servlet是java类,也有java的跨平台性
3 灵活可扩展:因为是java类,有java继承性
1.2 Servlet抽象类
抽象方法
init():初始化
service():响应用户请求
destroy():释放资源
geServletConfig():获取初始化配置信息
getServletInfo():获取Servlet信息
1.3 Servlet的实现类HttpServlet
常用方法
doGet():处理get请求
doPost():处理post请求
doPut():处理doPut请求
1.4 Servlet的生命周期
1 初始化阶段:调用init()方法
2 运行阶段:调用service()方法,处理请求,返回响应
3 销毁阶段:调用destroy(),释放资源
2 请求对象-HttpServletRequest
封装Http请求,包含:
获取请求行的方法
获取请求头的方法
获取请求体的方法
3 响应对象-HttpServletResponse
封装响应信息,包含:
发送状态码的方法
发送响应头的方法
发送响应体的方法
4 请求重定向
当一个Servlet无法处理请求,通过改变请求路径,指向另一个Servlet。
重定向方法一
调用HttpServletResponse中的,sendRedirect()方法,返回302响应码。
重定向方法二:
创建RequestDispatcher对象,调用forward()方法或include()方法
forward():转发请求;include():包含当前Servlet响应和转发后的响应
5 Filter过滤器
1 对调用Srvlet过程进行拦截,实现特殊功能
2 请求Servlet前,经过过滤器,进行预处理
3 响应客户端前,经过过滤器,处理后在响应
4 Filter是servlet.Filter的一个实现类
5 可以有多个Filter
6 多个Filter对同一个请求拦截,会形成Filter链(FilterChain对象),调用FilChain的doFilter()方法可对请求放行
常用方法
init():初始化
doFilter():过滤处理代码
destroy():销毁并释放资源
Filter过滤器事例
1 使用过滤器,对请求和响应进行统一编码设置,实现全站统一编码。
6 Servlet的Listener监听器
监听器:对事件发生做监听并处理。如鼠标点击,键盘按下
Servlet监听器:
1 实现HttpSessionListener、ServletRequestListener等Java特殊类
2 对HttpSession和ServletRequest等8类Java域对象的创建、修改和销毁过程进行监听
会话技术:Cookie和Session
会话技术:服务器跟踪用户信息的技术
1 Cookie
将会话数据保存在用户的浏览器中。
服务器向客户端发送数据时,会在HTTP响应头字段中增加Set-Cookie字段。
构造方法:Cookie类有且仅有一个构造方法
public Cookie(String name,String value)
常用方法:
getName():返回Cookie名称
getValue():返回Cookie值
setValue(String value):为Cookie设置一个新值
SetMaxAge(int expiry):设置Cookie在用户浏览器保持的有效秒数
2 Session
1 当会话数据较多时,将会话数据保存在服务端
2 服务端保存Session,客户端浏览器保存id。通过id找到Session
3 Session也使用Cookie技术,即浏览器保存id
4 如果用户禁用Cookie,使用URL重写机制(将jsessionid做键,标识id做值,把参数附加到请求URL中)
创建Session
public HttpSession getSession(boolean create):判断是否创建新的Session对象
public HttpSession getSession()
常用方法
getId():返回Session标识id
idNew():判断Session是否是新创建的
setAttribite(String name Object value):添加一个Session的值
getAttribite():获取一个Session的值
removeAttribite(String name):删除指定名称的值
Session实列
1 将商品信息保存到Sesion中,实现购物车功能
2 将用户名和密码保存到Sessin中,判断用户是否登录,实现用户登录功能。
JSP-动态网页开发技术
建立在Servlet规范上的动态网页开发技术
1 HTML代码和Java代码共存
2 HTML实现网页静态内容显示,Java代码实现网页动态内容显示
3 文件扩展名是.jsp
4 与HTMl页面的区别是:JSP页面第一行多出一句<page>指令
5 JSP是在原有的HTMl基础上添加具有Java特点的代码(JSP的语法元素)
1 特点
1 跨平台:使用Java语言,可以跨平台
2 组件重用:使用JavaBean封装业务代码,可以重用
3 预编译:JSP页面代码会预编译,再次访问不会重新编译,节省资源
2 JSP运行原理
1 发出请求,访问JSP
2 将jsp文件转换成java源文件(.java)
3 将java源文件编译成字节码文件(.class),一个字节码文件就是一个Servlet
4 初始化Servlet,执行jspInit()方法,常驻内存中
5 执行jspService()方法处理请求,一个请求创建一个线程,使用多线程
6 如果修改Jsp,重新编译,取代内存的Servlet
7 由于系统资源不足等原因,调用jspDestroy()方法,释放资源
8 请求处理完成,返回HTML格式的响应消息
3 脚本元素
嵌套在<%和%>中的Java代码
JSP Scriptlets
一段Java代码
<% java代码 %>
JSP 声明语句
声明变量和方法
<%! 定义变量和方法 %>
JSP 表达式
将程序数据输出到客户端
<%= 表达式 %>
4 注释
<%-- 注释 --%>
5 JSP指令
page指令
对页面信息进行描述
<%@ page 属性名=“属性值” %>
include指令
静态的引入一个文件
<%@ include file=”文件路径” %>
6 JSP隐式对象
在JSP页面中,有些对象要频繁使用,JPS提供9个隐式对象,它们是默认创建(隐式)的。
对象 | 说明 |
out | 用于用户页面输出 |
request | 得到请求信息 |
response | 响应信息 |
config | 服务器配置 |
session | 保存用户信息 |
application | 所有用户的共享信息 |
page | 当前页面转换后的Servlet类实例 |
pageContext | JSP页面容器,提供方法获取其他8个隐式对象 |
exception | 用来处理异常 |
7 JSP动作元素
控制JSP,执行常用的JSP页面动作,实现多行Java代码实现的效果。
1 <jsp:include>动作元素
把其他页面的输出内容插入当前JSP中
<jsp:include page=”文件相对路径” flush=”是否刷新”>
include指令和<jsp:include>的区别
1 include指令引入文件遵循jsp规范,要与当前jsp页面合并,编译成一个Servlet
2 <jsp:include>引入的文件是一个实列,要能独立运行
3 include指令文件在编译时包含,<jsp:include>引入文件在运行时包含
4 <jsp:include>被引入的页面不能改变响应码或设置响应头。include则可以。
2 <jsp:forward>动作元素
将当前请求转发到其他Web资源
<jsp:forward page=”相对路径”
8 JSP开发模型
采用JSP+Servlet+JavaBean。事实上就是MVC模型。
Model:JavaBean View:JSP Controller:Servlet
El表达式和JSTl标准标签库
1 JavaBean
1 Java中一个可以重复使用的软件组件,本质是一个java类
2 必须具有一个公共的、无参构造方法,java会默认生成
3 必须提供公共的get()方法和set()方法
目的:对需要重复使用的数据和功能进行封装,提高复用性。
BeanUtils
动态访问JavaBean属性的工具。
常用方法
static getProperty():获取bean属性
static setProperty():设置指定的属性值
static populate():根据指定名称,为bean赋值
2 El表达式
简化jsp页面的书写,是一种简单的数据访问语言。语法如下:
${表达式}
1 EL中的标识符
1 不能以数字开头
2 不能使用EL中的保留字
3 不能是EL隐式对象
4 不能包含特殊字符
2 EL中的变量
EL的变量不用事先声明,就可以直接使用
${product}
3 EL中的运算符
点运算符(.)
用于访问JSP页面中某些对象的属性
${user.name}
方括号运算符 ([])
1 与点运算符功能相同,但当属性名有特殊字符(-或?等)时只能使用方括号运算符。
2 点运算符有时可以和方括号运算符互换,${user.name}等价于${user[“name”]}
比较运算符
为避免与jsp标签冲突,EL通常使用以下比较运算符
如果运算符后是数字,比较符和数字之间要有一个空格
<(it):${1it 2}
>(gt):${2gt 1}
<=(le):${1le 2}
>=(ge):${2ge 1}
empty运算符
判断对象或变量是否为空
${empty var}
4 EL中隐式对象
EL中有11个隐式对象,如pageContext、Cookie
3 JSTl标准标签库
JSP支持自定义标签,JSTL是统一的标准标签库。
JSTL由五部分构成:
Core:通用操作标签,前缀c
l18N:国际化标签,前缀fmt
SQL:数据标签,前缀sql
XML:XML文档标签库,前缀x
Functions:方法标签库,前缀fn
常用标签
标签 | 说明 |
<c:out> | 向页面输出一段文本信息 |
<c:if> | if条件判断 |
<c:choose> | if-else条件判断 |
<c:forEach> | for循环 |
<c:url> | 构造URL |
<c:param> | 向url中附件参数 |
JDBC-Java数据库连接
一套执行SQL语句的Java API,可对数据库中的数据操作。
要求不同的数据库厂商按照统一的规范提供数据库驱动。
1 Driver接口
所有JDBC驱动必须实现的接口,专门给数据库厂商使用
2 DriverManager类
用于加载JDBC驱动并创建连接。
常用方法:
static registerDriver(Driver driver):向DriverManager中注册JDBC驱动
static getConnection(String url,String user,String pwd):建立连接,返回Connection对象
3 Connection接口
数据库连接,只有获取Connection对象后才能访问数据。
常用方法
getMetaData():返回表示数据库的元数据的DatabaseMetaData对象
createStatement():创建一个Statement对象并将SQL语句发送到数据库
prepareStatement(String sql):创建一个prepareStatement对象并将参数化的SQL语句发送到数据库
prepareCall(String sql):创建一个CallableStatement对象调用存储过程
4 Statement接口
执行静态sql,返回结果对象
Statement接口的对象通过Connection实例调用cteateStatement()方法获得
执行sql语句方法
execute(String sql):执行各种sql,返回布尔值,是否有结果。查询结果通过Statement的getResultSet()方法获得
executeUpdate(String sql):执行insert、update、delete语句,返回一个int值,表示受该sql语句影响的条数
executeQuery(String sql):执行select,返回一个查询结果的ResultSet对象
5 PreparedStatement接口
1 是Statement的子接口,用于执行预编译的SQL语句。
2 可使用带参数的SQL语句,SQL语句中用占位符“?”代替参数
3 通过setXxx()方法为SQL语句的参数赋值
常用方法:
executeUpdate():更新数据,无返回值
executeQuery():执行查询,返回ResultSet对象
setInt(int para,int x):指定参数,设置int值
setFloat(int para ,float x):指定参数,设置float值
setString(int para,String x):指定参数,设置String值
setDate(int para,Date x):指定参数,设置Date值,是sql.Date而不是util.Date
addBatch():将一组参数添加到批处理中
setCharacterStream(int para,Reader r,int length):输入流写入数据库文本字段
setBinaryStream(int para,inputStream x,int length):二进制输入流写入二进制字段
6 ResultSet接口
用于保存JDBC查询时的结果集。
常用方法
getString(int index):获取字段的String值,index表示字段索引
getString(String name):获取字段的Sring值,name表示字段名
getInt(int index):获取字段的int值,index表示字段索引
getint(String name):获取字段的int值,name表示字段名
getDate(int index):获取字段的Date值,index表示字段索引
getDate(String name)获取字段的Date值,name表示字段名
next():指向下一行
absolute(int row):移动到指定行
afterLast():移动到最后一行之后
beforeFirst():移动到第一行之前
previous():移动到上一行
last():移动到最后一行
7 编写JDBC
1 注册数据库驱动
DriverManger.registerDriver(Driver driver)
或
Class.forName(“DriverName”)
2 通过DriverManger获取数据库连接
Connection conn=DriverManger.getConnection(String url,String user,String pwd)
Mysql的URL写法
jdbc:mysql://127.0.0.1:3306/databasename
3 通过Connection 对象获取Statement对象
①createStatement():创建基本的Statement对象
②prepareStatement():创建预编译的对象
③prepareCall():创建CallableStatement对象,调用存储过程的
Statement stmt=conn.createStatement();
4 使用Statement执行SQL语句,返回结果集
execute()、executeQuery()、executeUpdate()
ResultSet rs=stmt.executeQuery(sql)
5 操作ResultSet结果集
6 关闭结果集、关闭Statement语句,关闭连接、释放资源
rs.close()
stmt.close()
conn.close()
数据库连接池与DBUtils工具
1 数据库连接池
1)频繁创建数据库连接,消耗资源,影响数据库访问效率
2)连接池管理连接,允许程序重复使用现有连接,减少创建和断开次数,提高访问效率
DataSource接口
1)负责与数据库建立连接
2)把实现DataSource接口的类称为数据源
DBCP数据源
tomcat服务器使用的连接池组件
创建连接池的两种方式
1 通过BasicDataSource类直接创建数据源
BasicDataSource是DataSource接口的实现类
2 使用BasicDataSourceFactory工厂类读取配置文件,创建数据源
配置文件:config.properties
C3P0数据源
流行的开源数据库连接池之一。
开源框架Hibernate和Spring都支持该数据源
2 DBUtils工具
对JDBC简单封装,简化JDBC编码工作量
下载地址
http://commons.apache.org/proper/commons-dbutils/index.html
QueryRunner类:简化执行SQL语句。有两个方法
query():查询操作
update():增、删、改
ResultSetHandler接口:处理ResultSet结果集。有三个实现类
BeanHandler:将第一行数据封装到JavaBean中
BeanListHandler:将每一行数据封装到JavaBean中,并放到List
ScalarHander:将某条数据的一列存储成Object对象
文件的上传和下载
文件上传步骤:
1)在Web页面中添加上传输入项
2)在Servlet中读取上传的文件,并保存到本地磁盘、
大多数文件上传是通过表单提交给服务器
1)form标签中,enctype设置为“multipart/form-data”,method设置为“post”
2)使用<input type=”file” name=”myfile”>,必须设置name的值
<form enctype=”multipart/form-data” method=”post”>
<input type=”file” name=”myfile”/>
</form>
开源组件:FileUPload组件通过Servlet来实现文件的上传功能
FileItem接口
封装单个表单字段元素的数据
DiskFileItemFactory类
将每一个文件封装成单独的FileItem
ServletFileUpload类
处理文件上传的核心高级类,使用parseRequest()方法将每一个表单数据封装成一个FileItem对象,然后以列表形式返回