JSP内置对象详解

由于笔记是使用word做的,所以在copy过来时丢失了标题,影响阅读,请下载源文档阅读:

链接:请点击这里下载文档(密码:diigv5)

JSP内置对象的使用方法

在JSP中,因为JSP对部分java对象做了声明,所以不用重新声明这些对象就可以使用。原先就声明好的对象有:out/page/request/response/sesison/application/config/pageContext/excetpion几个。

  • out对象

out对象主要用来向客户端输出各种和数据类型的内容,并且管理应用服务器上的输出缓冲区,输出缓冲区一般是8KB,可以通过页面指令来改变默认值。在使用out对象进行操作时,可以对缓冲区进行操作,及时清除缓冲区汇总的残余数据。为其它输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

out对象常用的方法有:

方法名称

方法描述

out.print(数据类型)或out.println(数据类型)

前者输出后不换行

out.newLine()

输出一个换行符

out.flush()

输出缓冲里的数据

out.close()

关闭输出流

out.clearBuffer()

清空缓冲区

out.clear()

清除屏幕显示数据

out.getBufferSize()

获得缓冲区的大小

out.getRemaining()

获得缓冲区没有被使用的空间的大小

out.isiAutoFlush()

返回布尔值

详解:

  • print()方法

print()方法是用来将数据输出到网页上,输出的数据可以是整型、字符型、布尔型等待。

使用格式如:

out.print(“你好!”);

pirnt()可以输出基本数据类型和引用数据类型,此外也可以输出一个网页。

  1. 输出数据类型与引用类型

当输出引用类型如一个对象时,将会调用这个对象的toString方法。

  1. 输出网页(带HTML格式的数据)

示例如:

<%

out.print(“

标题1

”);

out.print(“

标题2

”);

out.print(“字体1”);

out.close();

%>

 

 

  • getBufferSize()方法

使用此方法可以获得输出缓冲区的大小,默认值为8KB,大小可以通过page指令来调整。它的单位是字节

返回值为int型。

  • getRemaining()方法

此方法可以取得数据写进缓冲区后,剩余缓冲空间的大小。缓冲区中的数据室友out对象的print()方法写进去的,JSP翻译后,所有print()方法输出的数据会先进入缓冲区中,因此数据就占了一定的缓冲空间。

  • isAutoFlush()方法

JSP中的页面属性autoFlush设置为True时,此方法返回True,反之同理。一般页面属性autoFlush的默认值为TrueautoFlush即缓冲区自动刷新,可以通过page指令设置。

  • clear()方法

这个方法可以清除print()方法输出到浏览器显示的数据。

  • clearBuffer()方法

调用此方法可以将缓冲区中的数据清除掉,调用此方法不会有任何结果显示。

  • flush()方法

这个方法将缓冲区中的数据输出来,它存在的意义是,当需要输出一些数据后清空缓冲区(调用clearBuffer()方法)时,如果不调用此方法,那么既是有print方法,print方法也无法输出。

例子:

out.print(“数据”);

out.clearBuffer();

这段代码运行的结果将不会输出“数据”二字。

而是使用flush()方法后:

out.print(“数据”);

out.flush();

out.clearBuffer();

此时“数据”二字将会被输出,并且缓冲区被清空。

  • close()方法

此方法用来关闭输出流,使用此方法后,out.print()方法与out.println()方法均不能向网页上输出数据。

 

 

 

  • page对象

page对象是为了执行当前页面应答请求而设置的Servlet实体,即显示JSP页面自身。只有在JSP页面才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,可以看做是this变量的别名,因此该对象对于开发JSP比较有用。

想想<% …%>中的定义的变量,它们是哪个类的成员变量?没错就是当前page的,当使用this时,this代表的就是当前page

  • page对象的常用方法

page对象的常用方法

方法名

函数描述

page.getClass()

获得page对象的类

page.hashCode()

获得page对象的hash码

page.toString()

将此page对象转换为String对象

page.notify()

唤醒一个等待的线程

page.notifyAll()

唤醒所有等待的线程

page.wait()

使一个线程处于等待直到被唤醒

page.wait(long timeout)

使一个线程处于等待直到timeout结束或被唤醒

 

  • request对象

request对象是客户端向服务器发出的请求,可以通过这个对象了解客户端的信息。例如,获得客户端提交的数据、获得客户点的IP等。该对象继承了ServletRequest接口,被包装成HTTPServletRequest接口。通过getParamevter()方法可以的到request的参数,通过GET、POST、HEAD等方法可以得到request的类型,通过Cookie、Referer等可以得到请求的Http头。

Request的常用方法如:

方法名称

方法描述

isUserInRole(String role)

判断认证后的用户是否属于逻辑role中的成员

getAttribute(String name)

返回有name指定的属性值,如果指定的属性不存在,将返回一个null

getAttributeNames()

返回request对象所有属性的名字集合,结果是一个Cookie数组

getCharacterEncoding()

返回请求中的字符编码方式

getContentLength()

返回请求的Body的长度,如果不确定长度,返回-1

getHeader(String name)

获得HTTP协议定义的文件头信息

getHeaders(String name)

返回指定名字的request Header的所有值,其结果是一个枚举的实例

getInputStream()

返回请求的输入流,用于获得请求中的数据

getMethod()

返回客户端向服务器传送数据的方法,如get/post/header/trace等

getParameter(String name)

获得客户端传送给服务器端的参数值,该参数是由name指定的,通常是表单中的参数

getParameterValue(String name)

获得指定参数的所有值,参数由name指定

getProtocol()

获得客户端向服务器端传送数据所依据的协议名称

getQueryString()

获得查询字符串,该字符串是由客户端以get方法向服务器端传送的

getRequestURI()

获得发出请求字符串的客户端地址

getRemoteAddr()

获取客户端的IP地址

getRemoteHost()

获取客户端的机器名称

getSession(boolean create)

返回和请求相关的session。create参数是可选的。当参数create为True且客户端还有创建session时,会创建一个新的session

getServerName()

获得服务器名字

getServerPath()

获得客户端所请求的脚本文件的路径

getServerPort()

获得服务器端口号

removeAttribute(String name)

删除请求中的一个属性

setAttribute(String name,java.lang.Object obj)

设置请求中名字为name的参数的值为java.lang.Object中的obj

  • getParameter()方法

大部分的Web程序都需要用户与网站进行交互。用户填写表单后,需要把数据提价给服务器处理。request对象的getParameter()方法就可以用来获取用户提交的数据。

getParameter()方法的使用格式如:

String name = request.getParameter(String name);

其中参数name与HTML标记的name属性对应(即名字相同),如参数值不存在,则返回一个null值。该方法的返回值为String型。

例子:

在HTML页面中定义一个输入框存储的属性为textOne:

那么接收这个属性值就需要用到getParameter()方法:

String textOne=request.getParameter(textOne);

 

强调一点:JSP表单提交方式为Post时提交的数据字符编码是“IOS-8859-1,这种编码方式不能显示出中文(中文会显示乱码),将中文数据转化为能够辨识的方法:

String textOne=request.getParameter(textOne);

String name=new String(text.getBytes("ISO-8859-1"),"UTF-8");

//转为utf-8格式并存储在name变量中

 

  • setAttribute()和getAttribute()方法

在请求转发的时候,经常希望把一些数据带到转发后的的页面处理。这时,可以使用request对象的setAttribute()方法设置在request范围内存取数据。

setAttribute()方法使用格式如:

request.setAttribute(“name”,obj);

//通过此标识将携带参数的请求发出去

name:键,String类型,在转发后的页面取数据时,就通过这个键来获取数据。参数obj是键值,为Object。它代表需要保存在request范围内的对象。

getAttribute()方法使用格式如:

request.getAttribute(“String name”); //千万要加引号

name:键名

 

在页面使用request对象的request.setAttribute()方法可以把数据obj设定在request范围内。请求转发后的页面使用request.getAttribute()方法去的数据obj。

 

这两个方法的存在的意义是:将java代码中的对象使用request传送。我们在前面使用的getParameter()适用于html属性的传输。

 

注意:在使用setAttribute()方法传送数据时,必须要写的,不然数据无法传过去。

 

标识限定了请求里面参数的取值范围为page的值代表的页面。

  • removeAttribute()方法

request.removeAttribute(“name”);

request的作用页面(接收页面)使用此方法可以将name对应的属性移除,注意是移除属性,而不是属性的值。

质疑输出该属性将按照不存在此属性的输出结果处理,显示为null

  • getMethod()方法

使用此方法获得客户端向服务端传送数据的方法,如post、get、trace和header等。

getMethod()方法的使用格式如:

string method=request.getMethod(); //返回值为String类型

 

  • getProtocol()方法

使用此方法可以获得客户端向服务端传送数据所依据的协议版本号。

使用格式如:

String agreement = request.getProtocol();

运行结果示例:

HTTP/1.1

 

  • getRequestURI()方法

使用此方法获得发出请求的客户端的地址。

使用格式如:

String url=request.getRequestURI();

结果示例:

Attribute/getAttribute.jsp

 

  • getRemoteAddr()方法

使用此方法获得发出请求的客户端的IP地址。

使用格式如:

String ipAddr=request.getRemoteAddr(); //remote意为“远程的;遥控器”

在服务器和客户端都在同一设备上时,使用此方法获得的结果是:

0.0.0.0.0.0.0.1

这是ipv6的ip地址。

  • getServerPort()方法

通过此方法可以获得服务器的端口号。

使用格式如:

int port = request.getServerPort();

可见返回值为int型。

  • getServerName()方法

通过此方法可以获得服务器的名称,如果是本地服务器,则为localhost。

使用格式如:

String hostName=request.getServerName();

 

 

 

 

  • response对象

response对象和request对象的性质相反,它所包含的是服务器向客户端做出的响应。实现过程中response被包装成HttpServletResponse接口,它封装可JSP产生的响应,然后被发送到客户端以响应客户端的请求。response对象包含以下几个内容:MIME类型的文件、编码方式、保存cookie、连接到其他URL。原理是它由容器生成,作为service()方法的参数被传入JSP,且输出流是缓冲的,因此,可以设置HTTP状态码和response头。response独享的常用方法如表:

方法名称

方法描述

addCookie(Cookie cook)

添加一个cookie对象,用来保存客户端的用户信息

addHeader(String name,String value)

添加HTTP文件头信息,该Header将传送到客户端去,如果已经存在同名的Header,则会覆盖已有的Header

containHeader(String name)

判断制定名字的HTTP文件头是否存在,返回布尔值

encodeURL()

使用sessionld来封装URL,如果没有必要封装URL,则返回原值

flushBuffer()

强制把当前缓冲区内容发送到客户端

getBufferSize()

返回缓冲区的大小

getOutputStream()

返回到客户端的输出流对象

sendError(int)

向客户端发送错误信息,例如:404是指网页不存在或者请求的页面无效

sendRedirect(String location)

把响应发送到另一个位置进行处理

setContentType(String contentType)

设置响应的MIME类型

getWriter()

此方法返回一个PrintWriter对象

gerCharacterEncoding()

获得此时相应采用的字符编码类型

setDateHeader(String heademame,long date)

把指定的头名称以及日期设置为响应头信息,其中日期用long型的值表示

setHeader(String headername,String value)

此方法使用指定的头名称以及相应的值来设置头信息。可以覆盖原信息。如果头信息已经被发送出去,此方法设置将被忽略

下面将详细介绍常用的方法:

  • sendRedirect()方法

此方法为请求重定向。

当请求被处理完后,希望给客户端返回一个指定的页面时,就可以使用这个方法。

使用格式如:

response.sendRedirect(String JSPFileName); //JSPFileName可以是一个地址链接上文件名

如:hello/aka.jsp

JSPFileName参数: String类型,表示一个JSP文件的名称。

举个例子:

第一步:创建名为index.jsp的页面,该页面实现重定向页面的功能,代码如:

<%

response.sendRedirect("hello.jsp");

%>

第二步:创建名为hello.jsp的页面,该页面实现重定向结果,代码如:

..

Surprise MotherFucker!

强烈注意:

本方法为请求重定向,是生成一个新的请求,与标识不同,是请求转发。

  • setHeader()方法

该方法设定指定名称的HTTP文件头里面属性的值

使用格式如:

setHeader(“String name”,”String value”); //注意要有引号!

name:响应类型的名称,value为响应类型的值。

实例:

使用此方法设置浏览器隔3秒刷新一次的功能:

<%

respons.setHeader(“Refresh”,”3”);

%>

..

 

  • addCookie()方法

该方法在客户端添加一个cookie,用来保存客户端信息。

addCookie()方法的使用如下:

response.addCookie(Cookie cookie)

cookie是Cookie类的对象。

 

  • session对象

session是用于保存客户信息而分配给客户的对象,HTTP协议不能保存客户端请求信息的历史记录,因此为了弥补这一缺点,生成一个session对象,这样服务器与客户端之间的连接就会一直保持下去,但是在一定时间内,如果客户端不向服务器发送应答请求,系统默认在30分钟内,session对象就会自动消失。这个时间值可以更改。

session通过JSP容器变换为了javax.servlet.http.HttpSession对象,它们的作用一致。

 

session对象的常用方法:

方法名称

方法描述

setAttribute(“String name”,”Object value”)

设置指定名称的属性值为value,并将其存储在session对象中

getAttribute(“String name”)

获取与指定名字name相联系的属性

getAttributeName()

获取session对象中存储的每一个属性对象,其结果为一个枚举类型的对象

getCreationTime()

返回session对象被创建的时间,最小单位为千分之一秒

getLastAccessedTime()

返回和当前session代表的客户端最后发送请求的时间,最小单位为千分之一秒

setMaxInactiveInterval(int number)

该方法保存session数据的时间,参数number为秒数

getMaxInactiveInterval()

返回总时间秒,负值表示session永远不会超时,它的值为session对象的生存空间

invalidate()

销毁这个session对象,使得和它绑定的对象都失效

isNew()

该方法是判断当前用户是否为新用户,可以判断用户是否刷新了当前页面,它的返回值为Boolean型

removeAttribute(“String name”)

删除与指定name相联系的属性

setAttribute(“String name”,“Object value”)

设置指定名字name的属性值value,并将之存储在session对象中

下面将详细对session对象的常用方法进行讲解:

  • setAttribute()方法与getAttribute()方法

与request中的两个同名方法不同,区别如

  1. request中set方法需要为一个存在的object设置键Key,而session中相当于new一个String型的属性,且给它赋值一个String型value。
  2. request中set的属性只存在于此次request中,而session中使用set设置的属性会的默认生存时间为1800秒,并且可以自行设置。
  3. request中使用set方法必须使用来发送请求,而session不需要。

 

setAttribute()方法的使用格式如:

session.setAttribute(“String name”,”String value”);

而getAttribute(“String name”)方法为从session中获得与name相匹配的属性的值返回,没有这个属性,则返回null。

  • invalidate()方法

invalidate:使无效

使用此方法来销毁所有使用setAttribute()创建的属性。

使用方法如:

session.invalidate();

 

  • removeAttribute()方法

此方法与invalidate()方法相对,并不是删除所有的属性,而是指定的由setAttribute()方法设置的属性。

使用格式如:

session.removeAttribute();

 

  • setMaxInactiveInterval()和getMaxInactiveInterval()方法

setMaxInactiveInterval(int value)这个方法用来设置session中通过setAttribute()方法设置的属性的生存时间,单位是秒。

getMaxInactiveInterval()方法用来获取session中通过setAttribute()方法设置的属性的生存时间。

使用格式如:

session.setMaxInactiveInterval(int value);

session.getMaxInactiveIntervan();

 

  • isNew()方法

该方法返回的是一个布尔值,True表示当前session对象为新创建的。

此方法使用格式为:

session.isNew();

 

  • application对象

application对象用于保存应用系统中的共有数据,服务器启动并且自动创建application对象以后,只要没关闭服务器,这个对象将一直存在,并且所有用户可以共享application对象。session对象和用户会话有关,不同用户的session是完全不同的的对象,而用户的application对象都是统一个对象,即共享这个内置的application对象。

可以把application对象看作是当前运行应用实例(Servlet)的实例。

application对象的常用方法如表所示:

方法名称

方法描述

getAttribute(String name)

返回由name指定application对象的属性的值

getAttributeName()

返回由name指定名字的application对象的某个属性的初始值

getServerInfo()

返回当前服务器版本的信息

gsetAttribute(String name,Object obj)

设置由name指定名字的application对象的属性值为obj

removeAttribute(String key)

通过关键字来删除一个对象的信息

getRealPath(String path)

返回虚拟路径的真实路径

getContext(String URLPath)

返回执行Web应用的application对象

getMajorVersion()

返回服务器支持的servlet API最大版本号

getMinorVersion()

返回服务器支持的Servlet API最小版本号

getMimeType(String file)

返回指定文件的MIME类型

getResource(String path)

返回指定资源的输入流

getResourceDispathcher(String URLPath)

返回指定资源的RequestDispathcher

getServlet(String name)

返回指定名称的Servlet

getServlets()

返回所有的Servlet,返回类型为枚举型

getServletNames()

返回所有的Servlet名称,返回类型为枚举型

log(String msg)

把指定信息写入到Servlet的日志文件中

log(String msg,Throwable)

把栈轨迹以及给出的Throwable异常的说明信息写入Servlet的日志文件

下面将介绍application对象的常用方法:

  • setAttribute()和getAttribute()方法

1.setAttribute(String name,Object obj)   此方法与request对象中的同名方法用法相同。

2.getAttribute(String name)此方法与request对象中的同名方法用法相同。

  • getServerInfo方法

此方法的返回值是JSP使用的服务器相关信息。

使用方法如:

application.getServerInfo();

 

  • getRealPath()方法

此方法返回当前页面的真是路径。

使用方法如:

application.getRealPath(String path);

参数说明:页面文件的名称

使用效果:

当前页面的真实路径:E:\软件数据\EclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\response\index.jsp(这个是通过eclipse部署的tomcat服务器的实例,所以路径有隐藏)

 

  • removeAttribute()方法

此方法和request对象中的同名方法的使用方法一模一样。

  • config对象

config对象被封装成javax.servlet.ServletConfig接口,表示Servlet的配置。当一个Servlet初始化时,容器把某些信息通过此对象传递给Servlet。

config对象的常用方法:

方法名

方法描述

getServletContext()

返回执行者的Servlet上下文

getServletName()

返回Servlet的名字

getInitParameter()

返回名字为name的初始参数值

getInitParameterNames()

返回JSP所有初始参数的名字

 

  • pageContext对象

该对象提供存取所有关于JSP程序执行时期所要用到的属性方法,它被封装为javax.servlet.jsp.pageContext接口,为JSP页面包装页面的上下文,管理对于属于JSP中可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的,JSP页面里可以直接使用pageContext对象的句柄,pageContext对象的getXXX()、setXXX()和findXXX()方法可以用来根据不同的对象范围实现对这些对象的管理。

 

pageContext对象的常用方法如:

方法名称

方法描述

forward(String realtiveUtlpath)

把页面转发到另一个页面或者Servlet组件上

getAttribute(String name[,int scope])

scope参数可选。该方法用来检索一个特定的已经命名的对象范围。

getException()

返回当前你的exception对象

getRequest()

返回当前的request对象

getResponse()

返回当前的response对像

getServletConfig()

返回当前页面的ServletConfig对象

invalidate()

返回ServletContext对象,全部销毁

setAttribute()

设置默认页面范围或特定对象范围之中的已命名对象

removeAttribute()

删除默认页面范围或特定对象范围之中的已命名对象

举个实例:

通过pageContext对象中的setAttribute()方法设置页面中的共享数据,并在其它页面获得此数据。

第一步:

创建名为index.jsp的页面,该页面主要实现一个登陆功能,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

Insert title here

 

 

        

        

 

请输入姓名:

第二步:创建名为PageContext.jsp的页面,该页面主要是从index.jsp获得数据,通过pageContext对象中的setAttribute()方法进行保存,代码如:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

Insert title here

<%

ServletRequest req = pageContext.getRequest();

String name=req.getParameter("name");

out.print("name="+name);

//pageContext.setAttribute("userName", name);

pageContext.getServletContext().setAttribute("sessionValue", "只有在sessino中才是共享的值");

out.print("
");

pageContext.getServletContext().setAttribute("shareValue", "多个页面共享的值");

out.print("
");

out.print("
pageContext.getAttribute('userName')的方法获得的值:");

//out.print(pageContext.getAttribute("userName"));

%>

下一步


欢迎使用JSP基本应用技术

第三步:创建名称为TestPageContext.jsp的页面,该页面主要实现的功能是通过pageContext对象中的getAttribute()方法获取共享数据并显示在页面中,代码如:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

Insert title here

pageContext的测试页面-获得前一页面设置的值:

<%

out.print("pageContext.getSession().getAttribute('sessionValue')方法获得的值:");

out.print(pageContext.getSession().getAttribute("sessionValue"));

out.print("
");

out.print("pageContext.getServletContext().getAttribute('shareValue')获得的值:");

out.print(pageContext.getServletContext().getAttribute("shareValue"));

%>

 

  • exception对象

当异常发生时,先在java中定义被称为exception的对象,exception对象和java的所有对象一样,都具有系统的继承结构,exception对象几乎定义了所有异常情况,这样的exception对象和我们常见的错误有所不同。

在java中,利用名为“try/catch”的关键字来处理异常情况,如果在JSP页面中出现没有捕捉到的异常,就会生成exception对象,并把这个对象传送到在page指令中设定的错误页面中,然后在错误提示页面中处理相应的exception对象。

exception对象只有在错误页面(page指令里isErrorPage=True的页面)才可以使用。

exception对象的常用方法:

方法名称

方法描述

getMessage()

获取异常消息字符串

getLocalizedMessage()

获取本地化语言的异常错误

printStackTrace()

显示异常的栈跟踪轨迹

toString()

返回关于异常错误的简单消息描述

fillInStackTrace()

重写异常错误的栈执行轨迹

 

你可能感兴趣的:(JSP)