由于JSP使用了Java语言作为脚本语言,所以JSP具有强大的对象处理能力,并且可以动态创建web页面内容。但Java语法在使用一个对象前,需要先实例化这个对象,这其实是一件比较繁琐的事情。JSP为了简化开发,提供了一些内置对象,用于实现很多JSP应用。在使用JSP内置对象时,不需要先定义这些对象,直接使用。
JSP预先定义了九大内置对象,分别为request、response、session、application、out、pageContext、config、page和exception。
一、request对象
request对象用于处理HTTP请求中的各项参数,包括HTTP头信息、系统信息、请求方式和请求参数等。
request对象常用方法:
1、public String getParameter(String name) 获取指定名字参数值
以 String
形式返回请求参数的值,如果该参数不存在,则返回 null
。只有在确定参数只有一个值时,才应该使用此方法。如果参数可能拥有一个以上的值,则使用 #getParameterValues
。
|
4、public java.util.Map<K, V> getParameterMap() 获取所有的键及对应的一个或多个值组成的String类型数组
|
|
假如你的项目名称是myproject,浏览路径是:http://localhost:8080/myproject/main/list.jsp
getServletPath()获取的是/main/list.jsp
6、getProtocol() 获取客户端向服务器端传送数据的协议名称
如上连接getProtocol() 获取的是 HTTP/1.11
7、getHeaders() 获取指定名字报头的所有值,一个枚举
8、getHeader() 获取HTTP头文件中的accept、accept-encoding和Host的值。
|
10、getRemoteAddr() 获取客户端的IP地址
11、getRemoteHost() 获取客户端的名字
12、 getQueryString() 获取以get方法向服务器传送的查询字符串13、getRequestURI() 获取发出请求字符串的客户端地址
浏览路径是:http://localhost:8080/myproject/main/list.jsp
getRequestURI()方法获取的是 /myproject/main/list.jsp
15、getContextPath() 方法获取的是 /myproject
16、setAttribute(String name,Object object) 设置指定名字参数值
17、getAttribute(String name) 获取指定名字参数值
18、getCookies() 获取所有Cookie对象
19、getSession() 获取和请求相关的会话
**设置网页的转发和包含
request.getRequestDispatcher(String path).forward(request,response);
request.getRequestDispatcher(String path).incloud(request,response);
二、response对象
response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。
1、设置重定向网页
使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。语法格式:
response.sendRedirect(String path)
2、处理HTTP文件头
通过response对象可以设置HTTP响应报头,最常用的是禁用缓存、设置页面自动刷新和定时跳转页面。
①禁用缓存
<%
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
%>
②设置页面自动刷新
<%
response.setHeader("refresh", "10"); // 设置每个十秒自动刷新一次。
%>
③设置定时跳转页面
<%
response.setHeader("refresh", "10;URL=login.jsp"); //十秒后自动跳转到指定页面
%>
3、设置输出缓冲
response对象方法:
方法名 | 说明 |
addCookie | 添加一个Cookie对象 |
addHeader | 添加Http文件指定名字头信息 |
containsHeader | 判断指定名字Http文件头信息是否存在 |
encodeURL | 使用sessionid封装URL |
flushBuffer | 强制把当前缓冲区内容发送到客户端 |
getBufferSize setBufferSize reset() isCOmmitted() | 返回缓冲区大小 设置缓冲区的大小 清除缓冲区的内容,同时清除状态码和报头 检测服务器端是否已经把数据写入到客户端 |
getOutputStream | 返回到客户端的输出流对象 |
sendError | 向客户端发送错误信息 |
sendRedirect | 把响应发送到另一个位置进行处理 |
setContentType | 设置响应的MIME类型 |
setHeader | 设置指定名字的Http文件头信息 |
session在网络中被称为回话。由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接受请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺陷,HTTP协议提供了session。通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,是整个用户会话一直保存下去,知道关闭浏览器。但是,如果在一个会话中,客户端长时间不想服务器发出请求,session对象就会自动消失。这个时间取决于浏览器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。
1、servlet中创建session
HttpSession session = request.getSession();
session在jsp中是隐式对象,已经被创建,所以不被创建也会有一个sessionId
2、保存信息到session对象中
session.setAttribute(String name,Object obj)
name:用于指定作用域在session范围内定的变量名。
obj: 保存在session范围内的对象。
3、从session中获取保存的信息
session.getAttribute(String name);
注意:getAttribute()方法的返回值是Object类型,如果将获取到的信息赋值给String类型的变量,则需要进行强制类型转换或是调用其toString() 方法。以下两种方式都是正确的。
String user = (String)session.getAttribute("username"); //强制类型转换
String user1 = session.getAttribute("username").toString(); //调用toString()方法
4、从会话中移除指定的绑定对象
removeAttribute(String name)
5、手动销毁session
虽然当客户端长时间不想服务器发送请求后,session对象会自动消失,但对于某些实时统计在线人数的网站(例如聊天室),每次都等session过期后,才能统计出准确的人数,这是远远不够的。所以还需要手动销毁session。
session.invalidate();
6、其他的session管理方法
getLastAccessedTime(): 返回客户端最后一次与会话相关联的请求时间。
getMaxInactiveInterval(): 以秒为单位返回一个会话内两个请求最大时间间隔
setMaxInactiveInterval(): 以秒为单位设置session的有效时
getId() : 获取sessionId
四、application对象
application对象用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享该application对象。
application对象的常用方法,如下所示:
方法名 | 描述 |
String getAttribute(String name) | 根据属性名称获取属性值。 |
Enumeration getAttributeNames() | 获取所有的属性名称。 |
void setAttribute(String name, Object object) | 设置属性,指定属性名称和属性值。 |
void removeAttribute(String name) | 根据属性名称删除对应的属性。 |
ServletContext getContext(String uripath) | 获取指定URL的ServletContext对象。 |
String getContextPath() | 获取当前Web应用程序的根目录。 |
String getInitParameter(String name) | 根据初始化参数名称,获取初始化参数值。 |
int getMajorVersion() | 获取Servlet API的主版本号。 |
int getMinorVersion() | 获取Servlet API的次版本号。 |
String getMimeType(String file) | 获取指定文件的MIME 类型。 |
String getServletInfo() | 获取当前Web服务器的版本信息。 |
String getServletContextName() | 获取当前Web应用程序的名称。 |
void log(String message) | 将信息写入日志文件中。 |
五、out对象
out对象用于在Web浏览器内输入信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残存数据,为其他的输出让出缓冲空间。待数据数据输出完毕后,要及时关闭输出流。
1、向客户端输出数据
①print()方法,向客户端浏览器输出信息
<%
out.print("string");
%>
或
②println()方法,与print()方法功能相同,输出内容后自动换行
<pre><%
out.println("string");
out.println("string1");
%></pre>
说明:使用print()方法和println()方法在页面中输出信息时,并不能很好的区分两者的区别,因为在使用println()方法向页面中输出的换行符显示在页面时,并不能看到后面的文字真的换行了,如何想让其显示,需要将要输出的文本使用HTML的<pre>标记括起来。
pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
2、管理响应缓冲
out对象的类一个比较重要的功能就是对缓冲区进行管理。out对象用于管理缓冲区的方法如下:
六、pageContext对象
这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。使用pageContext可以访问page,request,session,application范围内的变量。
PageContext.PAGE_SCOPE:对应于page范围。
PageContext.REQUEST_SCOPE:对应于request范围。
PageContext.SESSION_SCOPE:对应与session范围。
PageContext.APPLICATION_SCOPE:对应于application范围。
注:与getAttribute()方法相对应,PageContext也提供了两个对应的setAttribute()方法,用于将指定变量放入page,request,session,application范围内。
七、读取web.xml配置信息的config对象
config对象主要用于获取服务器的配置信息。通过pageContext对象的getServletConfig() 方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
八、page对象
page对象是java.long.Object类的实例。它指向当前JSP页面本身,有点像类中的this指针,用于设置JSP页面的属性,这些属性将用于和JSP容器通信,控制所生成的servlet结构。
语法
<%@ page attr="value1" attr="value2" ... %> // xml语法格式 <jsp:directive.page attr="value1" attr="value2" ... />
属性
1. import
page指令中唯一容许在同一文档出现多次的属性。属性的值可以以逗号隔开。它指定jsp页面转换成servlet应该输入的包。对于没有明确指定包的类,将根据jsp页面所在的包(生成的servlet的目录)决定类的包的位置。这意味着,将在jsp页面所在的包来寻找该类。注意一定要将实用工具类和bean包放在指定的包中,不要依赖于自动导入。
2. language
用于指定在脚本元素中使用的脚本语言,默认java。在jsp2.0规范中,只能是java。
3. contentType和pageEncoding
contentType属性设置发送到客户端文档的响应报头的MIME类型和字符编码。多个使用;号分开。pageEncodeing属性只用于更改字符编码。servlet默认MIME是text/plain,jsp默认MIME是text/html。
4. session
session控制页面是否参与会话,默认true。如果存在已有会话,则预定义session变量,绑定到已有会话中。否则创建新会话将其绑定到session。设置false表示不自动创建新会话,在jsp页面转换为servlet时,这时对变量session的访问导致错误。设置为false并不是禁用会话跟踪,它只是阻止jsp页面为不拥有会话的用户创建新会话。注意对于不需要会话跟踪的页面那就设置为false;当设置为false时session对象是不可访问的。
5. isELlgnored
定义在jsp页面中是否执行或忽略EL表达式。true表示忽略,false表示执行。默认值依赖于web.xml的版本。servlet2.3之前默认true,servlet2.4默认false。用于JSP版本不一致造成使用EL表达式出现的问题。使用:isELlgnored="true";
6. buffer和autoFlush
buffer属性指定out对象(JspWriter)使用的缓冲区大小,以kb为单位,默认8kb,none表示不使用缓冲区。这样要求设置报头或状态代码的jsp元素要出现在文件的顶部,任何HTML内容之前。
autoFlush属性控制当缓冲区满了后,是自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出异常(false)。在buffer=none的时候,autoFlush=false是错误的。
7. info
定义一个可以在servlet中通过getServletInfo方法获取的字符串。jsp容器做的是在servlet中生成getServletInfo方法返回info属性指定的String。
8. errorPage和isErrorPage
errorPage属性用来指定一个jsp页面,由该页面来处理当前页面中抛出但没有捕获的任何异常。指定的页面可以通过exception变量访问异常信息。
isErrorPage属性表示当前页是否可以作为其他jsp页面的错误页面。true或false。错误页面应该放在WEB-INF目录下面,只让服务器访问,也不会生成转发的调用,客户端只能看到最初的请求页面URL,看不到错误页面的URL。
如果为整个web应用程序指定错误页面,或为应用中不同类型的错误指定错误处理页面,使用web.xml中的error-page元素。如果一个页面通过该属性定义了专有的错误页面,那么在web.XML文件中定义的任何错误页面不会被使用。只能够在错误处理页面中使用错误对象exception。
9. isThreadSafe
控制由jsp页面生成的servlet是否允许并发访问(默认true允许)。这种阻止并发访问的实现是基于SingleThreadModel接口。所以,避免使用isThreadSafe属性。
10. extends
尽量避免使用。这是服务器提供商该做的事情。父类必须是对HttJspPage接口的实现类。而HttJspPage是应用于HTTP协议的请求和响应的JspPage扩展接口。
常用方法
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()使仪的线程处于等待直到被唤醒
九、获取异常信息的exception对象
exception对象用于处理JSP文件执行时发生的所有错误和异常,只有在page指令中设置isErrorPage属性值为true的页面中才能被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。exception对象几乎定义了所有异常情况,在Java程序中,可以使用try...catch关键字来处理异常情况,如果在JSP页面中出现没有捕获的异常,就会生成生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。
参考文档:《Java Web从入门到精通》、http://www.51gjie.com/javaweb/830.html