由于笔记是使用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()可以输出基本数据类型和引用数据类型,此外也可以输出一个网页。
- 输出数据类型与引用类型
当输出引用类型如一个对象时,将会调用这个对象的toString方法。
- 输出网页(带HTML格式的数据)
示例如:
<% out.print(“<h1>标题1</h1>”); out.print(“<h2>标题2</h2>”); out.print(“<font size=1>字体1</font>”); out.close(); %> |
- getBufferSize()方法
使用此方法可以获得输出缓冲区的大小,默认值为8KB,大小可以通过page指令来调整。它的单位是字节。
返回值为int型。
- getRemaining()方法
此方法可以取得数据写进缓冲区后,剩余缓冲空间的大小。缓冲区中的数据室友out对象的print()方法写进去的,JSP翻译后,所有print()方法输出的数据会先进入缓冲区中,因此数据就占了一定的缓冲空间。
- isAutoFlush()方法
JSP中的页面属性autoFlush设置为True时,此方法返回True,反之同理。一般页面属性autoFlush的默认值为True。autoFlush即缓冲区自动刷新,可以通过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:
… <tr> <td><input name=”textOne” type=”text”></td> </tr> … |
那么接收这个属性值就需要用到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); … <jsp:forward page=”xxxx.jsp”/> //通过此标识将携带参数的请求发出去 |
name:键,String类型,在转发后的页面取数据时,就通过这个键来获取数据。参数obj是键值,为Object型。它代表需要保存在request范围内的对象。
getAttribute()方法使用格式如:
request.getAttribute(“String name”); //千万要加引号 |
name:键名
在页面使用request对象的request.setAttribute()方法可以把数据obj设定在request范围内。请求转发后的页面使用request.getAttribute()方法去的数据obj。
这两个方法的存在的意义是:将java代码中的对象使用request传送。我们在前面使用的getParameter()适用于html属性的传输。
注意:在使用setAttribute()方法传送数据时,<jsp:forward page=”xxxx.jsp”/>是必须要写的,不然数据无法传过去。
<jsp:forward page=”xxx”/>标识限定了请求里面参数的取值范围为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的页面,该页面实现重定向结果,代码如:
.. <body> Surprise MotherFucker!<br> … |
强烈注意:
本方法为请求重定向,是生成一个新的请求,与<jap:forward>标识不同,<jsp:forward>是请求转发。
- 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中的两个同名方法不同,区别如:
- request中set方法需要为一个存在的object设置键Key,而session中相当于new一个String型的属性,且给它赋值一个String型value。
- request中set的属性只存在于此次request中,而session中使用set设置的属性会的默认生存时间为1800秒,并且可以自行设置。
- request中使用set方法必须使用<jsp:forward>来发送请求,而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"%> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Insert title here</title>
</head> <body> <form action="pageContext.jsp"> <table> <tr> <td><b>请输入姓名:</b></td> <td><input type="text" name="name"/></td> </tr>
</table> </form> </body> </html> … |
第二步:创建名为PageContext.jsp的页面,该页面主要是从index.jsp获得数据,通过pageContext对象中的setAttribute()方法进行保存,代码如:
<%@ 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> <% ServletRequest req = pageContext.getRequest(); String name=req.getParameter("name"); out.print("name="+name); //pageContext.setAttribute("userName", name); pageContext.getServletContext().setAttribute("sessionValue", "只有在sessino中才是共享的值"); out.print("<br>"); pageContext.getServletContext().setAttribute("shareValue", "多个页面共享的值"); out.print("<br>"); out.print("<br>pageContext.getAttribute('userName')的方法获得的值:"); //out.print(pageContext.getAttribute("userName")); %> <a href="TestPageContext.jsp">下一步</a> <hr>欢迎使用JSP基本应用技术<br> </body> </html> |
第三步:创建名称为TestPageContext.jsp的页面,该页面主要实现的功能是通过pageContext对象中的getAttribute()方法获取共享数据并显示在页面中,代码如:
<%@ 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> pageContext的测试页面-获得前一页面设置的值:<br> <% out.print("pageContext.getSession().getAttribute('sessionValue')方法获得的值:"); out.print(pageContext.getSession().getAttribute("sessionValue")); out.print("<br>"); out.print("pageContext.getServletContext().getAttribute('shareValue')获得的值:"); out.print(pageContext.getServletContext().getAttribute("shareValue")); %> </body> </html> |
- exception对象
当异常发生时,先在java中定义被称为exception的对象,exception对象和java的所有对象一样,都具有系统的继承结构,exception对象几乎定义了所有异常情况,这样的exception对象和我们常见的错误有所不同。
在java中,利用名为“try/catch”的关键字来处理异常情况,如果在JSP页面中出现没有捕捉到的异常,就会生成exception对象,并把这个对象传送到在page指令中设定的错误页面中,然后在错误提示页面中处理相应的exception对象。
exception对象只有在错误页面(page指令里isErrorPage=True的页面)才可以使用。
exception对象的常用方法:
方法名称 | 方法描述 |
getMessage() | 获取异常消息字符串 |
getLocalizedMessage() | 获取本地化语言的异常错误 |
printStackTrace() | 显示异常的栈跟踪轨迹 |
toString() | 返回关于异常错误的简单消息描述 |
fillInStackTrace() | 重写异常错误的栈执行轨迹 |