javaweb的复习

笔记来源于尚硅谷的javaWeb 有需要可以直接看b站视频

1.1Html简单介绍

页面由三部分内容组成! 分别是内容(结构)、表现、行为

<!--注释-->
<html> 表示整个 html 页面的开始 
	<head> 头信息 
		<title>标题</title> 标题 
	</head> 
	<body> 	
			body 是页面的主体内容 
	</body> 
</html> 表示整个 html 页面的结束

align 属性是对齐属性 left 左对齐(默认) center 剧中 right 右对齐 
<h1 align="left">标题 1</h1>
_self 表示当前页面(默认值) _blank 表示打开新页面来进行跳转
超链接:<a href="http://localhost:8080 targer="_blank">百度</a>

列表标签: ul 是无序列表。type是可以修改的符号  li是列表项
		<ul>
			<li>刘能</li>
		</ul>
border 设置图片边框大小 alt 设置当指定路径找不到图片时,用来代替显示的文本内容
img标签;<img src="1.jpg" width="200" height="260" border="1" alt="美女找不到"/>

1.2表格标签

<table> 标签是表格标签
	align 设置表格相对于页面的对齐方式
	cellspacing 设置单元格间距
	tr 是行标签 
	th 是表头标签 
	td 是单元格标签 
		align 设置单元格文本对齐方式 
	b 是加粗标签
	colspan 属性设置跨列 rowspan 属性设置跨行
<table align="center" border="1" width="300" height="300" cellspacing="0"> 
	<tr>
		<th colspan="2">1.1</th> 
		<th>1.3</th> 
	</tr> 
	<tr>
		<td>2.1</td> 
		<td>2.2</td> 
		<td>2.3</td> 
	</tr> 
	<tr>
		<td>3.1</td> 
		<td>3.2</td> 
		<td>3.3</td> 
	</tr> 
</table>

超链接在iframe框架打开
<iframe src="3.标题标签.html" width="500" height="400" name="abc"></iframe>
<a href="0-标签语法.html" target="abc">0-标签语法.html</a>

1.3表单form

表单的属性有name才可以发给服务器

input type=text 是文件输入框 value 设置默认显示内容 
input type=password 是密码输入框 value 设置默认显示内容 
input type=radio 是单选框 name 属性可以对其进行分组 checked="checked"表示默认选中
input type=checkbox 是复选框 checked="checked"表示默认选中 
input type=reset 是重置按钮 value 属性修改按钮上的文本 
input type=submit 是提交按钮 value 属性修改按钮上的文本 
input type=button 是按钮 value 属性修改按钮上的文本 
input type=file 是文件上传域 
input type=hidden 是隐藏域 当我们要发送某些信息,而这些信息,不需要用户参与,就可以使用隐藏域(提交的 时候同时发送给服务器)
select 标签是下拉列表框 option 标签是下拉列表框中的选项 selected="selected"设置默认选中 
textarea 表示多行文本输入框 (起始标签和结束标签中的内容是默认值) 
		rows 属性设置可以显示几行的高度 
		cols 属性设置每行可以显示几个字符宽度

设置提交的属性
form 标签是表单标签 <form action="http://localhost:8080" method="post"></form>

		action 属性设置提交的服务器地址 
		method 属性设置提交的方式 GET(默认值)或 POST 

表单提交的时候,数据没有发送给服务器的三种情况:
1、表单项没有 name 属性值
2、单选、复选(下拉列表中的 option 标签)都需要添加 value 属性,以便发送给服务器
3、表单项不在提交的 form 标签中
GET 请求的特点是:
1、浏览器地址栏中的地址是:action 属性[+?+请求参数]
请求参数的格式是:?name=value&name=value
2、不安全
3、它有数据长度的限制
POST 请求的特点是:
1、浏览器地址栏中只有 action 属性值
2、相对于 GET 请求要安全
3、理论上没有数据长度的限制
其他标签:

  		div 标签 默认独占一行 
  		span 标签 它的长度是封装数据的长度 
  		p 段落标签 默认会在段落的上方或下方各空出一行来(如果已有就不再空)

2.1CSS技术概括

<style type="text/css"> 写css样式</style>中定义css代码
css:是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。
在这里插入图片描述
选择器:浏览器根据“选择器”决定受 CSS 样式影响的 HTML 元素(标签)
属性 (property) 是你要改变的样式名,并且每个属性都有一个值。属性和值被冒号分开,并由花括号包围,这样就组成了一个完整的样式声明(declaration),例如:p {color: blue}
**多个声明:**如果要定义不止一个声明,则需要用分号将每个声明分开。虽然最后一条声明的 最后可以不加分号(但尽量在每条声明的末尾都加上分号)
在这里插入图片描述

<!--style 标签专门用来定义 css 样式代码--> 
<style type="text/css"> 
	div{
		border: 1px solid red; 
	}
	span{
		border: 1px solid red; 
	} 
</style>

css 样式写成一个单独的 css 文件,再通过 link 标签引入即可复用
使用 html 的 <link rel="stylesheet" type="text/css" href="./styles.css" /> 标签 导入 css 样 式文件。或者 `导入写好的css文

2.2选择器

1.ID选择器:#id 属性值{ 属性:值; }
2.class 选择器:.class 属性值{ 属性:值; }
3.标签名选择器:标签名{ 属性:值; }

3.1JavaScript的概述

1.使用 script 标签 来书写 JavaScript 代码<script type="text/javascript"> </script>

<script type="text/javascript"> 
	 alert("hello javaScript!"); 
 </script>

2.在scipt标签中src中引入
script 标签可以用来定义 js 代码,也可以用来引入 js 文件 但是,两个功能二选一使用。不能同时使用两个功能<script type="text/javascript" src="1.js"></script>

3.3 JS的使用

在这里插入图片描述
格式:声明var 变量名;或者 var 变量名= 值 ;
比较运算符

在 JavaScript 语言中,所有的变量,都可以做为一个 boolean 类型的变量去使用。0 、null、undefined、””(空串) 都认为是 false;

<script type="text/javascript"> 
	var arr = [true,1]; 
	// javaScript 语言中的数组,只要我们通过数组下标赋值,那么最大的下标值,就会自动的给数组做扩容操作。 
	arr[2] = "abc"; 
	// 数组的遍历 
	for (var i = 0; i < arr.length; i++){ 
		alert(arr[i]); 
	} 
</script>

在这里插入图片描述
在这里插入图片描述
函数的 arguments 隐形参数(只在 function 函数内)

js的对象定义:
	方法一:
		var 变量名 = new Object();
		变量名.属性名 =; // 定义一个属性 
		变量名.函数名 = function(){} // 定义一个函数 
	方法二:
		var 变量名 = { // 空对象 
		属性名:值, // 定义一个属性 
		属性名:值, // 定义一个属性 
		函数名:function(){} // 定义一个函数 
		};

对象的访问:
		 变量名.属性 / 函数名();

3.4 js的事件

onload 加载完成事件: 页面加载完成之后,常用于做页面 js 代码初始化操作
onclick 单击事件: 常用于按钮的点击响应操作。
onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。
onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作
onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法。

事件注册:其实就是告诉浏览器,当事件响应后要执行哪些操作代码,叫事件注册或事件绑定。
静态注册事件:通过 html 标签的事件属性直接赋于事件响应后的代码,这种方式我们叫静态注册。
动态注册事件:是指先通过 js 代码得到标签的 dom 对象,然后再通过 dom 对象.事件名 = function(){} 这种形式赋于事件 响应后的代码,叫动态注册。
动态注册基本步骤:
1、获取标签对象
2、标签对象.事件名 = fucntion(){}

以下以onload为例子(其他时间同理):
需要值得注意的是,动态绑定要在页面加载完成的函数中定义或使用。(window.onload)= function{执行的操作};

<head>
	<script type="text/javascript"> 
		function onclickFun() { 
			alert("静态注册 onclick 事件"); 
		}
		// 动态注册 onclick 事件 
		window.onload = function () { 
			// 1 获取标签对象  document 是 JavaScript 语言提供的一个对象(文档)
			var btnObj = document.getElementById("btn01");  
			// 2 通过标签对象.事件名 = function(){} 
			btnObj.onclick = function () { 
			alert("动态注册的 onclick 事件"); 
			} 
		}
	</script>
</head>
<body> 
	<!--静态注册 onClick 事件--> 
	<button onclick="onclickFun();">静态绑定</button> 
	<button id="btn01">动态绑定</button> 
</body>

3.5 DOM模型

DOM 全称是 Document Object Model 文档对象模型:就是把文档中的标签,属性,文本,转换成为对象来管理。
在这里插入图片描述
以下的三个方法,一定要在页面加载完成之后执行,才能查询到标签对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dom对象的常用方法
getElementsByTagName() 方法,获取当前节点的指定标签名孩子节点
appendChild( oChildNode ) 方法,可以添加一个子节点,oChildNode 是要添加的孩子节点

dom对象的常用属性可读可改

childNodes属性,获取当前节点的所有子节点
firstChild属性,获取当前节点的第一个子节点
lastChild属性,获取当前节点的最后一个子节点
parentNode 属性,获取当前节点的父节点
nextSibling属性,获取当前节点的下一个节点
previousSibling 属性,获取当前节点的上一个节点
className 用于获取或设置标签的class 属性值
innerHTML 属性,表示获取/设置起始标签和结束标签中的内容
innerText 属性,表示获取/设置起始标签和结束标签中的文本

4.jQuery

jQuery,顾名思义,也就是 JavaScript 和查询(Query),它就是辅助 JavaScript 开发的 js 类库,最流行的 JavaScript 库。<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>导包
$()jquery的核心函数$()就是调用$这个函数:
1、传入参数为 [ 函数 ] 时: 表示页面加载完成之后$(funcation(){写代码})。相当于 window.onload = function(){}
2、传入参数为 [ HTML 字符串 ] 时: 会对我们创建这个 html 标签对象
3、传入参数为 [ 选择器字符串 ] 时:

  		$(“#id 属性值”); id 选择器,根据 id 查询标签对象 
  		$(“标签名”); 标签名选择器,根据指定的标签名查询标签对象 
  		$(“.class 属性值”); 类型选择器,可以根据 class 属性查询标签对象

4、传入参数为 [ DOM 对象 ] 时: 会把这个 dom 对象转换为 jQuery 对象

4.1 jquery对象和dom对象的区别

Dom 对象

1.通过 getElementById()查询出来的标签对象是 Dom 对象
2.通过 getElementsByName()查询出来的标签对象是 Dom 对象
3.通过 getElementsByTagName()查询出来的标签对象是 Dom 对象
4.通过 createElement() 方法创建的对象,是 Dom 对象

jQuery对象:是 dom 对象的数组 + jQuery 提供的一系列功能函数

5.通过 JQuery 提供的 API 创建的对象,是 JQuery 对象
6.通过 JQuery 包装的 Dom 对象,也是 JQuery 对象
7.通过 JQuery 提供的 API 查询到的对象,是 JQuery 对象

4.2jquery和dom对象相互转化

在这里插入图片描述

4.3jquery选择器

基本选择器

	#ID 选择器:根据 id 查找标签对象 
	.class 选择器:根据 class 查找标签对象 
	element 选择器:根据标签名查找标签对象 
	* 选择器:表示任意的,所有的元素
	selector1,selector2 组合选择器:合并选择器 1,选择器 2 的结果并返回

层次选择器

	ancestor descendant 后代选择器 :在给定的祖先元素下匹配所有的后代元素 
	parent > child 子元素选择器:在给定的父元素下匹配所有的子元素 
	prev + next 相邻元素选择器:匹配所有紧接在 prev 元素后的 next 元素 
	prev ~ sibings 之后的兄弟元素选择器:匹配 prev 元素之后的所有 siblings 元素

基本过滤器:

	:first 获取第一个元素 
	:last 获取最后个元素 
	:not(selector) 去除所有与给定选择器匹配的元素 
	:even 匹配所有索引值为偶数的元素,从 0 开始计数 
	:odd 匹配所有索引值为奇数的元素,从 0 开始计数
	:eq(index) 匹配一个给定索引值的元素 
	:gt(index) 匹配所有大于给定索引值的元素 
	:lt(index) 匹配所有小于给定索引值的元素 
	:header 匹配如 h1, h2, h3 之类的标题元素 
	:animated 匹配所有正在执行动画效果的元素

内容过滤器:

	:contains(text) 匹配包含给定文本的元素 
	:empty 匹配所有不包含子元素或者文本的空元素 
	:parent 匹配含有子元素或者文本的元素 
	:has(selector) 匹配含有选择器所匹配的元素的元素

属性过滤器:

	[attribute] 匹配包含给定属性的元素。 
	[attribute=value] 匹配给定的属性是某个特定值的元素 
	[attribute!=value] 匹配所有不含有指定的属性,或者属性不等于特定值的元素。 
	[attribute^=value] 匹配给定的属性是以某些值开始的元素 
	[attribute$=value] 匹配给定的属性是以某些值结尾的元素 
	[attribute*=value] 匹配给定的属性是以包含某些值的元素 
	[attrSel1][attrSel2][attrSelN] 复合属性选择器,需要同时满足多个条件时使用。

4.4 表单form的过滤器

	:input 匹配所有 input, textarea, select 和 button 元素 
	:text 匹配所有 文本输入框 
	:password 匹配所有的密码输入框 
	:radio 匹配所有的单选框 
	:checkbox 匹配所有的复选框 
	:submit 匹配所有提交按钮 
	:image 匹配所有 img 标签 
	:reset 匹配所有重置按钮 
	:button 匹配所有 input type=button <button>按钮 
	:file 匹配所有 input type=file 文件上传 
	:hidden 匹配所有不可见元素 
	display:none 或 input type=hidden

例如 $(":checkbox[name='items']").length;

表单对象属性过滤器:

:enabled 匹配所有可用元素
:disabled 匹配所有不可用元素
:checked 匹配所有选中的单选,复选,和下拉列表中选中的 option 标签对象
:selected 匹配所有选中的 option

例如$(":checkbox[name='items']:checked").length

4.5 jQuery元素属性方法

	eq() 获取给定索引的元素 								功能跟 :eq() 一样 
	first() 获取第一个元素 										功能跟 :first 一样 
	last() 获取最后一个元素 									功能跟 :last 一样 
	filter(exp) 留下匹配的元素 
	is(exp) 判断是否匹配给定的选择器,只要有一个匹配就返回,true 
	has(exp) 返回包含有匹配选择器的元素的元素 功能跟 :has 一样 
	not(exp) 删除匹配选择器的元素 						功能跟 :not 一样 
	children(exp) 返回匹配给定选择器的子元素 	功能跟 parent>child 一样 
	find(exp) 返回匹配给定选择器的后代元素 		功能跟 ancestor descendant 一样
	next() 返回当前元素的下一个兄弟元素 			功能跟 prev + next 功能一样 
	nextAll() 返回当前元素后面所有的兄弟元素 	功能跟 prev ~ siblings 功能一样 
	nextUntil() 返回当前元素到指定匹配的元素为止的后面元素 
	parent() 返回父元素 
	prev(exp) 返回当前元素的上一个兄弟元素 
	prevAll() 返回当前元素前面所有的兄弟元素 
	prevUnit(exp) 返回当前元素到指定匹配的元素为止的前面元素 
	siblings(exp) 返回所有兄弟元素 
	add() 把 add 匹配的选择器的元素添加到当前 jquery 对象中

4.6jquery的属性操作

	html() 它可以设置和获取起始标签和结束标签中的内容。 跟 dom 属性 innerHTML 一样。 
	text() 它可以设置和获取起始标签和结束标签中的文本。 跟 dom 属性 innerText 一样。 
	val() 它可以设置和获取表单项的 value 属性值。 跟 dom 属性 value 一样

在这里插入图片描述
在这里插入图片描述


$(function(){
全选的实现:
	$("#checkedAllBtn").click(function () { 
		$(":checkbox").prop("checked",true); 
	});
反选的实现:利用了each()方法	
	$("#checkedRevBtn").click(function () {
		$(":checkbox[name='items']").each(function () { 
		// 在 each 遍历的 function 函数中,有一个 this 对象。这个 this 对象是当前正在遍历到的 dom 对象 
		this.checked = !this.checked; 
		});
});

4.7DOM的增删改

内部插入:
appendTo() a.appendTo(b) 把 a 插入到 b 子元素末尾,成为最后一个子元素
prependTo() a.prependTo(b) 把 a 插到 b 所有子元素前面,成为第一个子元素
外部插入:
insertAfter() a.insertAfter(b) 得到 ba
insertBefore() a.insertBefore(b) 得到 ab
替换:
replaceWith() a.replaceWith(b) 用 b 替换掉 a
replaceAll() a.replaceAll(b) 用 a 替换掉所有 b
删除:
remove() a.remove(); 删除 a 标签
empty() a.empty(); 清空 a 标签里的内容

// 第一个按钮 【选中添加到右边】 
$("button:eq(0)").click(function () { 
	select是标签选择器 :eq(0)选择第一个select元素 option是select的子元素 :seleted是选中状态 appento是添加到 第二个select标签的后面
	$("select:eq(0) option:selected").appendTo($("select:eq(1)")); 
});

this 对象是当前正在响应事件的 dom 对象。理解为当前标签项
var $trObj = $(this).parent().parent(); parent()是找父类
find是寻找标签项的子类 td 是标签名 :first是第一个td标签
var name = $trObj.find("td:first").text(); .text是获取文本消息 可读可写

confirm() 是 JavaScript 语言提供的一个确认提示框函数。你给它传什么,它就提示什么
当用户点击了确定,就返回 true。当用户点击了取消,就返回 false
获取输入框的内容:$("#empName").val();

css样式操作
addClass() 添加样式
removeClass() 删除样式
toggleClass() 有就删除,没有就添加样式。
offset() 获取和设置元素的坐标。
jQuery的动画
在这里插入图片描述

5.xml 标记性语言

在这里插入图片描述
在这里插入图片描述
使用dom4j解析xml文件:

public void readXML() throws DocumentException { 
// 需要分四步操作: 
// 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象 
SAXReader reader = new SAXReader(); 
	Document document = reader.read("src/books.xml"); 
	// 第二步,通过 Document 对象。拿到 XML 的根元素对象 
	Element root = document.getRootElement();  
	// Element.asXML() 它将当前元素转换成为 String 对象 )
	// 第三步,通过根元素对象。获取所有的 book 标签对象 
	// Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合 
	List<Element> books = root.elements("book"); 
	// 第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素, 
	for (Element book : books) { 
		// 拿到 book 下面的 name 元素对象 
		Element nameElement = book.element("name"); 
		// 拿到 book 下面的 price 元素对象 
		Element priceElement = book.element("price"); 
		// 拿到 book 下面的 author 元素对象 
		Element authorElement = book.element("author"); 
		// 再通过 getText() 方法拿到起始标签和结束标签之间的文本内容 
		System.out.println("书名" + nameElement.getText() + " , 价格:" + 	
			priceElement.getText() + ", 作者:" + authorElement.getText()); 
		} 
}

5.2Tomcat服务器

在这里插入图片描述

5. Servlet技术

1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
实现serlet程序:
1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据
3、到 web.xml 中去配置 servlet 程序的访问地址

public class HelloServlet implements Servlet { 
	public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 
		System.out.println("Hello Servlet 被访问了"); 
	} 
}

web.xml的配置
在这里插入图片描述
在这里插入图片描述

5.1继承HttpServlet 实现 Servlet 程序

实现里面的doGet或者是doPost的方法
在这里插入图片描述

5.2 ServletConfig类(配置类)

Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。
Servlet 程序默认是第一次访问的时候创建
ServletConfig每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对象
作用
1、可以获取 Servlet 程序的别名 servlet-name 的值 servletConfig.getServletName()
2、获取初始化参数 init-param (在web.xml的servlet标签下<init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param>
3、获取 ServletContext 对象servletConfig.getServletContext()

5.3 ServletContext 类介绍

1、ServletContext 是一个接口,它表示 Servlet 上下文对象 
2、一个 web 工程,只有一个 ServletContext 对象实例。 
3、ServletContext 对象是一个域对象。 
4、ServletContext 是在 web 工程部署启动的时候创建。在 web工程停止的时候销毁。

在这里插入图片描述
获取的方法 1.getServletConfig().getServletContext();
2.getServletContext();
java的/ / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录
xml的 / http://ip:port/

ServletContext 类作用:
1、获取 web.xml 中配置的上下文参数 context-param context.getInitParameter("username")
2、获取当前的工程路径,格式: /工程路径 context.getRealPath("/")
3、获取工程部署后在服务器硬盘上的绝对路径 context.getRealPath("/xxx")
4、像 Map 一样存取数据

5.4 Http协议

HTTP 协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫 HTTP 协议。 HTTP 协议中的数据又叫报文。
Get请求
1、请求行
(1) 请求的方式 GET
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号 HTTP/1.1
2、请求头
key : value 组成 不同的键值对,表示不同的含义。
在这里插入图片描述
POST 请求
1、请求行
(1) 请求的方式 POST
(2) 请求的资源路径[+?+请求参数]
(3) 请求的协议的版本号 HTTP/1.1
2、请求头
1) key : value 不同的请求头,有不同的含义
空行
3、请求体 ===>>> 就是发送给服务器的数据
在这里插入图片描述

Accept: 表示客户端可以接收的数据类型
Accpet-Languege: 表示客户端可以接收的语言类型
User-Agent:表示客户端浏览器的信息
Host: 表示请求时的服务器 ip 和端口号

GET 请求有哪些:
1、form 标签 method=get
2、a 标签
3、link 标签引入 css
4、Script 标签引入 js 文件
5、img 标签引入图片
6、iframe 引入 html 页面
7、在浏览器地址栏中输入地址后敲回车

POST 请求有哪些: form 标签 method=post
响应的Http协议的格式:
在这里插入图片描述

5.5 HttpServletRequest 类

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。
在这里插入图片描述
解决中文乱码:

doGet:
	String username = req.getParameter("username"); 
	//1 先以 iso8859-1 进行编码 
	//2 再以 utf-8 进行解码 
	username = new String(username.getBytes("iso-8859-1"), "UTF-8");
doPost:
	req.setCharacterEncoding("UTF-8");

请求转发

请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录
在这里插入图片描述
一般是req.getRequestDispatcher("/servlet2").forward(req,resp);
base 标签设置页面相对路径工作时参照的地址 href 属性就是参数的地址值 <base href="http://localhost:8080/07_servlet/a/b/">

/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/

/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、/servlet1
2、servletContext.getRealPath(“/”);
3、request.getRequestDispatcher(“/”);

特殊情况: response.sendRediect(“/”); 把斜杠发送给浏览器解析。得到 http://ip:port/

5.6 HttpServletResponse 类

每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)

解决乱码问题:方法1
		// 设置服务器字符集为 UTF-8 
		resp.setCharacterEncoding("UTF-8"); 
		// 通过响应头,设置浏览器也使用 UTF-8 字符集 
		resp.setHeader("Content-Type", "text/html; charset=UTF-8");
解决乱码问题:方法2
		resp.setContentType("text/html; charset=UTF-8");
PrintWriter writer = resp.getWriter(); writer.write("response's content!!!");

请求重定向:请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说 我给你一些地址。你去新地址访问。叫请求 重定向(因为之前的地址可能已经被废弃)。 二次连接,改变了request域的内容
在这里插入图片描述

方法1:推荐resp.sendRedirect("http://localhost:8080")
方法二:不推荐 resp.setStatus(302); // 设置响应头,
说明 新的地址在哪里 resp.setHeader("Location", "http://localhost:8080");

6.Jsp

jsp 的全换是 java server pages。Java 的服务器页面。 jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。
Jsp的本质:jsp 页面本质上是一个 Servlet 程序。
jsp文件需要声明为:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
在这里插入图片描述

6.2 jsp常用的脚本

<%! 声明脚本 %>(少用)

声明脚本的格式是: <%! 声明 java 代码 %> 作用:可以给 jsp 翻译出来的 java 类定义属性和方法甚至是静态代码块内部类等。

<%!
	private String name;
	static { 
			map = new HashMap<String,Object>(); 
			map.put("key1", "value1");  
	}
	public int abc(){return 12;}
%>

<%= 表达式脚本 %>(常用)

特点是:
1、所有的表达式脚本都会被翻译到_jspService() 方法中 
2、表达式脚本都会被翻译成为 out.print()输出到页面上 
3、由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。 
4、表达式脚本中的表达式不能以分号结束。

作用是:在jsp页面上输出数据,不能有分号,多个输出使用多个<%= 现实的内容%>

<% java代码逻辑 %>(常用)

在这里插入图片描述
jsp 九大内置对象:指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象,叫内置对象。
在这里插入图片描述

6.3 jsp 四大域对象

pageContext (PageContextImpl 类) 				当前 jsp 页面范围内有效 
request (HttpServletRequest 类)、 				一次请求内有效 
session (HttpSession 类)、 							一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器) 
application (ServletContext 类) 						整个 web 工程范围内都有效(只要 web 工程不停止,数据都在)

通过.setAttribute()方法存数据,通过getAttribute()方法取数据

jsp的out输出和response.getWriter的区别

response 中表示响应,我们经常用于设置返回给客户端的内容(输出) out 也是给用户做输出使用的。
在这里插入图片描述
总结:因此,out缓冲区会自动的falsh进response的缓冲区。
out.write() 输出字符串没有问题
out.print() 输出任意数据都没有问题(都转换成为字符串后调用的 write 输出)

6.4 jsp的常用标签

静态包含

<%@ include file=" /include/footer.jsp"%> 就是静态包含 file 属性指定你要包含的 jsp 页面的路径
地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ 映射到代码的 web 目录
静态包含的特点:
1、静态包含不会翻译被包含的 jsp 页面。
2、静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出

动态包含(常用)

动态包含 :<jsp:include page=""></jsp:include> page 属性是指定你要包含的 jsp 页面的路径
动态包含也可以像静态包含一样。把被包含的内容执行输出到包含位置
动态包含的特点:
1、动态包含会把包含的 jsp 页面也翻译成为 java 代码
2、动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。 JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);
3、动态包含,还可以传递参数
在这里插入图片描述

7.EL${表达式}

EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出
EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串
empty 运算:empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。${ empty emptyStr }
三元运算表达式 1?表达式 2:表达式 3
**.**点运算,可以输出 Bean 对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。${ map['c-c-c'] }
在这里插入图片描述
四大
域对象

pageScope ====== pageContext 域
requestScope ====== Request 域
sessionScope ====== Session 域
applicationScope ====== ServletContext 域
${applicationScope.key}

pageContext 对象:获取jsp的9大内置对象
在这里插入图片描述
获取请求的参数:
请求的地址是http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=wzg168&password=666666&hobby=java&hobby=cpp
param Map<String,String> 它可以获取请求参数的值 ${ param.password }
paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用。${ paramValues.username[0] }
其他参数
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam Map<String,String> 它可以获取在 web.xml 中配置的上下文参数

8.JSTL标签库

全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标 签库EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面 变得更佳简洁。
在这里插入图片描述

8.2 core核心库的使用

<c:set /> set 标签可以往域中保存数据

<c:set scope="session" var="abc" value="abcValue"/>
作用:set 标签可以往域中保存数据 
域对象.setAttribute(key,value); 
scope 属性设置保存到哪个域 
				page 表示 PageContext 域(默认值) 
				request 表示 Request 域 
				session 表示 Session 域 
				application 表示 ServletContext 域 
var 属性设置 					key 是多少              					value 属性设置值

<c:if />标签的使用

if 标签用来做 if 判断。 test 属性表示判断的条件(使用 EL 表达式输出) <c:if test="${ 12 == 12 }">

<c:choose> <c:when> <c:otherwise>标签

choose 标签开始选择判断 
when 标签表示每一种判断情况 
	test 属性表示当前这种判断情况的值 
otherwise 标签表示剩下的情况
<c:choose>  
	<c:when test="${ requestScope.height > 190 }"> 
		<h2>小巨人</h2> 
	</c:when> 
	<c:when test="${ requestScope.height > 180 }"> 
		<h2>很高</h2> 
	</c:when> 
	<c:otherwise>
		<c:choose> 
			<c:when test="${requestScope.height > 160}"> 
				<h3>大于 160</h3> 
			</c:when> 
			<c:when test="${requestScope.height > 140}"> 
				<h3>大于 140</h3> 
			</c:when> 
			<c:otherwise> 
				其他小于 140 
			</c:otherwise> 
		</c:choose>
	</c:otherwise> 
</c:choose>

<c:forEach />

begin 属性设置开始的索引 
end 属性设置结束的索引 
var 属性表示循环的变量(也是当前正在遍历到的数据)
<c:forEach items="${ requestScope.map }" var="entry"> 
	<h1>${entry.key} = ${entry.value}</h1> 
</c:forEach>

<c:forEach items="${ requestScope.arr }" var="item"> 
	${ item } <br> 
</c:forEach>

9.文件上传和下载

9.1文件的上传

1、要有一个 form 标签,method=post 请求 
2、form 标签的 encType 属性值必须为 multipart/form-data 值 
3、在 form 标签中使用 input type=file 添加上传的文件 
4、编写服务器代码(Servlet 程序)接收,处理上传的数据。

encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器
在这里插入图片描述
在这里插入图片描述

ServletFileUpload 类,用于解析上传的数据。 
FileItem 类,表示每一个表单项。
boolean ServletFileUpload.isMultipartContent(HttpServletRequest request); 
	判断当前上传的数据格式是否是多段的格式。 
public List<FileItem> parseRequest(HttpServletRequest request) 
	解析上传的数据 
boolean FileItem.isFormField() 
	判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。 
	true 表示普通类型的表单项 
	false 表示上传的文件类型 
String FileItem.getFieldName() 
	获取表单项的 name 属性值
String FileItem.getString()
	获取当前表单项的值
String FileItem.getName(); 
	获取上传的文件名 
void FileItem.write( file ); 
	将上传的文件写到 参数 file 所指向抽硬盘位置 。

文件上传

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
	//1 先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的) 
	if (ServletFileUpload.isMultipartContent(req)) { 
	// 创建 FileItemFactory 工厂实现类 
	FileItemFactory fileItemFactory = new DiskFileItemFactory(); 
	// 创建用于解析上传数据的工具类 ServletFileUpload 类 
	ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); 
	try {
		// 解析上传的数据,得到每一个表单项 
		FileItem List<FileItem> list = servletFileUpload.parseRequest(req); 
		// 循环判断,每一个表单项,是普通类型,还是上传的文件
		for (FileItem fileItem : list) { 
			if (fileItem.isFormField()) { 
				// 普通表单项 
				System.out.println("表单项的 name 属性值:" + fileItem.getFieldName()); 
				// 参数 UTF-8.解决乱码问题 
				System.out.println("表单项的 value 属性值:" + fileItem.getString("UTF-8")); 
			} else { 
				// 上传的文件 
				System.out.println("上传的文件名:" + fileItem.getName()); 
				fileItem.write(new File("e:\\" + fileItem.getName())); 
					} 
			} 
		} catch (Exception e) { e.printStackTrace();} 
	} 
}

文件下载

response.getOutputStream(); 
servletContext.getResourceAsStream(); 
servletContext.getMimeType(); 
response.setContentType();

response.setHeader("Content-Disposition", "attachment; fileName=1.jpg");

10 cookie

Cookie 是服务器通知客户端保存键值对的一种技术。客户端有了 Cookie 后,每次请求都发送给服务器。大小不能超过 4kb。
在这里插入图片描述

//1 创建 Cookie 对象
Cookie cookie = new Cookie("key4", "value4"); 
//2 通知客户端保存 Cookie 
resp.addCookie(cookie); 
resp.getWriter().write("Cookie 创建成功");

服务器获取cookie

服务器获取客户端的 Cookie 只需要一行代码:req.getCookies(): Cookie[]
在这里插入图片描述

根据名称查找对应的cookie
public static Cookie findCookie(String name , Cookie[] cookies){ 
	if (name == null || cookies == null || cookies.length == 0) { 
		return null; 
	}
	for (Cookie cookie : cookies) { 
		if (name.equals(cookie.getName())) { 
			return cookie;
		} 
	}
	return null;
}

cookie的修改

方案一: 
	1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
	 2、在构造器,同时赋于新的 Cookie 值。 
	 3、调用 response.addCookie( Cookie );
	 Cookie cookie = new Cookie("key1","newValue1");
	 resp.addCookie(cookie);
 方案二: 
	 1、先查找到需要修改的 Cookie 对象 
	 2、调用 setValue()方法赋于新的 Cookie 值。 
	 3、调用 response.addCookie()通知客户端保存修改
	 Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
	 cookie.setValue("newValue2");
	 resp.addCookie(cookie);

cookie的生命控制

setMaxAge()是如何管理 Cookie 什么时候被销毁(删除)
正数,表示在指定的秒数后过期
负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
零,表示马上删除 Cookie

Cookie 有效路径 Path 的设置

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。
path 属性是通过请求的地址来进行有效的过滤。
例如:cookie.setPath( req.getContextPath() + "/abc" ); /工程路径/abc
CookieA path=/工程路径 CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径**/a.html**
CookieA 发送 CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送 CookieB 发送

11 Session

1、Session 就一个接口(HttpSession)。 
2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。
3、每个客户端都有自己的一个 Session 会话。 
4、Session 会话中,我们经常用来保存用户登录之后的信息。

request.getSession() 第一次调用是:创建 Session 会话
之后调用都是:获取前面创建好的 Session 会话对象。
seesion对象的isNew(); 判断到底是不是刚创建出来的(新的) true 表示刚创建 false 表示获取之前创建
getId() 得到 Session 的会话 id 值。

protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
	req.getSession().setAttribute("key1", "value1"); 
	resp.getWriter().write("已经往 Session 中保存了数据"); 

	Object attribute = req.getSession().getAttribute("key1"); 
	resp.getWriter().write("从 Session 中获取出 key1 的数据是:" + attribute);
}

Session 生命周期控制

public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。
值为正数的时候,设定 Session 的超时时长。
负数表示永不超时(极少使用)
public int getMaxInactiveInterval()获取 Session 的超时时间
public void invalidate() 让当前 Session 会话马上超时无效。
session默认是30分钟自动销毁
Tomcat 服务器的配置文件 web.xml中默认有以下的配置,它就表示配置了当前 Tomcat 服务器下所有的 Session 超时配置默认时长为:30 分钟。 <session-config> <session-timeout>30</session-timeout> </session-config> 修改默认的只需要在web工程的web.xml修改就可以了。<session-config> <session-timeout>20</session-timeout> </session-config>
在这里插入图片描述

12 Filter过滤器

Filter的特点:
	1、三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
	2、Filter 过滤器它是 JavaEE 的规范。也就是接口 
	3、Filter 过滤器它的作用是:拦截请求,过滤响应。
Filter 过滤器的使用步骤: 
		1、编写一个类去实现 Filter 接口 
		2、实现过滤方法 doFilter() 
		3、到 web.xml 中去配置 Filter 的拦截路径

在这里插入图片描述
在这里插入图片描述
web.xml的配置

<filter> 
	<!--给 filter 起一个别名--> 
	<filter-name>AdminFilter</filter-name> 
	<!--配置 filter 的全类名--> 
	<filter-class>com.atguigu.filter.AdminFilter</filter-class> 
</filter>

<filter-mapping> 
	<!--filter-name 表示当前的拦截路径给哪个 filter 使用--> 
	<filter-name>AdminFilter</filter-name> 
	<!--url-pattern 配置拦截路径 / 表示请求地址为:http://ip:port/工程路径/ 映射到 IDEA 的 web 目录 
	/admin/* 表示请求地址为:http://ip:port/工程路径/admin/* --> 
	<url-pattern>/admin/*</url-pattern> 
</filter-mapping>

FilterChain 过滤器链

在这里插入图片描述
在这里插入图片描述

Filter 的拦截路径

1.–精确匹配 <url-pattern>/target.jsp</url-pattern> 以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp
2.–目录匹配
<url-pattern>/admin/*</url-pattern> 以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*
3.–后缀名匹配
<url-pattern>*.html</url-pattern> 以上配置的路径,表示请求地址必须以.html 结尾才会拦截到
Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!

13 json

json 是一种轻量级的数据交换格式。json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔。var jsonObj = { "key1":12, "key2":"abc",}
json 中的 key 访问就跟访问对象的属性一样: json 对象.key

json 与 String字符串的转换

JSON.stringify() 把 json 对象转换成为 json 字符串
JSON.parse() 把 json 字符串转换成为 json 对象
一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串
导入谷歌的框架Gson模块,把javabean对象转换成json格式

// 1.创建 Gson 对象实例
Gson gson = new Gson(); 
//2.toJson 方法可以把 java 对象转换成为 json 字符串 
String personJsonString = gson.toJson(person); 
// 3.fromJson 把 json 字符串转换回 Java 对象 
// 第一个参数是 json 字符串 // 第二个参数是转换回去的 Java 对象类型 
Person person1 = gson.fromJson(personJsonString, Person.class); 

多个对象构成的list需要实现TypeToken()接口,一般使用匿名对象解决new TypeToken

json对象转换成     list的数据
List<Person> list = gson.fromJson(personListJsonString, new TypeToken()<List<Person>>(){}.getType());
json对象转换成     map集合的数据
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());

14 AJAX请求

AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发 技术。
ajax 是一种浏览器通过 js 异步发起请求局部更新页面的技术。
Ajax 请求的局部更新,浏览器地址栏不会发生变化 局部更新不会舍弃原来页面的内容

14.1 AJAX 方法$.ajax({代码})

在这里插入图片描述

$("#ajaxBtn").click(function(){ 
	$.ajax({ 
		请求的地址
	url:"http://localhost:8080/16_json_ajax_i18n/ajaxServlet", 
	data是参数 ? map发送
	data:{action:"jQueryAjax"}, 
	type:"GET",  
	success.fucnction是回调函数,data是servlet发送回来的数据
	success:function (data) { 
		$("#msg").html("编号:" + data.id + " , 姓名:" + data.name); 
	},
	返回的类型
	dataType : "json" 
	}); 
});

14.2

.

g

e

t

.get 方法和

.get
.post 方法

url 							请求的 url 地址 
data 						发送的数据 
callback 					成功的回调函数 
type 						返回的数据类型
// ajax--get 请求 
$("#getBtn").click(function(){ 				
	$.get("http://localhost:8080/工程名/ajaxServlet","action=jQueryGet",function (data) { 
		$("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name); 
	},"json"); }); 
// ajax--post 请求 
$("#postBtn").click(function(){ 
	$.post("http://localhost:8080/工程名/ajaxServlet","action=jQueryPost",function (data) { 
		$("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name);
	},"json"); 
});

在这里插入图片描述

15 i18国际化(了解)

在这里插入图片描述
在这里插入图片描述
// 从请求头中获取 Locale 信息(语言)
1.Locale locale = request.getLocale();
2.ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);


版权声明:本文为Njhbsj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>