JSP基础:JSP九大内置对象

前言:本人2014级大专,现在于仁和集团商业信息部作为软件开发员实习,在学校的微软IT分院,学了一年的JAVA软件技术,自我感觉学的还是挺充实的,一年多的时间没有浪费,三年制一年半学习,一年半实习,一周六天上课,时间还是挺紧的。现出来工作,学校发的书也带出来了。在学校主要是以练为主,很多东西知道怎么用,但是却不太清楚其真正的含义。为了将学校所学的知识巩固在脑海,所以自己结合所学重新看一遍书,跟着书上的代码敲一遍,以前很多不明白的,现在也搞懂了不少,基本上关于JSP的博文,都是我从《Java Web 从入门到精通》上所搬下来的,毕竟出版的图书其内容语句还是很精炼的。然后结合自己的语言,再次将部分繁琐的文字去除,写出的博文,用以以后淡忘时,能够一翻就能回想起这些知识,也可作为一些初学者的快速入门参考。
PS:当碰到没见过的方法,上面有陌生的单词时,先别忙着把整个方法复制下来到去搜索,你可以先把其中的单词结合方法先猜测其意思,然后再搜索翻译。这样能加深印象。其实很多方法的用处光从其中用到的单词释义就能猜测出来的。并且这样也对你的单词积累有帮助。我用的猎豹浏览器上自带的猎豹翻译就挺方便的。正文中一些方法我也会将其中单词的释义写出来。方便读者观阅。

正文:

由于JSP使用Java作为脚本语言,所以JSP将具有强大的对象处理能力,并且可以动态创建Web页面内容。但Java语法在使用一个对象前,需要实例化这个对象,这其实是一件比较繁琐的事情。JSP为了简化开发,提供了一些内置对象,用来实现很多JSP应用。在使用JSP内置对象时,不需要先定义这些对象,直接使用即可。

在JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pageContext、config、page和exception。

一、request

request对象封装了由客户端产生的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。

常用:
request.getParameter(“参数名”);
在jsp页面或后台中用以获取form表单传递的参数,也可以直接在URL中传递,例:<ahref=”select.jsp?id=1”>搜索</a>,就传递了一个参数名为id,值为1的参数。如要同时指定多个参数,使用符号&分隔。
request.setAttribute(String name,Object object);
进行请求转发时,利用这个方法将数据存入request对象,作为Object对象存入
request.getAttribute(String name);
进行请求转发后,利用这个方法将已存入request对象的数据根据,name变量名取出,因为取出来时是Object对象,所以需要转换类型
request.getCookies();
从request中获得所有Cookie对象,用Cookie[] 集合接收。

获取客户端信息:
  <body>

       客户端提交信息的方式:<%=request.getMethod()%><br />

       使用的协议:<%=request.getProtocol()%><br />

       获取发出请求字符串的客户端地址:<%=request.getRequestURI()%><br />

       获取发出请求字符串的客户端地址:<%=request.getRequestURL()%><br />

       获取提交数据的客户端IP地址:<%=request.getRemoteAddr()%><br />

       获取服务器端口号:<%=request.getServerPort()%><br />

       获取服务器的名称:<%=request.getServerName()%><br />

       获取客户端的主机名:<%=request.getRemoteHost()%><br />

       获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath()%><br />

       获得Http协议定义的文件头信息Host的值:<%=request.getHeader("host")%><br />

       获得Http协议定义的文件头信息User-Agent的值:<%=request.getHeader("user-agent") %><br />

       获得Http协议定义的文件头信息accept-language的值:<%=request.getHeader("accept-language") %><br/>

       获得请求文件的绝对路径:<%=request.getSession().getServletContext().getRealPath("")%>

 </body>
效果:

二、response

response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。resopnse对象在JSP页面内有效。

常用:
response.sendRedirect(String path);
该方法可将网页重定向到另一个页面。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且开始一个新的request对象。
注:使用该方法,方法之后的代码已经没有意义了,因为已经重定向到别的页面了,如该方法后还有其他代码,可能产生错误。

处理HTTP文件头
1、禁用缓存
response.setHeader(“Cache-Control”,”no-store”); //Cache-Control释义:高速缓存控制  no-store释义:不储存
response.setDateHeader(“Expires”,0) //Expires释义:过期时间/是否过期
在默认情况下,浏览器将会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会判断网页是否有变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度。但是对于一些安全性比较高的网站。通常需要禁用缓存。
2、设置页面自动刷新
response.setHeader(“refresh”,”10”);
使网页每10秒刷新一次。该功能可以用来制作一个简单的动态闹钟。
3、定时跳转网页
response.setHeader(“refresh”,”5;URL=login.jsp”);
以2为基础,使网页5秒后自动跳转到指定的页面。

设置输出缓冲:
通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区。当满足以下三种情况之一,就会把缓冲区的内容写到客户端。
---JSP页面的输出信息已经全部写入到缓冲区。
---缓冲区已满。
---在JSP页面中,调用了response对象的flushBuffer()方法或out对象的flush()方法。

response对象对缓冲区进行配置的5种方法
flushBuffer()——强制将缓冲区的内容输出到客户端。
setBufferSize(int size)——设置缓冲区的大小,单位为KB。
getBufferSize()——获取相应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回0。
reset()——清除缓冲区的内容,同时清楚状态码和报头。
isCommitted()——检测服务器端是否已经把数据写入到了客户端。
例:response.setBufferSize(1024);设置缓冲区的大小为1024KB。
如果将缓冲区的大小设置为0,则表示不缓冲。

三、session

Session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,Tomcat默认为30分钟。这个时间也可以通过提供的方法进行修改。

常用:
session.setAttribute(String name,Object obj);
该方法用于将信息保存在session范围内。
session.getAttribute(String name);
该方法用于获取保存在session范围内的信息。
与request的set与getAttribute方法一样,这里也是作为Object对象进行存取信息的,取出来时也要进行类型转换。
removeAttrivute(String name);
根据变量名,将保存在session会话中对应的对象移除;

销毁session:
session.invalidate();       //invalidate:使无效/使作废
session对象被销毁后,将不可以再使用session对象了。如果在调用该方法后,再调用session.的任何方法,都将报出Session already invalidated异常。

会话超时的管理:
在应用session对象时应该注意session的生命周期。一般来说,session的生命周期在20~30分钟之间。当用户首次访问时将产生一个新的会话,服务器就可以记住这个会话状态,当会话生命周期超时,或者服务器强制使会话失效时,这个session就不能用了。
这就是为什么你用一个账号登录了某个网站,然后二三十分钟之后你刷新页面。网站会提示你重新登录的原因。

在session对象中提供了设置会话生命周期的方法:
getLastAccessedTime();——返回客户端最后一次与会话相关联的请求时间。
getMaxInactiveInterval();——以秒为单位返回一个绘画内两个请求最大时间间隔。
setMaxInactiveInterval();——以秒为单位设置session的有效时间。

四、application

application对象用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享该application对象。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”

访问应用程序初始化参数:
application.getInitParameter(String name);
该方法用于返回web.xml文件中已命名的参数值。
例:
web.xml设置了url这个参数

<context-param>
<param-name>url</param-name>
<param-value>jdbc:sqlserver://localhost:1433;</param-value>
</context-param>
</web-app>
那么利用application.getInitParameter(“url”);方法
就得到了值:jdbc:sqlserver://localhost:1433;

管理应用程序环境属性:
与session对象相同,也可以在application对象中设置属性。不同的是,session只是在当前客户的会话范围内有效,超过会话时间,session对象就被收回;而application对象在整个应用区域中都有效。
getAttributeNames();——获得所有application对象使用的属性名。
getAttribute(String name);——从application对象中获取指定对象名。
setAttribute(String key,Object obj)——使用指定名称和指定对象 application对象中进行关联。
removeAttribute(String name)——从application对象中去掉指定名称的属性。

五、out

out对象一个最基本的应用就是向客户端浏览器输出信息。out对象可以输出各种数据类型的数据,在输出非字符串类型数据时,会自动转换为字符串进行输出。

常用:
out.print();
该方法用于向客户端浏览器输出信息。通过该方法向客户端浏览器输出信息与使用JSP表达式输出信息效果相同。<% out.pirnt(“Hello”)%> 与 <%= ”Hello” %>效果相同。
out.println();
和print()方法相同,区别在于println()在内容输出后,会自动输出一个换行符。

管理相应缓冲:
out对象一个比较重要的功能就是对缓冲区进行管理,方法如下
clear()——清除缓冲区中的内容。类似于重置响应流,以便于重新开始操作,清除缓冲区中的数据,若缓冲区已经是空的,则会产生IOException异常
clearBuffer()——清除当前缓冲区中的内容。而且即使缓冲区已经是空的,也能访问该方法。
flush()——刷新流。
isAutoFlush——检测当前缓冲区已满时,是自动清空,还是抛出异常。
getBufferSize()——获取缓冲区大小。

六、pageContext

获取页面上下文的pageContext对象十一个比较特殊的对象,通过它可以获取JSP页面的request、response、application、exception等对象。pageContext对象的创建和初始化都是由容器来完成的,JSP页面中可以直接使用pageContext对象。


pageContext对象的常用方法:
forward(java.lang.String relativeUtlpath);——把页面转发到另一页面。
getAttribute(String);——获取参数值。
getAttributeNamesInScope(int scope);——获取某范围的参数名称的集合,返回值为java.util.Enumeration对象。
getException();——返回exception对象。
getRequest();——返回request对象。
getResponse();——返回response对象。
getSession();——返回session对象。
getOut();——返回out对象。
getApplication();——返回application对象。
setAttribute();——为指定范围内的属性设置属性值。
removeAttribute();——删除指定范围内的指定属性。

pageContext对象在实际JSP开发过程中很少使用,因为reqeust和response等对象均为内置对象,如果通过pageContext来调用这些对象比较麻烦,可以直接调用其相关方法实现具体功能。

七、config

config对象主要用于取得服务器的配置信息。通过pageContext对象的getServletConfig()方法可以获取一个config对象。当一个Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet。开发者可以在web.xml文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。


config对象的常用方法:
getServletContext();——获取Servlet上下文。
getServletName();——获取Servlet服务器名。
getInitParameter();——获取服务器所有初始化参数名称,返回值为java.util.Enumeration对象。
getInitParameterNames();——获取服务器中name参数的初始值。

八、page

page对象代表JSP本身,只有在JSP页面内才是合法的。Page对象本质上是包含当前Servlet接口引用的变量,可以看作是this关键字的别名。
page对象的常用方法:
getClass();——返回当前Object的类。
hashCode();——返回该Object的哈希代码。
toString();——把该Object类转换成字符串。
equals(Object o);——比较该对象和指定对象是否相等。

九、exception

一、exception对象用来处理JSP文件执行时发生的所有错误和异常,只有在page指令中设置为isErrorPage属性值为true的页面中才可以使用,在一般的JSP页面中使用该对象将无法编译JSP文件。Exception对象几乎定义了所有异常状况,在Java程序中,可以使用try…catch关键字来处理异常状况,如果在JSP页面中出现没有捕捉到的异常,就会生出exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。
exception对象的常用方法:
getMessage();——返回exception对象的异常信息字符串。
getLocalizedmessage();——返回本地化的异常错误。
toString();——返回关于异常错误的简单信息描述。
fillInStackTrace();——重写异常错误的栈执行轨迹。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章