1.简介
JSP(全称JavaServer Pages),sun公司主导的一种动态网页技术,JSP在服务端运行,可以响应客户端的请求,根据请求内容动态的生成HTML、XML或其他格式文档的Web网页然后返回请求者。在JSP页面可以嵌入Java代码,JSP文件在运行时会被其编译器转换成更原始的Servlet代码,然后再由Java编译器来编译成能快速执行的二进制机器码。
2.特点
①能以模板化的方式简单、高效地添加动态网页内容。
②可利用JavaBean和标签库技术复用常用的功能代码。
③有良好的工具支持。
④继承了Java语言的相对易用性。
⑤继承了Java的跨平台优势,实现“一次编写,处处运行”。
⑥页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,方便开发维护。
⑦可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。
3.JSP页面组成
在 HTML 页面文件中加入 Java 程序段和 JSP 标签,即可构成一个 JSP 页文件,JSP 页面由 5 种元素组合而成。
普通的 HTML 标记符。
①JSP 标签,如指令标签、动作标签。
②变量和方法的声明。
③Java 程序段。
④Java 表达式。
4.执行原理
当服务器上的 JSP 页面被第一次请求执行时,服务器上的 JSP 引擎首先将 JSP 页面文件转译成 Java 文件,再将 Java 文件编译,生成字节码文件,然后通过执行字节码文件响应客户的请求。
5.搭建JSP开发环境
①安装jdk
②下载tomcat
tomcat最新版下载地址
下载好一直下一步就好,然后再浏览器输入localhost:8080出现
③使用开发工具eclipse在创建jsp项目。
Dynamic Web project——>在webContent下创建jsp文件——>控制台右键点击找到new选择Server
报错是因为没添加tomcat服务器,选中项目找到build path 选择 configure build path,
点击add libarary,选择Server RunTime,选择你的tomcat版本finsh即可
点击apply and close 应用并退出 ,就不会报错了。
6.第一个JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
第一个jsp界面
</body>
</html>
运行结果
7.JSP语法
7.1代码片段
<%代码片段%>,可以在代码片段写java变量、方法、表达式、
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int i = 10;
if(i>9){
out.print("true");
}
%>
</body>
</html>
7.2声明语句
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。
语法<%! java代码 %>
变量的类型可以是Java语言中所提供的任意数据类型。使用JSP声明语句声明的变量将来会转换成Servlet类中的成员变量,这些变量在整个JSP页面中都有效,因此也被称为JSP页面的成员变量。声明的方法在整个JSP页面有效,方法内声明的变量只在方法内有效。
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP声明语句示例</title>
</head>
<!--JSP声明语句 -->
<%!
public int a; //声明整型变量a
public String printStr(){ //声明方法printStr
return "JSP method";
}
%>
<body>
<%
out.println("a="+a); //输出a值
a++; //a自增
%>
<br>
<%
out.println(printStr()); //调用printStr()方法,输出其返回值
%>
</body>
</html>
7.3表达式
即在”<%=”和”%>”标记之间插入一个表达式,这个表达式必须能够求值,并且计算结果以字符串的形式发送到客户端显示出来。JSP表达式的值会作为HTML页面的内容。
如果表达式的值是一个字符串,则将表达式的值直接显示在页面上,否则会先将表达式转换为字符串。
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP 表达式</title>
</head>
<body>
<%!
String str="JSP expression"; //声明变量str
%>
<!--JSP表达式-->
<%=str%>
</body>
</html>
7.4 注释
JSP注释有两种,一种是可以在客户端显示的注释,称为HTML注释。
表示形式: <!-- 注释内容 -->
一种是发送到服务器端,在客户端不能显示的注释,称为JSP注释。
表示形式: <%--注释内容--%>
7.5 JSPScriptlet
JSPScriptlet是一段Java代码。当需要使用Java实现一些复杂的操作或控制时,JSP表达式往往不能满足要求,此时就需要用到JSP Scriptlet。
在JSP Scriptlet里声明的变量是局部变量,调用JSP Scriptlet时,会为局部变量分配内存空间,调用结束便释放变量占有的空间。
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP Scriptlet</title>
</head>
<body>
<%
String str="JSP Scriptlet"; //声明字符串
out.println(str); //输出字符串的值
%>
</body>
</html>
8. JSP三大指令
8.1 page指令
page是对整个页面配置信息的指令。
语法:<% @ page 属性…%
属性名称 用法
autoFlush 是否清除缓存,默认True,不用修改
ContentType 设置页面编码类型
pageEncoding 设置当前页面的字符编码集
import 导包、导类
session 页面是否能使用session(true/false)
isElIgnored 是否开启EL表达式(true/false)
language 页面的语言(默认为java)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" autoFlush="true" %>
<%@ page import="java.util.*" session="true" isELIgnored="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
8.2 include指令
文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP文件合并成一个新的JSP页面。还需要注意的是,如果被插入的文件发生了变化,则包含这个文件的JSP文件需要被重新编译。
<%@ include file="baozi.txt"%>
<%@ include file="baozi.html"%>
<%@ include file="baozi.jsp"%>
8.3 taglib指令
用来引用标签库并设置标签库的前缀。这个指令允许JSP页面使用用户自定义的标签,它也可以为标签库命名,标签在这个库中定义。taglib有2个属性,uri用来指定标签文件或标签库的存放位置,prefix用来指定该标签库所使用的前缀。
<%@ pagelanguage="java" contentType="text/html"pageEncoding="UTF-8"%>
<%--声明要引用的标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>taglib标签</title>
</head>
<body>
<%--使用JSTL标签输出--%>
<c:out value="taglibexample!"/>
</body>
</html>
9.JSP七大动作元素
JSP动作元素用来控制JSP的行为,执行一些常用的JSP页面动作。通过动作元素可以实现使用多行Java代码能够实现的效果,如动态插入文件、重用JavaBean组件、自定义标签等。
<jsp:include>
<jsp:forward>
<jsp:param>
<jsp:plugin>
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
9.1 include
<jsp:include>动作元素提供了一种在JSP页面中包含页面的方式,既可以包含静态文件,也可以包含动态文件。
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>jsp:include</title>
</head>
<body>
<jsp:include page="hello.jsp"></jsp:include>
</body>
</html>
hello.jsp
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%=(newDate()).toString() %>
9.2 forward
<jsp:forward>是一种用于页面重定向的动作元素,它的作用是停止当前页面的执行,而将客户端请求转交给另一个JSP页面。此操作是在服务器端进行的,不会引起客户端二次请求,因此浏览器的地址不会发生改变。
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>jsp:forward</title>
</head>
<body>
<%--这里会执行 --%>
<jsp:forward page="to_forward.jsp"></jsp:forward>
<%--这里不会执行 --%>
</body>
</html>
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>to_forward</title>
</head>
<body>
该页面为jsp:forward跳转的页面
</body>
</html>
9.3 param
<jsp:param>是一种提供参数的附属动作元素,它以“名-值”对的形式为其它动作元素提供附加信息,一般与<jsp:include>、<jsp:forward>和<jsp:plugin>联合使用。
1、<jsp:param>与<jsp:include>相联合:
param_include.jsp 代码:
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>jparam_include</title>
</head>
<body>
<!-- 使用jsp:include动作元素导入动态文件-->
<!-- 使用jsp:param动态元素传递参数 -->
<jsp:include page="param_sum.jsp">
<jsp:param value="220" name="number"/>
</jsp:include>
</body>
</html>
<%@ page language="java"contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>param_num</title>
</head>
<body>
<%
String str=request.getParameter("number"); //获取要累加的次数
int n=Integer.parseInt(str); //将字符串解析成带符号整数
int sum=0; //存放;累加和
for(int i=1;i<=n;i++){
sum+=i;
}
%>
<br>
整数和为:
<%=sum %>
</body>
</html>
<jsp:param>与<jsp:forward>相联合:
<%@ page language="java"contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>jsp:forward</title>
</head>
<body>
<!-- 转向另一个页面,传递参数-->
<jsp:forward page="userinfo.jsp">
<jsp:param value="Baolibin" name="userName"/>
<jsp:param value="23" name="userAge"/>
</jsp:forward>
</body>
</html>
<%@ page language="java"contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>用户信息</title>
</head>
<body>
<%
String name=request.getParameter("userName"); //获取名字
String age=request.getParameter("userAge"); //获取年龄
%>
<%="用户信息如下"%><br>
<%="用户名字:"+name%><br>
<%="用户年龄:"+age%>
</body>
</html>
jsp:forward 实现页面的跳转,并配合param动作实现跳转携带参数。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action=" " method="post" name="Form"> <!--提交给本页处理-->
用户名:<input name="UserName" type="text" /> <br/>
密 码:<input type="password" name="UserPwd" type="text" /> <br/>
<input type="submit" value="登录" />
</form>
<%
//根据name获得表单传来的值 name要和 表单中的name一致
String name=request.getParameter("UserName");
String pwd = request.getParameter("UserPwd");
//判断用户名密码不能为空,不为空则进行转发并携带参数
//为空的话转发的页面取值为空
if(name !=null && pwd !=null){
%>
<jsp:forward page="succ.jsp">
<jsp:param value="<%=name %>" name="name"/>
<jsp:param value="<%=pwd %>" name="pwd"/>
</jsp:forward>
<%}%>
</body>
</html>
跳转的界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name=request.getParameter("name");
String pwd = request.getParameter("pwd");
out.print("欢迎您:"+name+"您的密码:"+pwd);
%>
</body>
</html>
9.4 plugin
<jsp:plugin>动作元素可以将服务器端的JavaBean和Applet下载到客户端执行。
9.5 useBean
<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>这三个元素都是跟JavaBean有关。
<jsp:useBean>动作元素用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,它充分发挥了Java组件重用的优势,同时也提高了JSP使用的方便性。
<jsp:setProperty>在获取Bean实例之后,就可以用这个动作元素来设置和修改Bean中的属性值。
<jsp:getProperty>动作元素用来提取Bean中的属性值,并将其转换成字符串,然后输出。
<%@ page language="java"contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>JavaBean Test</title>
</head>
<body>
<!-- 创建jsp.User的实例,实例名为user -->
<jsp:useBean id="user" class="jsp.User"scope="page" />
<!-- 设置user的userName属性 -->
<jsp:setProperty property="userName" name="user"value="Baolibin"/>
<!-- 设置user的age属性 -->
<jsp:setProperty property="age" name="user"value="23"/>
用户信息:
<br>用户名:
<!-- 输出user的userName属性 -->
<jsp:getProperty property="userName" name="user"/>
<br>年龄:
<!-- 输出user的age属性 -->
<jsp:getProperty property="age" name="user"/>
</body>
</html>
package jsp;
public class User {
private StringuserName;
private int age;
//setter和getter方法
public StringgetUserName() {
returnuserName;
}
public void setUserName(String userName) {
this.userName= userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age =age;
}
}
10. JSP九大内置对象
10.1 request对象
request是javax.servlet.HttpSeverletRequest接口实现类的对象,代表从客户端用户发送过来的请求。
常用方法 方法介绍
String getParameter(String name) 返回name指定参数的参数值
String[] getParameterValues(String name) 返回包含参数name的所有值的数组
void setAttribute(String,Object) 存储此请求中的属性
Object getAttribute(String name) 返回指定属性的属性值
String getContentType() 得到请求体的MIME类型
String getProtocol() 返回请求用的协议类型及版本号
String getServerName() 返回接受请求的服务器主机名
int getServerPort() 返回服务器接受此请求所用的端口号
String getCharacterEncoding() 返回字符编码方式
void setCharacterEncoding() 设置请求的字符编码方式
int getContentLength() 返回请求体的长度(以字节数)
String getRemoteAddr() 返回发送此请求的客户端IP地址
String getRealPath(String path) 返回一虚拟路径的真实路径
String request.getContextPath() 返回上下文路径
index.jsp表单页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login.jsp" method="post">
姓名:<input type="text" name="name" />
密码:<input type="password" name="pwd"/>
<input type="submit" value="提交">
</form>
</body>
</html>
请求的页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录成功界面</title>
</head>
<body>
<%
//处理编码格式
request.setCharacterEncoding("utf-8");
//获得传来的值
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
out.print("用户名:"+name+"\t密码:"+pwd);
out.print("<br>");
out.println("请求的字符编码格式为:"+request.getCharacterEncoding());
out.print("<br>");
out.println("请求内容的长度:"+request.getContentLength());
out.print("<br>");
out.print("服务器主机名字:"+request.getServerName());
out.print("<br>");
out.print("请求体的MIME类型:"+request.getContentType());
out.print("<br>");
out.print("请求用的协议类型及版本号:"+request.getProtocol());
out.print("<br>");
out.print("服务器接受此请求所用的端口号:"+request.getServerPort());
out.print("<br>");
out.print("请求的客户端IP地址:"+request.getRemoteAddr());
out.print("<br>");
out.print("虚拟路径的真实路径:"+request.getRealPath("index.jsp"));
out.print("<br>");
out.print("上下文路径:"+request.getContextPath());
%>
</body>
</html>
10.2 response对象
response对象是对客户端的请求进行一个响应,作用于jsp页面。
方法名 作用
sendRedirect(“需要重定向的页面的URL”); 重定向网页不携带数据
setHeader(“Cache-Control”,“no-store”); 禁用缓存
setHeader(“refresh”,“time”); 设置页面自动刷新单位/秒
addCookie( Cookie cook ); 添加一个Cookie对象,用来保存客户端用户信息
addHeader 添加Http文件指定名字头信息
void setContentType(String type); 设置HTTP响应的contentType类型
response.getWriter().print(); 向客户端发送内容满足下面3种情况之一,就会把缓冲区的内容写到客户端。
1、JSP页面的输出信息已经全部写入到了缓冲区
2、缓冲区已满
3、调用了response的flushBuffer或者out的flush方法。
演示几个经常用到的方法
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//重定向到指定页面不携带数据,地址会改变
response.sendRedirect("welcome.jsp");
//禁用缓存
response.setHeader("Cache-Control", "nostore");
//设置页面自动刷新单位为秒
response.setHeader("refresh", "4");
//添加一个cookie对象用来保存客户端信息
Cookie cookie = new Cookie("name","张三");
response.addCookie(cookie);
//添加http头文件信息
response.addHeader("hello", "word");
//设置HTTP响应的contentType类型
response.setContentType("text/html;charset=utf-8");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
cookie的值:${cookie.name.value}
</body>
</html>
10.3 session对象
session对象用来保存用户信息,跟踪用户操作状态,session保存在服务端,底层使用了Map类型进行数据的存取,即以key-value形式。
session 常用方法
long getCreationTime() 返回session的创建时间
public String getId() 返回session创建时的jsp引擎为它设置的唯一ID号
public Object setAttribute(String name, Object value) 使用指定名称将对象绑定到此会话
public Object get Attribute(String name) 返回此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回Null
String[] getValueNames() 返回一个包含此session中所有可用属性的数组
int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消(单位秒)
void removeAttribute(String name) 清除指定名称的session
void invalidate() 清除所有session
session和cookie的区别
1、session 在服务器端,cookie 在客户端(浏览器)
2、session 默认被存在在服务器的一个文件里(不是内存)
3、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4、session 可以放在 文件、数据库、或内存中都可以。
5、用户验证这种场合一般会用 session
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置一个session用来保存用户信息
session.setAttribute("name", "张三");
//设置session生存时间
session.setMaxInactiveInterval(3000);
response.sendRedirect("welcome.jsp");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=request.getSession().getAttribute("name") %>
<br>
<a href="zs.jsp">注销session</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//根据session名字清除session
session.removeAttribute("name");
//清空所有session
session.invalidate();
%>
</body>
</html>
10.4 out对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
out常用方法
方法名称 作用
print() 输出各种类型数据到页面。
clear() 清除缓冲区的内容,在flush之后会抛异常
clearBuffer() 清除缓冲区的内容,在flush之后不会抛异常
flush() 将缓存区内容输出到客户端
colse 关闭输出流
getBufferSize() 获得缓冲区大小
getRemaining 获得缓冲区还有多少内容可以用
out和response.getWriter()的区别
①对象类型不同:内置bai对象out的类型是JspWriter;response.getWrite()返回的du类型是PrintWriter。
②获取方bai式不同:JspWriter是JSP的内置对象,直接使用即可,对象名out是保留字,也只能通过out来调用其相关方法。此外还可以通过内置对象pageContext.getOut();获得;PrintWriter则是在用的时候需要通过内置对象response.getWriter();获得。
③ JspWriter的print()方法会抛出IOException;而PrintWriter则不会。
④JspWriter和PrintWriter都继承自java.io.Writer,但JspWriter是抽象类,而PrintWriter不是。最主要的区别是:如果在同一jsp或Servlet文件中同时使用了JspWriter对象和PrintWriter对象,在调用print或者println方法后的执行情况不同!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//输出内容到页面
out.print("hello");
out.print("<br/>");
out.print("缓冲区大小:"+out.getBufferSize());
out.print("<br/>");
out.print("缓冲区剩余可用空间:"+out.getRemaining());
%>
</body>
</html>
10.5 application对象
application是javax.servlet.ServletContext接口实现类的对象,用于将信息保存至服务器,作用范围类似于java中的全局变量,每一个web程序对应一个applicatio对象,一旦服务器启动application生命周期直至服务器关闭为止。
常用方法
String getAttribute(String name) 根据属性名称获取属性值。
Enumeration getAttributeNames() 获取所有的属性名称。
void setAttribute(String name, Object object) 设置属性,指定属性名称和属性值。
void removeAttribute(String name) 根据属性名称删除对应的属性。
ServletContext getContext(String uripath) 获取指定URL的ServletContext对象。
String getContextPath() 获取当前Web应用程序的根目录。
String getInitParameter(String name) 根据初始化参数名称,获取初始化参数值。
int getMajorVersion() 获取Servlet API的主版本号。
int getMinorVersion() 获取Servlet API的次版本号。
String getMimeType(String file) 获取指定文件的MIME 类型。
String getServletInfo() 获取当前Web服务器的版本信息。
String getServletContextName() 获取当前Web应用程序的名称。
void log(String message) 将信息写入日志文件中。
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 设置属性 -->
<% application.setAttribute("name", "application");%>
<br/>
<!-- 获得属性 -->
<%=application.getAttribute("name")%>
<%-- <%=application.removeAttribute("name")
//根据属性name删除属性
%> --%>
<!-- 获得根当前目录路径 -->
根目录路径:<%=application.getContextPath() %>
服务器版本信息:<%=application.getServerInfo() %>
<br/>
<!-- 统计用户访问量 -->
<%
int n=0;
//num属性为空就把访问量赋值为1
if(application.getAttribute("num")==null)
n=1;
//不为空就访问一次就+1
else
{
String str=application.getAttribute("num").toString();
//getAttribute("num")返回的是Object类型
n=Integer.valueOf(str).intValue()+1;
}
//设置属性
application.setAttribute("num",n);
out.println("您好,您是第"+application.getAttribute("num")+"位访问客户!");
%>
</body>
</html>
10.6 config对象
config 对象是 javax.servlet.ServletConfig 类的实例,表示 Servlet 的配置信息。当一个 Servlet 初始化时,容器把某些信息通过此对象传递给这个 Servlet,这些信息包括 Servlet 初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个 ServletContext 对象),config 对象的应用范围是本页。
常用方法
getServletContext() 返回所执行的 Servlet 的环境对象
String getServletName() 返回所执行的 Servlet 的名字
String getInitParameter(String name) 返回指定名字的初始参数值
Enumeration getlnitParameterName() 返回该 JSP 中所有初始参数名,一个枚举
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
servlet实例名称:
<%=config.getServletName() %>
<br>
servlet环境对象 :<%=config.getServletContext() %>
<br>
所有参数初始参数名:
<%=config.getInitParameterNames() %>
</body>
</html>
10.7 page对象
page对象是java.long.Object类的实例。它指向当前JSP页面本身,有点像类中的this指针,用于设置JSP页面的属性,这些属性将用于和JSP容器通信,控制所生成的servlet结构。
常用方法
class getClass() 返回此Object的类
int hashCode() 返回此Object的hash码
boolean equals(Object obj) 判断Object是否与指导的Object对象相等
void copy(Object obj) 把此Object拷贝到指定的Object对象中
Object clone() 克隆此Object对象
String toString() 把此Object对象转换成String类的对象
void notify() 唤醒一个等待的线程
void notifyAll() 唤醒所有等待的线程
void wait(int timeout) 使一个线程处于等待直到timeout结束或唤醒
void wait() 使仪的线程处于等待直到被唤醒
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
哈希码:<%=page.getClass() %>
<br>
对象是否相等:<%=page.equals(page) %>
<br>
转换为String类的对象:<%=page.toString() %>
</body>
</html>
10.8 pageContext对象
pageContext对象是javax.servlet.jsp.PageContext类的实例对象,用来代表整个JSP页面。它代表页面上下文,该对象主要用于访问 JSP 之间的共享数据,使用pageContext可以访问page、request、session、application范围的变量。
常用方法
JspWriter getOut(); 返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession(); 返回当前页面中HttpSession对象(session)
Object getPage(); 返回当前页面的Object对象(Object)
ServeletRequest getRequest(); 返回当前页面的ServletRequest对象(request)
ServeletResponse getResponse(); 返回当前页面的ServletResponse对象(response)
void setAttribute(String name,Object attribute); 设置属性及属性值
void getAttribute(String name,int scope); 在指定范围内取属性的值
int getAttributeScope(String name); 返回某属性的作用范围
void forward(String relativeUrlPath); 使当前页面重导到另一页面
void include(String relativeUrlPath); 在当前位置包含另一文件
pageContext可以获取所有的内置对象
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
被使用的JspWriter流:<%=pageContext.getOut() %>
<br>
页面中的session:<%=pageContext.getSession() %>
<br>
<!-- 设置值 -->
<%pageContext.setAttribute("name", "zs"); %>
<!-- 取值 -->
<%=pageContext.getAttribute("name") %>
</body>
</html>
10.9 exception对象
exception对象表示的就是JSP引擎在执行代码过程中抛出的种种异常,只有在page指令中设置isErrorPage="true"的页面中才能使用。
常用方法
String getMessage() 返回描述异常的消息 String toString() 返回关于异常的简短描述消息 void printStackTrace() 显示异常及其栈轨迹 Throwable FillInStackTrace() 重写异常的执行栈轨迹
11 四大作用域
作用域范围从大到小
application | 在所有应用程序中有效 |
---|---|
session | 在当前会话中有效 |
request | 在当前请求中有效 |
page | 在当前页面有效 |
12 表单提交
通过form表单的 action=“提交的地址”、以及提交方式method="(默认post)post或者get"
get方式提交会在地址栏显示提交的数据不安全,而且提交的数据最多不超过2KB。安全性较低但效率比post方式高,适合提交数据量不 大、安全性不高的数据。
<%@page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="enoor.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<form action="welcome.jsp" method="get">
姓名:<input type="text" name="name">
<br>
年龄:<input type="text" name="age">
<br>
爱好:<input type="checkbox" name="habit" value="打篮球">打篮球
<input type="checkbox" name="habit" value="听音乐">听音乐
<input type="checkbox" name="habit" value="爬山">爬山
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//解决页面乱码问题
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取index.jsp页面传过来的值
String name=request.getParameter("name");
String age=request.getParameter("age");
out.print("<br>");
out.print("姓名:"+name);
out.print("<br>");
out.print("年龄: "+age);
out.print("<br>");
String [] habit=request.getParameterValues("habit");
for(int i=0;i<habit.length;i++){
out.print("爱好:"+habit[i]);
}
%>
</body>
</html>
13 JSPEL表达式
E L 简称(Expression Language)目的是为了简化jsp中取值,提高了代码的耦合性。
语法:${}
EL表达式 支持基本数据类型和null。
使用el表达式取不同类型的值