准备工作:
需要Tomcat8.0,MyEclipse,JDK
JSP是一种运行在服务器端的脚本语言,JSP页面又是基于HTML网页的程序,它是Java Web 开发技术的基础。
基本内容:
JSP页面的结构
JSP指令
脚本元素,注释和动作
JSP内置对象(9个)
JSP页面的基本结构(5个部分组成)
HTML元素
注释:包括JSP注释和HTML注释
脚本元素:声明,表达式,脚本片段等;
指令:包括page指令,taglib指令,include指令等;
动作:包括、、等动作标记
1.1 JSP注释
JSP注释,用户在客户端看不到(隐藏注释)
HTML注释,用户在客户端可以看到(输出注释)
1.2 脚本元素
1.2.1声明变量
变量的类型可以是Java允许的任何类型
例如下面的代码声明一个整型变量i和一个Date类型的变量
int i = 0;
java.util.Date date = new java.util. Date();
%>
1.2.2声明方法
例如下面的代码声明一个两个整数之和的方法
int add(int opt1, int opt2)
{
return opt1 + opt2
}
%>
注意:该声明是页面级的,它们在声明语句所在的页面有效。当服务器把JSP页面变为Java类时候,声明的变量标为类的成员变量,声明的方法变为类的方法,成员变量被所有用户共同使用,所以当多个用户访问JSP页面时候,改变成员变量的值,会影响其他用户使用此成员变量。
JSP页面中的表达式
表达式在Tomcat服务器运算后结果转换维字符串
JSP页面中的Java程序段
Java程序段中声明的变量为局部变量,不同用户进行访问时候,这些局部变量即使相同也互不影响。
for(int i = 1; i < 6; i++)
{
out.println("打印了" + i + "次
");
}
%>
JSP指令
JSP指令主要有page、include和taglib,JSP指令负责提供JSP页面的相关信息以及设置JSP页面的属性等。
1.page指令
contentType = "MIMETpye; charset = characterSet"
pageEncoding = "characterSet"
import = "package.class"
extends = "package.class"
buffer = "none|size kb|8kb"
errorPage = "URL"
autoFlush = "false|true"
isThreadSafe = "false|true"
isErrorPage = "true|false"
isELIgnored = "true|false"
%>
属性
language
JSP页面脚本语言
contentType
JSP页面的MIME类型和字符编码集,默认为“text/html;charset = ios-8859-1”
pageEncoding
JSP页面的字符编码
import
JSP页面所使用的Java API,
extends
JSP页面产生的Servlet继承自哪个父类,默认维HttpJspBase
buffer
设定输出流缓存的大小,默认为8kb
errorPage
JSP页面发生错误时网页被重定向指向的错误处理页面
autoFlush
指定输出流缓冲区的内容是否自动清除,默认为true
session
指定该JSP页面是否需要一个HTTP会话,默认维true
isThreadSafe
指定该JSP页面是否支持多个用户同时请求(即多线程同步请求),默认为true
isErrorPage
指定JSP页面是否维错误处理页面,默认维false
isELIgnored
指定是否忽略EL表达式,默认为false
info
该属性可以设置为任意字符串
例子:
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
例子
当前的系统日期为:
for(int i = 1; i < 6; i++ )
out.print("打印了"+i+"次
");
%>
运行结果
2.include指令
include指令是页面包含指令,在JSP页面中可以使用inclue指令包含另一个文件,包含的文件可以是HTML文件,也可以是HSP页面甚至是普通文本文件。
inclue指令只有一个属性,即file属性,file属性值是一个包含文件的URL。
include指令将会在JSP页面编译时插入包含的文件,它是静态的。
例子:
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
例子:
------------------------------------
这是主文件
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
>
包含页面sub
这是包含文件
注意两个JSP页面的Page指令的contentType属性值务必一致,否则将导致错误。
3.taglib指令
taglib指令的作用是指定该JSP页面使用自定义标签,使JSP页面更加个性化,其语法格式如下:
uri:指定自定义标签的路径
prefix:指定自定义标签的前缀
JSP动作
JSP动作标记有20多种,以下详细介绍一种
1.动作标记:将一个指定的页面包含到使用此动作标记的JSP页面中
嵌套的子标记
page:指定包含页面的相对路径(URL),或者表示相对路径的表达式
flush:如果使用flush属性,若该属性值为true,表示缓存将会被清空。
动作标记和include指令标记的作用非常相似,区别如下
include:指令是静态包含,执行时间是在编译阶段,引入的内容为静态文件,在编译为Servlet时和主页融合在一起。
动作标记是动态包含的,执行时间是在请求处理阶段,引入的内容在执行页面被请求时动态生成后再包含到页面中,
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.Date"
%>
>
例子:
以下是包含文件include.jsp中的内容:
-----------------------------------------
以下为主文件:
-----------------------------------------
测试include动作标记的用法
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
String date_cn = "";
String dateStr = "";
switch( cal.get(Calendar.DAY_OF_WEEK) ){
case 1:date_cn = "日";break;
case 2:date_cn = "一";break;
case 3:date_cn = "二";break;
case 4:date_cn = "三";break;
case 5:date_cn = "四";break;
case 6:date_cn = "五";break;
case 7:date_cn = "六";break;
}
dateStr = cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月" + cal.get(Calendar.DAY_OF_MONTH) + "日(星期" + date_cn + ")";
out.print(dateStr);
%>
运行第一个文件结果:
动作标记的作用是页面重定向,即跳到page属性指定的页面,该页面可以说一个HTML页面,jsp页面,甚至是一个程序段,其语法格式有下面两种。
在本例中,使用Math类的random()方法产生一个0~100的随机数成绩,使用动作标记跳转到forward.jsp页面,并且根据成绩是否及格传递不同的参数。
注意:在使用动作标记跳转页面时,其URL并不会随之改变为跳转后的页面地址,仍是跳转前的URL。此外,一旦执行了动作标记,那么当前页面的后续代码将停止执行,例如example3_5.jsp页面中标记后的代码将不会被执行,并且当刷新页面的时候会导致重复提交.
动作标记
属性
意义
id
引用的JavaBean在所定义的作用域内的名称,在此作用域内使用该id就代表所引用的JavaBean。注意id值的大小写,Java是严格区分大小写的。
class
所引用JavaBean的完整包路径,一般格式为"package.class"
scope
指定该JavaBean的作用域以及id变量名的有效范围,取值可以为page、request、session、application,默认值维page.
page
其作用在当前页面有效,当用户离开此页面时JavaBean无效,不同用户访问同一个页面作用域维page的JavaBean时,两个用户的JavaBean的取值是互不影响的,即一个用户改变自己的JavaBean属性不会影响其他用户。
request
作用在用户的请求期间有效,用户在访问Web网站期间可能会请求多个页面,如果这些页面有取值范围为request的JavaBean引用,那么在每个页面分配的JavaBean也是互不影响的;当Web服务器对该请求做出响应之后,该JavaBean无效。
session
在用户的会话期间有效,用户在某个页面改变了JavaBean的属性,会影响其他用户。
application
作用范围是整个Web应用
动作标记
通常与动作标记一起使用
value = "JavaBean属性的值| " />
动作标记
通常与动作标记一起使用
JSP内置对象
JSP提供了9种内置对象
内置对象
作用域
属性
request
request
表示HTTP协议的请求,提供对请求数据的访问,JSP页面可以在请求范围内共享数据
response
page
表示HTTP协议的响应,提供了访问响应报文的相关方法
page
page
代表JSP页面对应的Servlet实例
pageContext
page
表示JSP页面本身的上下文,它提供了一组方法用于管理具有不同作用域的属性
session
session
表示HTTP协议的会话,可以共享服务器与浏览器之间的会话数据,一旦关闭了浏览器,会话数据将自动销毁
application
application
代表应用程序上下文,允许JSP页面与同一应用程序中的Web组件共享数据
out
page
out提供输出流的访问
config
page
config提供了一组方法访问Web应用程序的配置文件web.xml
exception
page
表示异常对象,该对象含有特定JSP异常处理页面访问的异常信息
request对象
当客户端向Web服务器发送请求获取某种资源时,相当于向Web服务器发送了一个HTTP请求( request ),一个HTTP请求报文一般包括4个部分,即请求行,请求首部,空行和请求数据等。
request对象主要是用来获取客户端的请求信息,以获取通过HTTP协议传送给服务器端的数据。
request内置对象一些方法的使用
example3_6.jsp
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
例子
请输入内容:
result.jsp
contentType = "text/html;charset = UTF-8"
pageEncoding="UTF-8"
import="java.util.*"
%>
例子
//设置请求报文的字符编码为UTF-8,避免中文字符发生乱码
request.setCharacterEncoding("utf-8");
%>
从example3_6.jsp页面中传过来的值为:
客户端的IP地址为:
客户端的主机名为:
客户端的端口号为:
服务器的名称为:
服务器的端口号:
客户请求使用的协议为:
客户端提交信息的页面为:
客户端提交信息的长度为:
采用的信息编码为:
HTTP文件头中的User-Agent值为:
HTTP文件头中的accept值为:
Web应用的目录为:
运行结果: