链接:请点击这里下载文档(密码:diigv5)
在JSP中,因为JSP对部分java对象做了声明,所以不用重新声明这些对象就可以使用。原先就声明好的对象有:out/page/request/response/sesison/application/config/pageContext/excetpion几个。
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()方法是用来将数据输出到网页上,输出的数据可以是整型、字符型、布尔型等待。
使用格式如:
out.print(“你好!”); |
pirnt()可以输出基本数据类型和引用数据类型,此外也可以输出一个网页。
当输出引用类型如一个对象时,将会调用这个对象的toString方法。
示例如:
<% out.print(“ 标题1”);out.print(“ 标题2”);out.print(“字体1”); out.close(); %> |
使用此方法可以获得输出缓冲区的大小,默认值为8KB,大小可以通过page指令来调整。它的单位是字节。
返回值为int型。
此方法可以取得数据写进缓冲区后,剩余缓冲空间的大小。缓冲区中的数据室友out对象的print()方法写进去的,JSP翻译后,所有print()方法输出的数据会先进入缓冲区中,因此数据就占了一定的缓冲空间。
JSP中的页面属性autoFlush设置为True时,此方法返回True,反之同理。一般页面属性autoFlush的默认值为True。autoFlush即缓冲区自动刷新,可以通过page指令设置。
这个方法可以清除print()方法输出到浏览器显示的数据。
调用此方法可以将缓冲区中的数据清除掉,调用此方法不会有任何结果显示。
这个方法将缓冲区中的数据输出来,它存在的意义是,当需要输出一些数据后清空缓冲区(调用clearBuffer()方法)时,如果不调用此方法,那么既是有print方法,print方法也无法输出。
例子:
… out.print(“数据”); out.clearBuffer(); … |
这段代码运行的结果将不会输出“数据”二字。
而是使用flush()方法后:
… out.print(“数据”); out.flush(); out.clearBuffer(); … |
此时“数据”二字将会被输出,并且缓冲区被清空。
此方法用来关闭输出流,使用此方法后,out.print()方法与out.println()方法均不能向网页上输出数据。
page对象是为了执行当前页面应答请求而设置的Servlet实体,即显示JSP页面自身。只有在JSP页面才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,可以看做是this变量的别名,因此该对象对于开发JSP比较有用。
想想<% …%>中的定义的变量,它们是哪个类的成员变量?没错就是当前page的,当使用this时,this代表的就是当前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对象是客户端向服务器发出的请求,可以通过这个对象了解客户端的信息。例如,获得客户端提交的数据、获得客户点的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 |
大部分的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变量中 |
在请求转发的时候,经常希望把一些数据带到转发后的的页面处理。这时,可以使用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()方法传送数据时,
request.removeAttribute(“name”);
在request的作用页面(接收页面)使用此方法可以将name对应的属性移除,注意是移除属性,而不是属性的值。
质疑输出该属性将按照不存在此属性的输出结果处理,显示为null。
使用此方法获得客户端向服务端传送数据的方法,如post、get、trace和header等。
getMethod()方法的使用格式如:
string method=request.getMethod(); //返回值为String类型 |
使用此方法可以获得客户端向服务端传送数据所依据的协议版本号。
使用格式如:
String agreement = request.getProtocol(); |
运行结果示例:
HTTP/1.1 |
使用此方法获得发出请求的客户端的地址。
使用格式如:
String url=request.getRequestURI(); |
结果示例:
Attribute/getAttribute.jsp |
使用此方法获得发出请求的客户端的IP地址。
使用格式如:
String ipAddr=request.getRemoteAddr(); //remote意为“远程的;遥控器” |
在服务器和客户端都在同一设备上时,使用此方法获得的结果是:
0.0.0.0.0.0.0.1
这是ipv6的ip地址。
通过此方法可以获得服务器的端口号。
使用格式如:
int port = request.getServerPort(); |
可见返回值为int型。
通过此方法可以获得服务器的名称,如果是本地服务器,则为localhost。
使用格式如:
String hostName=request.getServerName(); |
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) |
此方法使用指定的头名称以及相应的值来设置头信息。可以覆盖原信息。如果头信息已经被发送出去,此方法设置将被忽略 |
下面将详细介绍常用的方法:
此方法为请求重定向。
当请求被处理完后,希望给客户端返回一个指定的页面时,就可以使用这个方法。
使用格式如:
response.sendRedirect(String JSPFileName); //JSPFileName可以是一个地址链接上文件名 如:hello/aka.jsp |
JSPFileName参数: String类型,表示一个JSP文件的名称。
举个例子:
第一步:创建名为index.jsp的页面,该页面实现重定向页面的功能,代码如:
… <% response.sendRedirect("hello.jsp"); %> … |
第二步:创建名为hello.jsp的页面,该页面实现重定向结果,代码如:
.. Surprise MotherFucker! … |
强烈注意:
本方法为请求重定向,是生成一个新的请求,与
该方法设定指定名称的HTTP文件头里面属性的值。
使用格式如:
setHeader(“String name”,”String value”); //注意要有引号! |
name:响应类型的名称,value为响应类型的值。
实例:
使用此方法设置浏览器隔3秒刷新一次的功能:
… <% respons.setHeader(“Refresh”,”3”); %> .. |
该方法在客户端添加一个cookie,用来保存客户端信息。
addCookie()方法的使用如下:
response.addCookie(Cookie cookie) |
cookie是Cookie类的对象。
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对象的常用方法进行讲解:
与request中的两个同名方法不同,区别如:
setAttribute()方法的使用格式如:
session.setAttribute(“String name”,”String value”); |
而getAttribute(“String name”)方法为从session中获得与name相匹配的属性的值返回,没有这个属性,则返回null。
invalidate:使无效
使用此方法来销毁所有使用setAttribute()创建的属性。
使用方法如:
session.invalidate(); |
此方法与invalidate()方法相对,并不是删除所有的属性,而是指定的由setAttribute()方法设置的属性。
使用格式如:
session.removeAttribute(); |
setMaxInactiveInterval(int value)这个方法用来设置session中通过setAttribute()方法设置的属性的生存时间,单位是秒。
getMaxInactiveInterval()方法用来获取session中通过setAttribute()方法设置的属性的生存时间。
使用格式如:
session.setMaxInactiveInterval(int value); session.getMaxInactiveIntervan(); |
该方法返回的是一个布尔值,True表示当前session对象为新创建的。
此方法使用格式为:
session.isNew(); |
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对象的常用方法:
1.setAttribute(String name,Object obj) 此方法与request对象中的同名方法用法相同。
2.getAttribute(String name)此方法与request对象中的同名方法用法相同。
此方法的返回值是JSP使用的服务器相关信息。
使用方法如:
application.getServerInfo(); |
此方法返回当前页面的真是路径。
使用方法如:
application.getRealPath(String path); |
参数说明:页面文件的名称
使用效果:
当前页面的真实路径:E:\软件数据\EclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\response\index.jsp(这个是通过eclipse部署的tomcat服务器的实例,所以路径有隐藏) |
此方法和request对象中的同名方法的使用方法一模一样。
config对象被封装成javax.servlet.ServletConfig接口,表示Servlet的配置。当一个Servlet初始化时,容器把某些信息通过此对象传递给Servlet。
config对象的常用方法:
方法名 |
方法描述 |
getServletContext() |
返回执行者的Servlet上下文 |
getServletName() |
返回Servlet的名字 |
getInitParameter() |
返回名字为name的初始参数值 |
getInitParameterNames() |
返回JSP所有初始参数的名字 |
该对象提供存取所有关于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"%>
… |
第二步:创建名为PageContext.jsp的页面,该页面主要是从index.jsp获得数据,通过pageContext对象中的setAttribute()方法进行保存,代码如:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% 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(" //out.print(pageContext.getAttribute("userName")); %> 欢迎使用JSP基本应用技术 |
第三步:创建名称为TestPageContext.jsp的页面,该页面主要实现的功能是通过pageContext对象中的getAttribute()方法获取共享数据并显示在页面中,代码如:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 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")); %> |
当异常发生时,先在java中定义被称为exception的对象,exception对象和java的所有对象一样,都具有系统的继承结构,exception对象几乎定义了所有异常情况,这样的exception对象和我们常见的错误有所不同。
在java中,利用名为“try/catch”的关键字来处理异常情况,如果在JSP页面中出现没有捕捉到的异常,就会生成exception对象,并把这个对象传送到在page指令中设定的错误页面中,然后在错误提示页面中处理相应的exception对象。
exception对象只有在错误页面(page指令里isErrorPage=True的页面)才可以使用。
exception对象的常用方法:
方法名称 |
方法描述 |
getMessage() |
获取异常消息字符串 |
getLocalizedMessage() |
获取本地化语言的异常错误 |
printStackTrace() |
显示异常的栈跟踪轨迹 |
toString() |
返回关于异常错误的简单消息描述 |
fillInStackTrace() |
重写异常错误的栈执行轨迹 |