(五)JSP语法详细介绍--jsp九大内置对象

1、jsp内置对象是指不用声明就能够在jsp页面的脚本部分直接使用的组件html

是JSP容器为每一个页面提供的Java对象,开发者能够直接使用它们而不用显式声明。JSP内置对象也被称为预约义变量。java

按照期做用分类为:web

    1.输入输出对象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;缓存

    2.做用域通讯对象 : HttpSession的session, ServletContext的application, PageContext的pageContext;tomcat

    3.servlet对象 : Object的page, ServletConfig的config;服务器

    4.错误对象 : Throwable的exception;  cookie

对象 描述 做用域
request HttpServletRequest类的实例,提供对客户端HTTP请求数据的访问 request
response HttpServletResponse类的实例,响应信息,用来向客户端输出数据。 page
out PrintWriter类的实例,用于把结果输出至网页上(提供对输出流的访问) page
session HttpSession类的实例,session对象用来跟踪在各个客户端请求间的会话。 session
application ServletContext类的实例,与应用上下文有关,经过向application中添加属性,则全部组成您web应用的JSP文件都能访问到这些属性。 application
config ServletConfig类的实例,该对象容许将初始化数据传递给一个jsp页面 page
pageContext PageContext类的实例,提供对JSP页面全部对象以及命名空间的访问 page
page 相似于Java类中的this关键字(jsp页面对应的servlet类实例) page
Exception Exception类的对象,表明发生错误的JSP页面中对应的异常对象 page

2、各个对象详解session

 

1.首先要了解JSP的四个做用域:app

application,session,request,page.jsp

名称 做用域
request 在当前请求中有效
application 在全部应用程序中有效,application做用域就是服务器或tomcat启动到关闭的整段时间,
page 在当前页面中有效,对于page对象的引用将在响应返回给客户端以后被释放,或者在请求被转发到其余地方后被释放。
session 在当前会话中有效

2.request经常使用方法

request.getParameter(String name)

用于获取客户端传送给服务器端的参数(一般是表单中的参数)。

request.getMethod()

获取客户端发起请求的方法

request.getProtocol() 

获取客户使用的协议

request.getServletPath()

获取客户提交信息的页面。

request.getHeader("accept")

获取HTTP头文件中的accept、accept-encoding和Host的值。

示例以下:

String strHeader =request.getHeader("accept")

request.getCookies()

获取客户端请求包含的全部cookie的集合

示例以下:

<%
	Cookie cookies[] = request.getCookies();
	for(int i = 0;i < cookies.length;i++){
		out.write("cookies名称:"+cookies[i].getName()+"\t\tcookies值:"+cookies[i].getValue()+"<br>");
	}
%>

request.setCharacterEncoding(String type)

重载正文中使用的字符编码。

若是提交请求的页面编码和响应输出页面的编码不一致,在处理中文时就会出现乱码,这个时候,通常使用 request.setCharacterEncoding (String type)来处理。

request.getRemoteAddr()

获取客户端的ip地址

request.getRemoteHost()

获取客户端主机名称

request.getServerName()

获取服务器名称

request.getServerPort()

获取服务器的端口号

2.response经常使用方法

response.setHeader(String name,String value)

将指定的参数名称和值设置到头信息中

示例以下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%response.setHeader("Cache-Control","no-store")%> //实现禁止页面缓存
<%response.setHeader("refresh","30")%> //定时每30秒自动刷新
<html>
	<head>
		<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
		<title>test</title>
	</head>
	<body>
	</body>
</html>

response.sendRedirect(String location)

把响应送到另一个位置进行处理(客户端跳转) 『request对象没法传递到新页面』

response .setCharacterEncoding(String type)

设置响应页面的字符编码

response.setContentType(String charset)

设置响应内容的类型

示例以下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
//设置响应内容类型为office xls类型,以便实如今客户端用Excel打开
<%response.setContentType("application/vnd.ms-excel");%>     
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1px" cellspacing="0" cellpadding="0" width="850px">
		<tr>
			<th>学号</th>
			<th>姓名</th>
			<th>专业</th>
		</tr>
		<tr>
			<td>11</td>
			<td>小马</td>
			<td>通讯</td>
		</tr>
	</table>
</body>
</html>

response.addCookie(Cookie cookie)

添加一个指定的cookie到响应中

示例以下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
	Cookie cookie = new Cookie("iborder","no1");
	response.addCookie(cookie);
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
	添加一个指定的cookie到本页面中
</body>
</html>

3.out经常使用方法

一般状况下,服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区,只有在下面三种状况下,才会把该缓冲区的内容输出到客户端:

(1)该jsp网页已经完成信息的输出;

(2)输出缓冲区已满;

(3)jsp中调用了out.flush()或response.flushbuffer()。

输出缓冲区能够由<%@ page buffer="1kb"%>来设定,当设置<%@ page buffer="none"%>时,表示不使用缓冲区,直接输出。也能够由response.setBufferSize()来设定缓冲区大小。

out.getBufferSize()

得到当前实际缓冲区的大小

out.clearBuffer()

清空当前缓冲区内容。若是已经有内容被输出,不会返回IO错误信息

out.clear()

清空当前缓冲区内容。若是已经有内容被输出,返回IO错误信息

out.flush()

马上输出缓冲区中的色内容

out.close()

先调用flush()功能,在关闭输出流,该方法会在jsp页面结束时自动调用。

out.print(String s)·     

输出字符串

out.println(String s)

输出字符串,并以换行符结束

示例以下:

<%@page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" buffer="8kb"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<p>当前缓冲区大小为<span><%=out.getBufferSize() %></span></p>
		<%
			out.flush();
			out.println("1不可见,由于下一句将调用out.clearBuffer()<br>");
			out.clearBuffer();
			out.println("2可见,由于接下来将调用out.flush(),再调用out.clearBuffer()<br>");
			out.flush();
			out.clearBuffer();
			out.println("3可见,由于接下来将调用out.close()<br>");
			out.close();
		%>
	</body>
</html>

运行结果:

 4.session经常使用方法

session对象用来保存单个用户访问时的一些信息。

服务器对每个客户端会话,分配一个不会重复的会话sessionID,以此来区分不一样用户,从而实现针对每一用户的请求,做出正确响应。

session.getId()

获取sessionID

session.setAttribute(String key,Object value)

将value放入索引关键字为key的字符串中

session.getAttribute(String key)

获取session对象中索引关键字为key的对象

session.removeAttribute(String key)

删除session对象中索引关键字为key的对象

session. isNew()

判断是不是一个新的客户。

示例以下:

(1)session.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<p>单击提交按钮查看存入的session</p>
		<form action="showsession.jsp" method="get">
			<% session.setAttribute("username", "iborder"); %>
			<p>保存username为<span><%="iborder" %></span></p>
			<input type="submit" name="submit" value="提交">
		</form>
	</body>
</html>

(2)showsession.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<p>取得username为<span><%=session.getAttribute("username") %></span></p>
	</body>
</html>

5.application经常使用方法

application对象实现了用户间数据的共享,可存放全局变量

表明JSP文件生成的异常对象,只能在引入了下面代码 的JSP文件中使用。

<%@ page isErrorPage="true"%>

application. setAttribute(String name,Object object)

在application中以name为关键字存入一个对象

application.get Attribute(String name)

从application中获取关键字 为 name的 对象

application.remove Attribute(String name)

从application中获取关键字 为 name的 对象

示例以下:

网站访问计数器

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<%
			String str = "";
			int i=1;
			if(application.getAttribute("count") == null){
				application.setAttribute("count", "1");
			} else{
				if(session.isNew()){
					str = application.getAttribute("count").toString();
					i = Integer.parseInt(str);
					application.setAttribute("count", Integer.toString(i+1));
				}				
			}
		%>
		<p>你是本站第<%=application.getAttribute("count") %>位访问者</p>
	</body>
</html>

6.config经常使用方法

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(经过属性名和属性值构成)以及服务器的有关信息(经过传递一个ServletContext对象)

String getServletName() 返回Servlet的名字
ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象
String getInitParameter(String name) 返回初始化参数的值
Enumeration getInitParameterNames() 返回Servlet初始化所需全部参数的枚举

7.pageContext经常使用方法

pageContext是页面上下文对象,提供了对JSP页面内全部的对象及名字空间的访问,PageContext类拥有getRequest,getResponse,getOut,getSession等方法,他至关于集成其余内置对象的功能。

JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession() 返回当前页中的HttpSession对象(session)
Object getPage() 返回当前页的Object对象(page)
ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
ServletResponse getResponse() 返回当前页的ServletResponse对象(response)
Exception getException() 返回当前页的Exception对象(exception)
ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config)
ServletContext getServletContext() 返回当前页的ServletContext对象(application)
void setAttribute(String name,Object attribute) 设置属性及属性值
void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值
public Object getAttribute(String name) 取属性的值
Object getAttribute(String name,int scope) 在指定范围内取属性的值
public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL
void removeAttribute(String name) 删除某属性
void removeAttribute(String name,int scope) 在指定范围删除某属性
int getAttributeScope(String name) 返回某属性的做用范围
Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举
void release() 释放pageContext所占用的资源
void forward(String relativeUrlPath) 使当前页面重导到另外一页面
void include(String relativeUrlPath) 在当前位置包含另外一文件

8.page经常使用功能

page对象就是指向当前JSP页面自己,相似于类中的this指针

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() 使一个线程处于等待直到被唤醒
void enterMonitor() 对Object加锁
void exitMonitor() 对Object开锁

9.exception对象

exception对象是一个异常对象,当一个页面在运行过程当中发生了异常,就产生这个对象。若是一个JSP页面要应用此对象,就必须把isErrorPage设为true,不然没法编译。

相关文章
相关标签/搜索