JavaWeb浅入了解

学问是光明,蒙昧是黑暗。念书吧。与你共勉。

目录

1、HTML

1.1、HTML是什么

1.2、HTML的结构

1.3、HTML语法

1.3.1、html标签

1.3.2、html属性

1.3.3、html注释

1.3.4、html空格和换行

1.4、HTML标签

2、CSS

2.1、CSS简介

2.2、CSS在HTML中的引入

2.3、CSS选择器

2.4、常用属性总结

3、JavaScript

3.1、JavaScript简介

3.2、特性

3.3、HTML中使用JS的方法

3.4、JS语法

3.4.1、注释

3.4.2、数据类型

3.4.3、变量声明

3.4.4、运算符

3.4.5、js语句

3.4.6、js数组

3.4.7、js函数

3.5、js如何获取元素

4、JQuery

4.1、简介

4.2、特点

4.3、JQuery的引入

4.4、JQuery的选择器

4.5、创建一个表格

4.6、总结

5、HTTP

5.1、什么是HTTP协议

5.2、HTTP协议详解

5.3、GET和POST的区别

6、Servlet

6.1、简介

6.2、如何开发一个Servlet程序

6.2.1、创建工程

6.2.2、Servlet在web.xml中的配置

6.2.3、运行程序进行测试

6.3、Servlet的继承关系

6.4、Request和Response

6.4.1、request

6.4.2、请求转发

6.4.3、response

6.4.4、重定向

7、JSP

7.1、JSP简介

7.2、JSP执行过程

7.3、JSP语法

7.3.1、模板元素

7.3.2、JSP表达式

7.3.3、JSP脚本

7.3.4、注释

7.3.5、JSP指令

7.4、EL表达式

7.5、Jstl


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/>     换行
&nbsp;    空格
&emsp;    中文状态下的空格

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)、跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如WindowsLinuxMacAndroidiOS等)。

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部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的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属性: 记录当前遍历是第几次

手过一遍,也是一次小小的回忆知识的过程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章