javaweb
html
超文本标记语言
最基本的html
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
特殊字符

常用标签
font 字体标签
- color属性 用于修改颜色
- face属性 用于修改字体
- size属性 用于修改文本大小
h1~h6 标题标签
- h1最大 h6最小
- align属性 是对其属性
- left左对齐
- center居中
- right 右对其
a 超链接
- href 属性设置链接的地址
- target 属性设置跳转方式
- _self 当前页面
- _blank 打开新的页面进行跳转
ul 列表标签 无序列表
ol 有序列表
li 是列表项
dl 自定义列表
dt 自定义列表表头
dd 自定义列表项
img 图像标签
- src 设置图片的路径
- width 设置图片的宽度
- height 设置图片的高度
- border 设置图片边框的大小
- alt 设置图片不能显示时,显示的文字
table 表格标签
- border 设置表格边框
- width 设置表格宽度
- height 设置表格高度
- align 设置表格相对页面的对齐方式
- cellspacing 设置单元格间距
- tr 设置行标签
- th 设置表头标签
- td 是单元格标签
- align 设置单元格文本对其方式
- b 是加粗标签
- colspan 设置跨列
- rowspan 设置夸行
ifarme 标签可以在一个html页面上打开一个小窗口去加载另一个页面
form 表单表签
- input输入框
- type指定类型 text文本 password密码 radio单选 checkbox复选 reset重置 submit提交 buttun按钮 file文件上传 hidden隐藏
select下拉框 option下拉框选种项
textarea 多行文本
rows 显示的行高
cols 显示几个字符宽度
- action提交到服务器的地址
- method 提交方式 默认是get post
表单
表单提交时数据没有发送给服务器的三种情况:
- 表单项没有name 属性值
- 单选、复选(下拉列表中的option标签)都需要设置value属性,以便发送给服务器
- 表单项不在提交的form标签中
路径问题
. 代表当前路径
.. 代表上一级路径
div span p
div默认独占一行
span 他得长度是封装数据的长度
p 默认会在段落的上方或下方各空出一行(如果以存在空行就不在空了)
CSS
CSS选择器
id选择器
#id{}
class选择器
.class{}
组合选择器
选择器1,选择器2,选择器n{}
常用样式
color : red
设置颜色 颜色可以写颜色名 如:black red 等,也可以写rgb值和16机制值表示如果写16进制则必须写#
width:19px
设置宽度 可以写像素值px 也可以写半分比 20%
height:20%
高度可以写像素值 19px 也可以百分比值 20%
background-color:#0f2d4c
背景颜色
color:#FF0000
字体颜色红色
font-size:20px
字体大小
border:1px solid red
边框 1个像素的实现 红色
margin-left:auto
margin-right:auto
div居中
text-align:center
文本居中
text-decoration:neon
超链接去下划线
table{
border:1px solid black
border-collapse:collapse 将边框合并
}
td,th{
border:1px solid black
}
表格细线
ul{
list-style:none
}
列表去修饰
javascript
变量
- 数值型 number
- 字符串类型 string
- 对象类型 object
- 布尔类型 boolean
- 函数类型 function
特殊值 - undefined 未定义,所有js变量未赋值初始值得时候,默认都是undefined
- null 空值
- NaN 非数字 非数值
在js语言中,所有的变量,都可以作为一个boolean类型的变量去使用 0 、null、undefined、"" 都是false
数组
var 数组名 = []
var 数组名= [1,2,343]
函数
function 函数名(){}
var 函数名 = function(){}
在java中函数允许重载,但是在js中函数的重载会直接覆盖掉上一次的定义
函数的 arguments 隐形参数(只在function函数内部)
就是在function函数中不需要定义,但是却可以直接用来获取所有参数的变量。我们管它叫隐形参数。隐形参数特别像java基础的可变长参数一样。
可变长参数其实他就是一个数组。
<script type="text/javascript">
function fun(a){
console.log(arguments.length)
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
fun(1,"aaa",true)
</script>
JS中自定义对象
Object形式的自定义对象:
var 变量名 = new Object(); 对象实例
变量名.属性名 = 值
{}花括号形式的自定义对象:
var 变量名 = {
属性名:值
函数名:function(){}
}
js中的事件
- onload 加载完成事件 页面加载完成之后,常用语做页面js代码初始化操作
- onclick 点击事件 常用语按钮的点击响应
- onblur 失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法
- onchange 内容发生改变事件 常见用于下拉列表和输入框内容发生改变后的操作
- onsubnit 表单提交 常见于表单提交前,验证所有变淡项是否合法
事件的注册又分为静态注册和动态注册
什么事事件注册?
其实就是告诉浏览器,当前事件响应后要执行那些代码,叫事件注册或事件绑定。
静态注册事件
通过html标签的事件属性直接赋予事件响应后的代码,这就方式我们叫静态注册
动态注册
是指先通过js代码得到标签的dom对象,然后再通过dom对象.事件名=function(){}这种形式赋予事件响应后的代码。
DOM模型
大白话来讲,就是把文档中的标签,属性,文本,转换成为对象来管理。
Document对象的理解
- Document 它管理了所有的Html文档内容
- Document 他是一种数结构的文档,有层级关系
- Document 它让我们把所有的标签 都对象化
- 我们通过document访问所有的标签对象。
Tomcat
Servlet
javaServlet适合平台无关的服务器端组件,他运行在Servlet容器中。Servlet容器负责Servlet和客户端通信以及调用Servlet方法,Servlet和客户端的通信采用“请求/响应”的模式。
------------恢复内容开始------------
# html 超文本标记语言 ## 最基本的html ```html常用标签
font 字体标签
- color属性 用于修改颜色
- face属性 用于修改字体
- size属性 用于修改文本大小
h1~h6 标题标签
- h1最大 h6最小
- align属性 是对其属性
- left左对齐
- center居中
- right 右对其
a 超链接
- href 属性设置链接的地址
- target 属性设置跳转方式
- _self 当前页面
- _blank 打开新的页面进行跳转
ul 列表标签 无序列表
ol 有序列表
li 是列表项
dl 自定义列表
dt 自定义列表表头
dd 自定义列表项
img 图像标签
- src 设置图片的路径
- width 设置图片的宽度
- height 设置图片的高度
- border 设置图片边框的大小
- alt 设置图片不能显示时,显示的文字
table 表格标签
- border 设置表格边框
- width 设置表格宽度
- height 设置表格高度
- align 设置表格相对页面的对齐方式
- cellspacing 设置单元格间距
- tr 设置行标签
- th 设置表头标签
- td 是单元格标签
- align 设置单元格文本对其方式
- b 是加粗标签
- colspan 设置跨列
- rowspan 设置夸行
ifarme 标签可以在一个html页面上打开一个小窗口去加载另一个页面
form 表单表签
- input输入框
- type指定类型 text文本 password密码 radio单选 checkbox复选 reset重置 submit提交 buttun按钮 file文件上传 hidden隐藏
select下拉框 option下拉框选种项
textarea 多行文本
rows 显示的行高
cols 显示几个字符宽度
- action提交到服务器的地址
- method 提交方式 默认是get post
表单
表单提交时数据没有发送给服务器的三种情况:
- 表单项没有name 属性值
- 单选、复选(下拉列表中的option标签)都需要设置value属性,以便发送给服务器
- 表单项不在提交的form标签中
路径问题
. 代表当前路径
.. 代表上一级路径
div span p
div默认独占一行
span 他得长度是封装数据的长度
p 默认会在段落的上方或下方各空出一行(如果以存在空行就不在空了)
CSS
CSS选择器
id选择器
#id{}
class选择器
.class{}
组合选择器
选择器1,选择器2,选择器n{}
常用样式
color : red
设置颜色 颜色可以写颜色名 如:black red 等,也可以写rgb值和16机制值表示如果写16进制则必须写#
width:19px
设置宽度 可以写像素值px 也可以写半分比 20%
height:20%
高度可以写像素值 19px 也可以百分比值 20%
background-color:#0f2d4c
背景颜色
color:#FF0000
字体颜色红色
font-size:20px
字体大小
border:1px solid red
边框 1个像素的实现 红色
margin-left:auto
margin-right:auto
div居中
text-align:center
文本居中
text-decoration:neon
超链接去下划线
table{
border:1px solid black
border-collapse:collapse 将边框合并
}
td,th{
border:1px solid black
}
表格细线
ul{
list-style:none
}
列表去修饰
javascript
变量
- 数值型 number
- 字符串类型 string
- 对象类型 object
- 布尔类型 boolean
- 函数类型 function
特殊值 - undefined 未定义,所有js变量未赋值初始值得时候,默认都是undefined
- null 空值
- NaN 非数字 非数值
在js语言中,所有的变量,都可以作为一个boolean类型的变量去使用 0 、null、undefined、"" 都是false
数组
var 数组名 = []
var 数组名= [1,2,343]
函数
function 函数名(){}
var 函数名 = function(){}
在java中函数允许重载,但是在js中函数的重载会直接覆盖掉上一次的定义
函数的 arguments 隐形参数(只在function函数内部)
就是在function函数中不需要定义,但是却可以直接用来获取所有参数的变量。我们管它叫隐形参数。隐形参数特别像java基础的可变长参数一样。
可变长参数其实他就是一个数组。
<script type="text/javascript">
function fun(a){
console.log(arguments.length)
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
fun(1,"aaa",true)
</script>
JS中自定义对象
Object形式的自定义对象:
var 变量名 = new Object(); 对象实例
变量名.属性名 = 值
{}花括号形式的自定义对象:
var 变量名 = {
属性名:值
函数名:function(){}
}
js中的事件
- onload 加载完成事件 页面加载完成之后,常用语做页面js代码初始化操作
- onclick 点击事件 常用语按钮的点击响应
- onblur 失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法
- onchange 内容发生改变事件 常见用于下拉列表和输入框内容发生改变后的操作
- onsubnit 表单提交 常见于表单提交前,验证所有变淡项是否合法
事件的注册又分为静态注册和动态注册
什么事事件注册?
其实就是告诉浏览器,当前事件响应后要执行那些代码,叫事件注册或事件绑定。
静态注册事件
通过html标签的事件属性直接赋予事件响应后的代码,这就方式我们叫静态注册
动态注册
是指先通过js代码得到标签的dom对象,然后再通过dom对象.事件名=function(){}这种形式赋予事件响应后的代码。
DOM模型
大白话来讲,就是把文档中的标签,属性,文本,转换成为对象来管理。
Document对象的理解
- Document 它管理了所有的Html文档内容
- Document 他是一种数结构的文档,有层级关系
- Document 它让我们把所有的标签 都对象化
- 我们通过document访问所有的标签对象。
Tomcat
Servlet
javaServlet适合平台无关的服务器端组件,他运行在Servlet容器中。Servlet容器负责Servlet和客户端通信以及调用Servlet方法,Servlet和客户端的通信采用“请求/响应”的模式。
------------恢复内容开始------------
# html 超文本标记语言 ## 最基本的html ```html常用标签
font 字体标签
- color属性 用于修改颜色
- face属性 用于修改字体
- size属性 用于修改文本大小
h1~h6 标题标签
- h1最大 h6最小
- align属性 是对其属性
- left左对齐
- center居中
- right 右对其
a 超链接
- href 属性设置链接的地址
- target 属性设置跳转方式
- _self 当前页面
- _blank 打开新的页面进行跳转
ul 列表标签 无序列表
ol 有序列表
li 是列表项
dl 自定义列表
dt 自定义列表表头
dd 自定义列表项
img 图像标签
- src 设置图片的路径
- width 设置图片的宽度
- height 设置图片的高度
- border 设置图片边框的大小
- alt 设置图片不能显示时,显示的文字
table 表格标签
- border 设置表格边框
- width 设置表格宽度
- height 设置表格高度
- align 设置表格相对页面的对齐方式
- cellspacing 设置单元格间距
- tr 设置行标签
- th 设置表头标签
- td 是单元格标签
- align 设置单元格文本对其方式
- b 是加粗标签
- colspan 设置跨列
- rowspan 设置夸行
ifarme 标签可以在一个html页面上打开一个小窗口去加载另一个页面
form 表单表签
- input输入框
- type指定类型 text文本 password密码 radio单选 checkbox复选 reset重置 submit提交 buttun按钮 file文件上传 hidden隐藏
select下拉框 option下拉框选种项
textarea 多行文本
rows 显示的行高
cols 显示几个字符宽度
- action提交到服务器的地址
- method 提交方式 默认是get post
表单
表单提交时数据没有发送给服务器的三种情况:
- 表单项没有name 属性值
- 单选、复选(下拉列表中的option标签)都需要设置value属性,以便发送给服务器
- 表单项不在提交的form标签中
路径问题
. 代表当前路径
.. 代表上一级路径
div span p
div默认独占一行
span 他得长度是封装数据的长度
p 默认会在段落的上方或下方各空出一行(如果以存在空行就不在空了)
CSS
CSS选择器
id选择器
#id{}
class选择器
.class{}
组合选择器
选择器1,选择器2,选择器n{}
常用样式
color : red
设置颜色 颜色可以写颜色名 如:black red 等,也可以写rgb值和16机制值表示如果写16进制则必须写#
width:19px
设置宽度 可以写像素值px 也可以写半分比 20%
height:20%
高度可以写像素值 19px 也可以百分比值 20%
background-color:#0f2d4c
背景颜色
color:#FF0000
字体颜色红色
font-size:20px
字体大小
border:1px solid red
边框 1个像素的实现 红色
margin-left:auto
margin-right:auto
div居中
text-align:center
文本居中
text-decoration:neon
超链接去下划线
table{
border:1px solid black
border-collapse:collapse 将边框合并
}
td,th{
border:1px solid black
}
表格细线
ul{
list-style:none
}
列表去修饰
javascript
变量
- 数值型 number
- 字符串类型 string
- 对象类型 object
- 布尔类型 boolean
- 函数类型 function
特殊值 - undefined 未定义,所有js变量未赋值初始值得时候,默认都是undefined
- null 空值
- NaN 非数字 非数值
在js语言中,所有的变量,都可以作为一个boolean类型的变量去使用 0 、null、undefined、"" 都是false
数组
var 数组名 = []
var 数组名= [1,2,343]
函数
function 函数名(){}
var 函数名 = function(){}
在java中函数允许重载,但是在js中函数的重载会直接覆盖掉上一次的定义
函数的 arguments 隐形参数(只在function函数内部)
就是在function函数中不需要定义,但是却可以直接用来获取所有参数的变量。我们管它叫隐形参数。隐形参数特别像java基础的可变长参数一样。
可变长参数其实他就是一个数组。
<script type="text/javascript">
function fun(a){
console.log(arguments.length)
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
fun(1,"aaa",true)
</script>
JS中自定义对象
Object形式的自定义对象:
var 变量名 = new Object(); 对象实例
变量名.属性名 = 值
{}花括号形式的自定义对象:
var 变量名 = {
属性名:值
函数名:function(){}
}
js中的事件
- onload 加载完成事件 页面加载完成之后,常用语做页面js代码初始化操作
- onclick 点击事件 常用语按钮的点击响应
- onblur 失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法
- onchange 内容发生改变事件 常见用于下拉列表和输入框内容发生改变后的操作
- onsubnit 表单提交 常见于表单提交前,验证所有变淡项是否合法
事件的注册又分为静态注册和动态注册
什么事事件注册?
其实就是告诉浏览器,当前事件响应后要执行那些代码,叫事件注册或事件绑定。
静态注册事件
通过html标签的事件属性直接赋予事件响应后的代码,这就方式我们叫静态注册
动态注册
是指先通过js代码得到标签的dom对象,然后再通过dom对象.事件名=function(){}这种形式赋予事件响应后的代码。
DOM模型
大白话来讲,就是把文档中的标签,属性,文本,转换成为对象来管理。
Document对象的理解
- Document 它管理了所有的Html文档内容
- Document 他是一种数结构的文档,有层级关系
- Document 它让我们把所有的标签 都对象化
- 我们通过document访问所有的标签对象。
Document对象中的方法
document.getElementById(elementId) 通过标签的id属性查找
document.getElementsByName(elementName) 通过标签的name查找标签dom对象
document.getElementsByTagName(tagname) 通过标签名查找dom对象
document.createElement(tagName) 通过给定的标签名创建一个标签对象
appendChild(childnode) 可以添加一个子节点
childNodes 获取当前节点的所有子节点
firstChild 获取当前节点的第一个子节点
lastChild 获取当前节点的最后一个子节点
parentNode 获取当前节点的父节点
nextSibling 获取当前节的下一个节点
previousSibling 获取当前节点的上一个节点
className 用于获取点前节点的class属性值
innerHTML 获取或者设置其实标签和结束标签中的内容
JQuery
$是JQuery的核心函数,能完整jquery的很多功能。$()就是调用$这个函数
- 传入页面参数为函数时 表示页面加载完成之后 相当于 window.onload = function(){}
- 传入参数为HTML字符串时 $("#id属性值") id选择器 根据id查找 $("标签名")标签选择器 根据指定的标签名 查找对应的标签对象 $(".class属性值") 类选择器 可以根据class属性查询标签对象
- 传入参数为 dom对象时 会把这个dom对象转换为jquery对象
jquery对象和dom对象的区分
DOM对象
- 通过getElemntByid()查找出来的标签对象时Dom对象
- 通过getElemntsByName()查找出来的标签对象时Dom对象
- 通过getElemntByTagName()查找出来的标签对象时Dom对象
- 通过createElement() 创建出来的标签对象时Dom对象
JQuery对象的 - 通过Jquery提供的api创建的对象,是jquery对象
- 通过jquery包装的Dom对象也是Jquery对象
- 通过jquery提供的api查询到的对象也是jquery对象
jquery对象是dom对象的数组 + jquery提供的一些列功能函数
jquery对象和Dom对象使用区别
jquery对象不能使用dom对象的属性和方法
dom 对象也不能使用jquery对象的属性和方法
jquery对象和dom对象互相转换
Dom对象转换为jquery对象
$(DOM对象)
jquery对象转换为dom对象
jquery对象[下标]取出响应的Dom对象
jquery选择器
-
id id选择器,根据id查找标签对象
- .class 类算选择器 根据class查找标签对象
- element 原则器 根据标签名查找标签对象
-
- 选择所有标签对象
- selector1,srlrctor2 组合选择器
层级选择器
- ancestor descendant 后代选择器:在给定的祖先元素下匹配所有后后代元素
- parent > child 子元素原则器 在给定的父元素下匹配所有的子元素
- prev+next 相邻元素原则器 匹配所有紧接在prev缘故后next元素
- prev~sibings 之后的兄弟元素选择器 匹配prev元素之后的所有siblings元素
过滤选择器
- :first 获取第一个元素
- :last 获取最后一个元素
- :not(Selector) 去除所有与给定选择器匹配的元素
- :even 匹配所有索引值为偶数的元素,从0开始计数
- :odd 匹配所有所索引值为奇数的元素,从0开始计数
- :eq(index) 匹配一个给定索引值得元素
- :get(index) 匹配所有大于给定索引值得元素
- :it(index) 匹配所小于给定索引值的元素
- :header 匹配如 h1 h2之类的标题元素
- :animated 匹配所有正在执行动画效果的元素
内容过滤
:contains(text) 匹配包含给定文本的元素
:empty() 匹配所有不包含子元素或者文本的空元素
:parent 匹配含有子元素或者文本的元素
:has(selector) 匹配含有选择器所匹配的元素
Tomcat
Dom4j
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book sn="SN1232321">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>林平之</author>
</book>
<book sn="SN1232321">
<name>葵花宝典</name>
<price>19.9</price>
<author>东方不败</author>
</book>
</books>
public class TestClass {
public static void getDocument() throws Exception {
// 创建Document对象,我们需要先创建一个 SAXReader对象
SAXReader reader = new SAXReader();
Document document = reader.read(TestClass.class.getClassLoader().getResourceAsStream("books.xml"));
System.out.println(document.hashCode());
}
public static void getDocument1() throws Exception {
// 创建Document对象,我们需要先创建一个 SAXReader对象
SAXReader reader = new SAXReader();
Document document = reader.read(TestClass.class.getClassLoader().getResourceAsStream("books.xml"));
// 获取到根元素
Element root = document.getRootElement();
// 通过根元素获得 book 标签对象
List<Element> books = root.elements("book");
for (Element book:books){
Element name = book.element("name");
Element price = book.element("price");
Element author = book.element("author");
System.out.println("书名:"+name.getText()+" 价格: "+price.getText()+" 作者: "+author.getText());
}
System.out.println(root);
}
public static void main(String[] args) throws Exception {
getDocument1();
}
}

Servlet
javaServlet是和平台无关的服务器端组件,他运行在Servlet容器中。Servlet容器负责Servlet和客户端通信以及调用Servlet方法,Servlet和客户端的通信采用“请求/响应”的模式。
javaweb三大组件 Servlet程序、Filter过滤器、Listener监听器
Servlet生命周期
- 执行Servlet构造器方法
- 执行init初始化方法
- 执行service方法
- 执行destory销毁方法

ServletConfig 类
Servletconfig是servlet程序的配置信息类。servlet程序servletconfig对象都是由tomcat创建,我们负责使用而已。servlet程序默认是第一次访问的时候创建,servletconfig是每一个servlet程序创建时,就对应创建一个Servletconfig对象。
ServletConfig的三大作用
- 可以获取servlet程序的别名 servlet-name的值
- 获取初始化参数 init-param
- 获取ServletContext对象
ServletContext 类
- ServletContext 是一个接口他表示Servlet上下文对象
- 一个web工程只有一个ServletContext对象实例
- ServletContext对象是一个域对象
- ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。
什么事域对象?
域对象,是可以像Map一样存取数据的对象,叫域对象。这里的域指的存取数据操作范围整个web工程。
ServletContext 类的四个作用
- 获取web.xml中配置的上下文参数context-param
- 获取当前工程路径
- 获取工程部署后再服务器硬盘上的绝对路径
- 像Map一样存取数据
HttpServletRequest类
每次只要有请求进入tomcat服务器,tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法中给我们使用。
常用方法
getRequestURT() 获取请求资源路径
getRequestURL() 获取请求的统一资源定位符(绝对路径)
getRemoteHost() 获取客户端的IP地址
getHeader()获取请求偷
getParamter()获取请求参数
getParamterValues() 获取请求的参数(多个值得时候使用)
getMethod()获取请求的方式 get或者post
setAttribute(k,v)设置域数据
getAttribute(key)获取域数据
getRequestDispatcher()获取请求转发对象
乱码问题
doGet请求中文乱码
String name = req.getParamter("username");
name = new String(name.getBytes("iso-8859-1"),"UTF-8")
doPost请求中文乱码
// 设置请求体的字符集为 UTF-8, 从而解决 post 请求的中文乱码问题
req.setCharacterEncoding("UTF-8");
System.out.println("-------------doPost------------");
// 获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
System.out.println("用户名: " + username);
System.out.println("密码: " + password);
System.out.println("兴趣爱好: " + Arrays.asList(hobby));
请求转发

// 给材料 盖一个章, 并传递到 Servlet2(柜台 2) 去查看
req.setAttribute("key1","柜台 1 的章");
// 请求转发必须要以斜杠打头, / 斜杠表示地址为: http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
// RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");
requestDispatcher.forward(req,resp);
base标签的作用
<!--base 标签设置页面相对路径工作时参照的地址
href 属性就是参数的地址值
-->
<base href="http://localhost:8080/07_servlet/a/b/">
HttpServletRespon类
HttpServletResponse 类和 HttpServletRequest 类一样。 每次请求进来, Tomcat 服务器都会创建一个 Response 对象传
递给 Servlet 程序去使用。 HttpServletRequest 表示请求过来的信息, HttpServletResponse 表示所有响应的信息,
我们如果需要设置返回给客户端的信息, 都可以通过 HttpServletResponse 对象来进行设置
两个输出流
getOutputStream() 字节流 常用于下载
getWriter() 常用于回传字符串
请求重定向

// 设置响应状态码 302 , 表示重定向, (已搬迁)
resp.setStatus(302);
// 设置响应头, 说明 新的地址在哪里
resp.setHeader("Location", "http://localhost:8080");
// 第二种冲重定向
resp.sendRedirect("http://localhost:8080");
HTTP协议




jsp
EL表达式&JSTL标签库
文件的上传于下载
文件上传
<!DOCTYPE html>
<html lang="zh_CH">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/filetest" method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<input type="submit" value="上传">
</form>
</body>
</html>
package luziyang.top.servlet.fileupload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class FileController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.先判断上传的诗数据是否是多段(只有是多段数据时,才是文件上传)
if(ServletFileUpload.isMultipartContent(req)){
// 创建 FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
// 创建用于解析上传数据工具类的ServletFileUpload类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
try {
List<FileItem> list = servletFileUpload.parseRequest(req);
for (FileItem fileItem:list){
System.out.println(fileItem.getSize());
if (fileItem.isFormField()){
// 普通表单
System.out.println("普通表单");
System.out.println("表单的name属性值: "+fileItem.getFieldName());
}else {
// 上传文件
System.out.println("上传文件");
System.out.println("表单的name属性值: "+fileItem.getFieldName());
File parent = new File("D:\\File_Load");
if (!parent.exists()){
parent.mkdir();
}
File dir = new File(parent,fileItem.getName());
fileItem.write(dir);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
文件下载
Cookie和Session
Filter过滤器
ThreadLocal
ThreadLocal的作用,他可以解决多线程的数据安全问题。
ThreadLocal他可以给当前线程关联一个数据(可以是变量,可以是对象,也可以是数组集合)
ThreadLocal特点:
- ThreadLocal可以给当前线程关联一个数据(它可以像Map一样存取数据,key是当前线程)
- 每一个ThreadLocal对象,只能为当前线程关联一个数据,如果要为当前线程关联多个数据,就需要使用多个ThreadLocal对象
- 每个ThreadLocal对象实例定义的时候一般都是static类型
- ThreadLocal中保存数据在线程销毁后,会有JVM虚拟自动释放。
JSON 和 ajax
json
json对象和字符串对象的相互转换
JSON.stringify(json) 把一个json对象转换成json字符串
JSON.parse(jsonString) 把一个json字符串转换成json对象

浙公网安备 33010602011771号