JSP九大内置对象详解

        由于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

2、 public java.util.Enumeration <E> getParameterNames ()      获取客户端提交的所有参数的名字。

Enumeration enum = request.getParameterNames();
while(enum.hasMoreElements()){
    String s=(String)enum.nextElement();
    out.println(s);
}

3、 public String[] getParameterValues (String name)                获取指定名字参数的所有值
        此方法返回的类型是一个String类型的数组,是获得如checkbox类(名字相同,但值有多个)的数据。

4、public java.util.Map<K, V> getParameterMap()               获取所有的键及对应的一个或多个值组成的String类型数组

Map<String,String[]> map= request.getParameterMap();
for(Map.Entry<String,String[]> entry:map.entrySet()){
    String key = entry.getKey();
    List<String> values = Arrays.asList(entry.getValue());
}

5 getServletPath()                                                              获取客户端请求文件的路径

String strServlet=request.getServletPath();

假如你的项目名称是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的值。

String strHeader = request.getHeader("accept");

9、 getMethod()             获取客户端向服务器端传送数据的方法 get | post

10、getRemoteAddr()    获取客户端的IP地址

11、getRemoteHost()     获取客户端的名字

12getQueryString()       获取以get方法向服务器传送的查询字符串

13、getRequestURI()        获取发出请求字符串的客户端地址

浏览路径是:http://localhost:8080/myproject/main/list.jsp

getRequestURI()方法获取的是    /myproject/main/list.jsp

14、getRequestURI()方法获取的是     http://localhost:8080/myproject

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对象        

        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");

%>

            或

<%="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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Superme_No1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值