学问是光明,蒙昧是黑暗。念书吧。与你共勉。
目录
1、HTML
1.1、HTML是什么
HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。哈哈哈哈,是不是感觉太官方了,那就看下面:
(1) HTML是一门标记(也叫做标签或元素)语言,不是编程语言
(2) HTML是一门标记语言,是利用标记来组织网页结构的
(3) 使用html开发的网页文件,以".html"或".htm "(.shtml)为后缀
(4) 使用html开发的网页文件,由浏览器负责解析并执行(即显示在浏览器中)
(5) HTML是文档的一种,例如:word pdf txt…
1.2、HTML的结构
<!DOCTYPE HTML> 文档声明, 用来声明HTML文档所遵循的HTML规范和版本,上面是html5.0的声明, 也是目前最常用的版本
<head></head> 头部分, 用来存放HTML文档的基本属性信息, 比如网页的标题, 文档使用的编码等, 这部分信息会被浏览器优先加载.
<body></body> 体部分, 用来存放网页可视化数据. 即真正的网页数据
<title></title> 声明网页的标题
<meta charset="utf-8"/> 用来通知浏览器使用哪一个编码来打开HTML文档, 这个编码一定要和文件保存时的编码保持一致, 才不会出现中文乱码问题.
1.3、HTML语法
1.3.1、html标签
HTML是一门标记语言,标记也叫做元素/标签,标签分为开始标签和结束标签。
<body></body> <table></table> <form></form>
如果标签内没有内容要修饰,可以合并成一个自闭标签。
<meta/> <br/> <hr/> <input/> <img/>等等
1.3.2、html属性
标签都可以具有属性,属性可以有多个,多个属性之间用空格隔开
<font size="7" color="red" face="华文琥珀">文本内容…</font>
提示:属性的值用单引号或双引号引起来,或者不用引号。通常使用双引号引起来
1.3.3、html注释
<!-- 注释内容 -->,注意html注释不能交叉嵌套
1.3.4、html空格和换行
<br/> 换行
空格
  中文状态下的空格
1.4、HTML标签
1)、图像标签
img标签用于在网页中插入一幅图片
<img src="img/1.jpg" width="70%" border="5px"/>
src属性:用来指定图片的url地址(即图片的所在路径)
width属性:指定图片的宽度,单位可以为px(像素)或者%(百分比)
height属性:指定图片的高度,单位可以为px(像素)或者%(百分比)
2)、超链接
用于创建指向另外一个文档的超链接(点击后可以跳转到另外一个文档)
<a href="http://www.baidu.com" target="_blank">百度一下,你就不知道</a>
href属性:用来指定点击超链接后将要跳转到的url地址
target属性:用来指定以何种方式打开超链,其常用取值为:
_self:默认值,在当前窗口打开超链接
_blank:在新的窗口中打开超链接
3)、表格标签
<table>
<tr>
<td>11</td>
<td>12</td>
<td>13</td>
</tr>
<tr>
<td>21</td>
<td>22</td>
<td>23</td>
</tr>
<tr>
<td>31</td>
<td>32</td>
<td>33</td>
</tr>
</table>
table – 用来定义一个表格
tr – 用来定义表格中的行
td – 用来定义表格中的单元格
th – 用来定义表头
4)、表单标签
表单的作用是向服务器发送数据。
<form action="http://www.baidu.com" method="GET"></form>
action 必须存在的属性,用来指定表单提交的目的地地址
method 可选属性,用来指定以何种方式来提交表单,如果不指定,默认是GET提交
5)、表单项标签
表单中可以有多个输入项,输入项必须有name属性才可以被提交,如果输入项没有name属性,则表单在提交时会忽略它
a、input元素
<-- 普通文本输入框-->
<input type="text" name="username" value="设置默认值"/>
<-- 密码输入框-->
<input type="password" name="password" value="设置默认值"/>
<-- 单选框 value用来指定选项被提交时的值, 如果不设置value, 选项被提交时, 值为on.-->
<input type="radio" name="gender" value="man"/>
<-- 复选框-->
<input type="checkbox" name="like" value="lanqiu"/>
<-- 提交按钮 用来提交表单用的-->
<input type="submit" value="按钮上显示的文本">
<-- 普通按钮-->
<input type="button" value="按钮上显示的文本">
b、textarea多行文本输入
<textarea name="description" cols="宽度" rows="高度">请输入个人描述..</textarea>
cols属性:设置输入框宽度
rows属性:设置输入框高度
c、下拉选框
<select name="city">
<option value="bj">北京</option>
<option value="sh">上海</option>
<option value="gz" selected="selected">广州</option>
</select>
其中selected属性用来设置该选项默认被选中
value属性用来设置选项被提交时的值
6)、表单细节问题
a、提交表单时,表单中的数据怎么没有被提交?
在表单中,每一个要提交数据的表单项标签都要具有name属性
b、如何让多个单选框只有一个被选中?
设置这多个单选框的name属性值相同,如果name相同,这多个单选框就默认是一个组,一个组就只能选中一个选项。
c、为什么单选框、复选框提交后的值都是on?
如果单选框或复选框没有设置value属性,选择任何一个选项最终提交的值都是on,这样服务器无法区分用户到底选择是什么选项。
d、如何设置单选框、复选框默认选中一项?
只需要在单选框或复选框上面添加一个属性: checked="checked",
e、如何设置下拉选框默认选中一项?
如果不设置,下拉选框默认选中的第一个选项,可以通过 selected="selected"属性设置某一项默认被选中
f、下拉选框中的option选项上的value属性的作用是什么?
选中某一个option,在表单提交时,如果option上没有value属性,就提交option标签的内容;如果option上有value属性,就提交value属性的值。
2、CSS
2.1、CSS简介
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 [1]
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力
html的作用: 通过html标签组织网页的结构
css的作用: 渲染网页、美化网页
2.2、CSS在HTML中的引入
1)、通过标签的style属性引入
<div style="border:2px solid red;font-size:26px;background:pink;">
这是一个div...
</div>
2)、通过style标签引入
放在head里面
<style type="text/css">
/* ****** CSS样式 ****** */
span{
border:2px solid green;
font-size:30px;
font-weight:bolder;
}
</style>
3)、通过link链接引入外部的CSS文件
放在head里面
<link rel="stylesheet" href="demo.css"/>
2.3、CSS选择器
1)、标签名选择器
根据标签(元素)的名称来选择指定名称的元素进行样式的修饰,格式:标签名{ css属性… }
如:
span{
background:#DDA0DD;
font-size:24px;
font-weight:bolder;
}
2)、class选择器
通过标签上通用的属性class,可以为标签指定所属的类(组)进行样式的修饰。格式:.类名{ css属性… }
如:
.c1{ /* 表示选中所有class值为c1的元素 */
background: #b1eb0a;
color: #0b190b;
}
.c2{ /* 表示选中所有class值为c2的元素 */
background:#f3db09;
color: blue;
}
如果说一个标签上有多个类选择器,而这多个选择器的样式有相同的修饰属性,那么后面的样式会覆盖前面的样式。
3)、id选择器
通过标签上通用的属性id,可以为标签设置唯一的标识,格式:#id值{ css属性… }
如:
#p1{ /* 选中id为p1的元素 */
font-size:28px;
color: red;
text-indent: 20px;
}
4)、后代选择器
选中父元素内部的指定后代元素,格式:父选择器 后代元素{CSS样式}
p span{/* 选中所有p元素内部的所有span元素 */
font-size: 20px;
color:green;
background: cyan;
}
5)、属性选择器
根据属性条件选中元素进行修饰,格式:选择器[属性]{CSS样式}
input[type='text'][name='user']{
/* 匹配元素名为input的并且type的值为text的元素 */
background:pink;
font-size:30px;
text-indent:30px;
}
2.4、常用属性总结
此处,奉上一个大佬的总结
https://blog.csdn.net/yjn1995/article/details/90709767
3、JavaScript
3.1、JavaScript简介
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
嵌入在html网页中的一门脚本语言,专门用于实现网页的交互。JS嵌入在网页中,由浏览器负责解析并执行。为网页添加各式各样的动态效果或为表单添加校验,为用户提供更好的浏览体验。
3.2、特性
1)、是一种解释性脚本语言(代码不进行预编译)
2)、主要用来向HTML(标准通用标记语言下的一个应用)页面添加交互行为。
3)、可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
4)、跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。
5)、Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。
6)、可以实现web页面的人机交互。
3.3、HTML中使用JS的方法
1)、在script标签内部直接书写JS
<head>
...
<!-- 第一种引入JS的方式 -->
<script>
alter("引入JS的第一种方式...");
</script>
</head>
可以放在head和body中
2)、通过标签引入外部的JS文件
创建一个后缀为js的文件,引入即可
<head>
...
<!-- 第二种引入JS的方式 -->
<script src="demo.js"></script>
</head>
注:如果标签引入了外部的文件,那么这个标签内部不要再写js,因为写了也不会执行
<script src="demo.js">
alert(333);//此处的代码执行不到
</script>
3.4、JS语法
3.4.1、注释
与Java一样,//单行注释 /*多行注释*/
3.4.2、数据类型
JS的基本数据类型一共有五种,分别为数值类型(number)、字符串类型(string)、布尔类型(boolean)、undefined、null。
数值类型:底层是浮点型,但是在需要时会在整型与浮点型转换
字符串类型:可以用单引号或双引号包裹
布尔类型:true和false
undefined:定义了变量却没有赋值
null:就只有一个值 null,表示空值。
3.4.3、变量声明
1)、在js中用var声明变量
var a = 10; //声明变量,赋值为数值10
var b = true; //声明变量,赋值为布尔值true
var c = "Hello JS"; //声明变量,赋值为字符串"Hello JS"
2)、在JS中声明的变量不区分类型,可以指向任意的数据类型
3.4.4、运算符
算术运算符: +,-,*,/,%,++,--
赋值运算符: =,+=,-=,*=,/=,%=
比较运算符: ==,!=,>,>=,<,<=
位运算符: & , |
逻辑运算符: && ,||
前置逻辑运算符: ! (not)
三元运算符: 表达式 ? 表达式 : 表达式
3.4.5、js语句
if分支 switch for循环 while循环
3.4.6、js数组
声明数组的方法
var arr1 = new Array();
var arr2 = new Array(88,"Hello" ,true , 100);
var arr3 = [];
var arr4 = [88,"Hello" ,true , 100];
3.4.7、js函数
function funName([参数1,参数2,…]){
需要执行的代码
}
如图,函数就是一个代码块,可以重复使用。
组成:function 方法名称(参数){方法体}
函数的调用:方法名称(参数)
3.5、js如何获取元素
document.getElementById( id值 ) -- 通过元素的id值,获取一个元素。返回的是表示该元素的js对象。
document.getElementsByTagName( 元素名 ) -- 通过元素名称获取当前文档中的所有指定名称的元素,返回的是一个数组
document.body -- 获取当前文档中的body元素
ele.parentNode -- 获取当前元素的父元素。obj表示当前元素
document.createElement( 元素名称 ) -- 根据元素名称创建指定名称的元素,返回的是表示新创建元素的js对象
parent.appendChild( child ) -- 通过父元素添加子元素,其中parent表示父元素,child表示子元素
parent.removeChild( child ) -- 通过父元素删除子元素,其中parent表示父元素,child表示子元素
ele.innerHTML -- 获取当前元素的html内容(从开始标签到结束标签之间的所有内容)
-- 或者, 还可以设置当前元素的html内容(如果元素内部有内容,将会覆盖原有内容)
4、JQuery
4.1、简介
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等
4.2、特点
- 快速获取文档元素
- 提供漂亮的动态页面效果
- 创建AJAX刷新网页
- 提供对js的增强
- 更改网页内容
- 增强的事件处理
4.3、JQuery的引入
使用JQuery的话,引入JQuery的函数库即可,而JQuery函数库就是一个js文件,里面是大量的js函数。
<script src="js/jquery-1.8.3.js"></script>
使用JQuery时一定要注意代码的位置,举个栗子:
<script type="text/javascript">
/* 获取id为d1的元素的内容 */
//1.获取id为d1的元素
var h1 = document.getElementById("d1");
//2.获取h1的内容(innerHTML)
alert( h1.innerHTML );
</script>
<body>
<h1 id="d1">引入jquery示例...</h1>
<body>
这段代码运行的话会报错,因为代码是由上往下运行的,在执行获取id为d1的元素时, h1元素还没有被浏览器加载到,所以获取不到h1元素。
解决办法:
第一种:可以将js代码放到h1元素的下面,让浏览器先加载h1元素,再执行获取h1的代码。就可以正常执行。
第二种:将获取h1元素的代码放在文档就绪事件函数中,文档就绪事件函数会在浏览器加载完整个html文档后立即执行!
$(function(){
//在整个文档被加载完后立即执行...
})
4.4、JQuery的选择器
元素选择器
$("div") – 获取所有div元素
$("span") – 获取所有的span元素
类选择器
$(".c1") – 获取所有class值为c1的元素
$("div.c1") – 获取所有class值为c1的div元素
id选择器
$("#one") – 获取id为one的元素
后代选择器
$("#one span") – 匹配id为one的元素内部的所有span元素
相邻兄弟元素选择器
$("#one+span") – 匹配id为one的元素后面紧邻的span兄弟元素
等价于:
$("#one").next("span") – 匹配id为one的元素后面紧邻的span兄弟元素
$("#one").prev("span") – 匹配id为one的元素前面紧邻的span兄弟元素
$("#one~span") – 匹配id为one的元素后面所有的span兄弟元素
$("#one").nextAll("span") – 匹配id为one的元素后面所有的span兄弟元素
$("#one").prevAll("span") – 匹配id为one的元素前面所有的span兄弟元素
$("#one").siblings("span") – 匹配id为one的元素前、后所有的span兄弟元素
基本过滤选择器
1、:first | :last
2、:eq(n)
$("div:first") – 匹配所有div中的第一个div元素
$("div:last") – 匹配所有div中的最后一个div元素
$("div:eq(0)") – 匹配所有div中的第一个div元素
$("div").eq(0) – 匹配所有div中的第一个div元素
$("div:eq(-1)") – 匹配所有div中的最后一个div元素
$("div").eq(-1) – 匹配所有div中的最后一个div元素
4.5、创建一个表格
function createTable3(){
//var rows = $("#rows").val();
//var cosl = $("#cosl").val();
var rows = document.getElementById("rows").value;
var cols = document.getElementById("cols").value;
var $tab = $("<table></table>");
for(var i=0;i<rows;i++){
var $tr = $("<tr></tr>");
for(var j=0; j<cols;j++){
var $td = $("<td></td>");
$td.html("我是td!")
//将td添加到tr内部
$tr.append( $td );
}
//将tr添加到table内部
$tab.append( $tr );
}
//将table添加到网页中
$("body").append( $tab );
}
4.6、总结
$("<div></div>") -- 创建一个div元素,返回的是一个表示div元素的jQuery对象
$("<div>xxxx</div>") -- 创建一个包含内容的div元素,返回的是一个表示div元素的jQuery对象
$parent.append( $child ) -- 父元素调用方法添加子元素
$("body").append( "<div>我是新来的...</div>" ); -- 往body元素内部追加一个div子元素
$("div").remove() -- 删除所有的div元素
$("div").replaceWith("<p>我是来替换的…</p>") --替换元素
$("div").html() -- 获取所有div中的第一个div的内容
$("div").html("xxxx") -- 为所有div设置内容
$("div").text() -- 获取所有div中的所有文本内容
$("div").text("xxxx") -- 为所有div设置文本内容
$("input").val() -- 获取所有input元素中的第一个input元素的value值
$("input").val(值) -- 为所有的input元素设置value值
5、HTTP
5.1、什么是HTTP协议
HTTP是用于规定浏览器和服务器通信的方式。
主要规定了浏览器向服务器发送的请求信息的格式,
以及规定了服务器向浏览器做出的响应信息的格式。
请求只能由浏览器发起,服务器被动接收,一次请求对应一次响应。
5.2、HTTP协议详解
1)、HTTP请求
请求行:GET /news/hello.html HTTP/1.1
GET: 提交方式,在HTTP协议中一共规定了7种提交方式,常用的只用GET和POST。
/news/hello.html: 请求的资源路径
HTTP/1.1:请求所遵循的协议和版本
请求头:请求头都是Key-Value结构
请求实体:GET请求的话,请求实体不会有内容,只有是POST请求时,请求实体才会有内容
2)、HTTP响应
状态行:
HTTP/1.1:表示响应信息所遵循的协议和版本
200:状态码,表示请求处理的结果。
常见的有:
200:表示服务器处理请求的结果是成功的!
304/307:表示服务器通知浏览器使用缓存
400:表示请求参数类型不匹配
404:表示客户端请求的资源不存在
500:表示服务器端在处理请求的过程中出现了错误或异常
若干响应头:
响应头的格式也是Key-Value结构
响应实体:
对应的请求内容返回的响应内容。
如果浏览器向服务器请求的是一个文件,服务器会将这个文件的内容作为响应实体发送给浏览器.
5.3、GET和POST的区别
(1)GET提交会将请求参数拼接在URL地址的后面,显示在地址栏中,相对不安全
(2)GET提交将参数显示在地址栏中,数据量不能太大,不能超过1K或者是4K
(3)POST提交不会将参数拼接在地址栏后面, 而是通过请求实体将参数发送给服务器, 相对来说更加安全!
(4)POST提交通过请求实体传数据给服务器, 数据量理论上没有限制!
当向服务器传输大量的数据或者传输的数据较为隐私,才会使用POST提交。
6、Servlet
6.1、简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
因而,Servlet的作用是处理请求
6.2、如何开发一个Servlet程序
6.2.1、创建工程
写一个类实现Servlet接口,并实现方法,在web应用的web.xml文件中配置Servlet程序对外访问的路径。
1)、创建一个Web工程
继承HttpServlet类,默认会覆盖doGet方法和doPost方法,两个方法的作用为:
* doGet方法:当浏览器发送请求的方式为GET提交时, 将会调用doGet方法来处理请求
* doPost方法:当浏览器发送请求的方式为POST提交时, 将会调用doPost方法来处理请求
6.2.2、Servlet在web.xml中的配置
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.tedu.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
在通过Eclipse创建Servlet时,会自动在web.xml文件中进行Servlet相关信息的配置
(注意:如果是复制Servlet类文件,需要自己手动添加配置,否则复制的Servlet将无法访问!)
创建一个Servlet, 就会在web.xml文件中添加两个标签:<servlet>和<servlet-mapping>标签
<servlet>和<servlet-mapping>标签内的<servlet-name>标签,内容可以更改,但要求更改后的内容必须一致。
<servlet-class>标签用于配置Servlet类的全路径名(即包名+类名)
(注意:如果在创建Servlet后修改了Servlet类的名称,这里一定要改,否则将会出现"ClassNotFoundException" 即类找不到异常)
<url-pattern>标签用于配置浏览器以什么路径访问当前Servlet(即Servlet对外访问的路径),默认的路径是:/类名
6.2.3、运行程序进行测试
第一种方法:如果是第一次运行Servlet项目,需要先创建Tomcat服务器
(1)在服务器上右键 --> 点击 "add and remove" 将当前web项目发布到服务器中,并点击完成。
(2)启动tomcat服务器:在服务器上右键 Start 即可启动服务器
(3)打开本地浏览器,通过路径访问:http://localhost:8080/项目名称/HelloServlet即可访问Servlet程序
第二种方法:
1)、在运行的Servlet上点击右键 ---> "Run As" ---> "1 Run on Server"
6.3、Servlet的继承关系
当浏览器访问一个Servlet时,首先调用Servlet类的service方法(从HttpServlet类中继承过来的),根据请求方式调用对应的doGet方法或者doPost方法,对请求进行处理!
6.4、Request和Response
request是代表Http请求信息的对象,其中封装了浏览器向服务器发送的请求信息;response对象是代表Http响应信息的对象,其中将会封装服务器向浏览器做出的响应信息。
6.4.1、request
1)、什么是请求参数
通过浏览器向服务器发送请求时,在请求中可以携带一些数据,这些数据就称之为请求参数
2)、如何获取参数
request.getParameter(String paramName); -- 通过请求参数的名字,获取对应的参数值。返回值是一个字符串。
request.getParameterValues(String paramName); -- 通过请求参数的名字,获取对应的所有参数值组成的数组。
3)、获取参数时的乱码问题
Tomcat8.0以后的版本,GET提交方式不涉及乱码问题
POST提交总会有乱码,与版本无关,解决方法时在获取参数的代码前面加上一行代码
request.setCharacterEncoding("utf-8");
6.4.2、请求转发
请求转发是在服务器端获取数据的过程中,由访问的服务器资源跳至另一个资源进行获取,发生在服务端内部,浏览器不知道。
特点:
(1)请求转发前后是一次请求、一次响应
(2)请求转发前后,浏览器地址栏地址不会发生变化(转发是服务器内部的跳转,浏览器看不到)
(3)请求转发前后的request对象是同一个(因为请求只有一次,服务器根据一次请求,只会创建一个request对象,转发前后都需要request,所以只能在转发时,将request对象传递给转发后的那个资源)。
(4)请求转发只能在同一个web应用内部中的两个资源之间进行转发。
即转发前后的两个资源必须属于同一个web应用。
实现方法:
request.getRequestDispatcher("转发到资源的路径").forward(req, res);
在进行请求转发时,request要携带数据,此时request作为域对象使用。
request.setAttribute(String attrName, Object attrValue);
-- 将属性存入request域中(request对象的map集合里),其中属性名只能是字符串,属性值可以是任意类型。
request.getAttribute(String attrName)
-- 根据属性名从request域中获取对应的属性值。返回值是一个Object。
request域对象的特征:
生命周期:一次请求开始时,会创建代表请求的request对象,在一次请求结束时(响应已完成),会销毁request对象。
作用范围:一次请求范围内(由于请求转发前后是一次请求,所以在请求转发前后可以通过request域带数据到目的地;如果是重定向,由于重定向前后是两次请求,request对象也不是同一个,因此在重定向前后不能通过request域带数据。)
主要功能:带数据到目的地。
6.4.3、response
向客户端发送数据
PrintWriter out = response.getWriter();
out.write("hello..");
用字符流发送数据时会出现乱码,解决方法:
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("你好");
6.4.4、重定向
访问资源的路径发生变化
特点:
(1)重定向前后是两次请求,两次响应
(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)
(3)重定向前后的request对象不是同一个(因为重定向前后是两次请求,服务器根据两次请求会创建两个不同的request对象及response对象)
(4)重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)
实现方法:
response.sendRedirect("重定向到资源的地址");
7、JSP
7.1、JSP简介
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
本质上是一个Servlet程序,因为JSP在第一次被访问时,会翻译成一个Servlet程序。
Servlet适合编写java程序却不适合输出一个网页,所以有了jsp。
7.2、JSP执行过程
访问JSP的过程为: 访问index.jsp --翻译-> index_jsp.java(Servlet) --编译-> index_jsp.class(运行) --结果-> 输出一个网页到浏览器
7.3、JSP语法
7.3.1、模板元素
除了JSP特有的都是模板元素
7.3.2、JSP表达式
格式: <%= 常量/变量/表达式 %>
7.3.3、JSP脚本
格式:<% 若干Java语句 %>
作用:在翻译后的Servlet中,将脚本片段中的java语句复制粘贴到对应的位置执行
7.3.4、注释
JSP中注释有3中,JSP注释、HTML注释、Java注释
JSP注释在翻译时直接扔掉,不参与翻译
Java注释放在脚本片段中,参与翻译,但是被java注释,不会参与执行
HTML注释当做模板元素发给浏览器,会参与运行,但是不显示。
7.3.5、JSP指令
指令的格式: <%@ 指令名称 若干属性声明... %>
指令的作用: 用于指挥JSP解析引擎如何将一个JSP翻译成一个Servlet程序。
<%@ page language="java"%> 指定开发语言
<%@ page import="java.util.Date"%> 导包
<%@ page pageEncoding="UTF-8"%> 指定编码
以上3个指令可以合在一起放在一个page指令上
7.4、EL表达式
格式: ${ 常量、表达式、变量 }
注意:这里的变量想要被获取,必须要存放到域中
${ "Hello EL" } Hello EL
${ 100+123 }
<hr/>
<% //声明一个name变量,并存入request域中
String name = "林青霞";
request.setAttribute( "n", name );
%>
${ n }
获取作用域中数组或集合的值
${ ns[0] } <br/>
${ ns[1] } <br/>
${ ns[2] } <br/>
${ ns[3] } <br/>
获取作用域中map的元素
${ map1.name } <br/>
${ map1.age } <br/>
${ map1.nickname } <br/>
获取作用域中Javabean对象的属性
${ user.username } <br/><!-- 底层还是调用getUsername方法 -->
${ user.password } <br/><!-- 底层还是调用getPassword方法 -->
${ user.addr } <br/><!-- 底层还是调用getAddr方法 -->
7.5、Jstl
在使用之前需要:
(1)导入JSTL的开发包
(2)在使用JSTL标签库的JSP中引入JSTL
1、<c:set></c:set> 往四大作用域中添加或修改域属性
<c:set var="name" value="张三" scope="request"/>
${ name }
<c:set var="name" value="张三丰" scope="request"/>
${ name }
(1)var -- 指定存入作用域中的属性名称
(2)value -- 指定存入作用域中属性的值
(3)scope -- 指定将属性存入哪一个作用域中
可取值: a)page表示pageContext域 b)request表示request域 c)session表示session域 d)application表示ServletContext域
作用域大小:page<request<session<application
2、<c:if></c:if> -- 构造if…else…语句
<c:set var="score" value="-58"/>
<c:if test="${ score<=100 && score > 80 }">
优秀!
</c:if>
test属性用于指定判断的条件,注意:JSTL中没有提供else对应的标签
3、<c:forEach></c:forEach> 对集合或数组等中元素进行循环遍历或者是执行指定次数的循环.
遍历数组
<%
//声明一个数组, 并将数组存入域中
String[] names = {"王海涛","齐雷","陈子枢"};
request.setAttribute("names", names);
%>
<c:forEach items="${names}" var="name">
${ name }
</c:forEach>
遍历map
<%
//声明一个Map, 并将Map存入域中
Map map = new HashMap();
map.put("name", "关羽");
map.put("age", "38");
map.put("addr", "中鼎大厦B座");
request.setAttribute("map", map);
%>
<c:forEach items="${ map }" var="entry">
${ entry.key } : ${ entry.value } <br/>
</c:forEach>
(1)items: 指定需要遍历的集合或数组
(2)var: 指定用于接收遍历过程中的元素
(3)begin: 指定循环从哪儿开始
(4)end: 指定循环到哪儿结束
(5)step: 指定循环时的步长, 默认值是1
(6)varStatus: 用于表示循环遍历状态信息的对象, 常用属性有:
first属性: 表示当前遍历是否是第一次, 若是, 则返回true;
last属性: 表示当前遍历是否是最后一次, 若是, 则返回true;
count属性: 记录当前遍历是第几次
手过一遍,也是一次小小的回忆知识的过程。