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,不然没法编译。