天天看点

详解JSP九个内置对象

    在web开发中,为方便开发者,JSP定义了一些由JSP容器实现和管理的内置对象,这些对象可以直接被开发者使用,而不需要再对其进行实例化!本文详解,JSP2.0之后由ServletApi提供的9个内置对象,如下:

内置对象名称

               相对应的类

             作用域

request

javax.servlet.ServletRequest

response

javax.servlet.ServletResponse

page

pageContext

javax.servlet.pageContext

session

javax.servlet.HttpSession

application

javax.servlet.ServletContext

out

javax.servlet.JspWriter

config

javax.servlet.ServletConfig

javax.servlet.Object

exception

javax.servlet.Throwable

由此可见,JSP内置对象作用域范围,分别是:page,request,session,application

介绍一下:

1、page范围:指的是所设置的属性只在当前页面有效,使用pageContext.setAttribute()设置值,page.getAttribute()取值

2、request范围:指的是仅在一次请求的范围内有效request.setAttribute()设置值,request.getAttribute()取值

3、session范围:指的是属性仅在浏览器与服务器进行一次会话时有效,服务器断开之后,就失去作用,一般与用户有关

session.setAttribute()设置值,session.getAttribute()取值

4、application:是指在整个web应用中都有效,直到服务器停止为止,application.setAttribute() 设置值,application.getAttribute()取值,一般与用户无关

第二部分:

1、介绍request对象:

request中主要方法有getAttribute()-获取指定的属性值,getParameter("name")获取请求参数名为name的值如下示例源码:

以requestform.jsp作为提交表单,以requestobject.jsp作为接受对象

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<code>&lt;%@ page contentType="text/html;charset=GB2312" %&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;表单页&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 使用form标签创建表单--&gt;</code>

<code>    </code><code>&lt;</code><code>form</code> <code>action</code><code>=</code><code>"requestobject2.jsp"</code> <code>method</code><code>=</code><code>"post"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>p</code><code>&gt;用户名:&lt;</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"username"</code><code>/&gt;&lt;/</code><code>p</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>p</code><code>&gt;年龄:     &lt;</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"age"</code><code>/&gt;&lt;/</code><code>p</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>input</code> <code>type</code><code>=</code><code>"submit"</code> <code>value</code><code>=</code><code>"提交"</code><code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>form</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

15

16

17

18

<code>    </code><code>&lt;</code><code>title</code><code>&gt;request object test&lt;/</code><code>title</code><code>&gt;</code>

<code>   </code><code>&lt;!--获取表单域的值--&gt;</code>

<code>   </code><code>&lt;%</code>

<code>         </code><code>request.setCharacterEncoding("gb2312");        //中文名时需要设置编码格式</code>

<code>        </code><code>String username=request.getParameter("username"); //获取用户名</code>

<code>        </code><code>String strage=request.getParameter("age"); //获取用户年龄,此时为String类型</code>

<code>        </code><code>int age=Integer.parseInt(strage);      //将字符串解析为整数</code>

<code>   </code><code>%&gt;</code>

<code>   </code><code>&lt;!--下面输出表单域的值--&gt;</code>

<code>    </code><code>用户名:&lt;%=username%&gt;&lt;</code><code>br</code><code>&gt;</code>

<code>    </code><code>年龄:&lt;%=age%&gt;</code>

(源码2)

2、介绍response对象:

response常用方法有

addHeader(String name,String value)添加HTTP头信息,该Header信息奖杯发送到客户端

addCookie(Cookie cookie)添加cookie对象

setRedirect(url)重定向jsp文件

例如我们将源码2的代码稍微修改一下:

19

20

21

22

23

24

25

26

27

<code>    </code><code>&lt;</code><code>title</code><code>&gt;response object test&lt;/</code><code>title</code><code>&gt;</code>

<code>   </code><code>&lt;%   </code>

<code>        </code><code>String str=null;    </code>

<code>         </code><code>str=request.getParameter("username");</code>

<code>         </code><code>if(str==null)</code>

<code>           </code><code>{str="";</code>

<code>           </code><code>}</code>

<code>        </code><code>byte b[]=str.getBytes("ISO-8859-1");</code>

<code>        </code><code>str=new String(b);</code>

<code>         </code><code>if(str.equals(""))</code>

<code>        </code><code>{</code>

<code>             </code><code>response.sendRedirect("responseform.jsp"); </code>

<code>        </code><code>}</code>

<code>       </code><code>else </code>

<code>        </code><code>{ </code>

<code>           </code><code>out.println("欢迎您来到本网页!");</code>

<code>           </code><code>out.println(str);</code>

<code>    </code><code>%&gt;</code>

(源码3)

意思是说,当输入值不为空时,打印输入的值,为空时,跳转到提交页面!

这里需要说明的是:response实现的重定向和&lt;jsp:forward&gt;最大的区别在于&lt;jsp:forward&gt;智能在本网站内跳转,而response.sendRedirect则可以任意跳转到任何一个地址的页面。

3、介绍out对象:

out对象常用方法有

clear()清楚缓冲区的内容,clearBuffer()清楚缓冲区的内容同时将数据输出到客户端

getBufferSize()获取缓冲区的大小

最常见的是直接打印输出内容

<code>    </code><code>&lt;</code><code>title</code><code>&gt;out object test&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 使用out对象输出--&gt;</code>

<code>    </code><code>&lt;%</code>

<code>        </code><code>out.print("Hello World");      //不换行  </code>

<code>        </code><code>out.println("Hello World");        //换行</code>

第二种使用out对象获取缓冲区的大小

<code>    </code><code>&lt;!-- 使用out获取缓冲区信息--&gt;</code>

<code>        </code><code>int allbuf=out.getBufferSize();           //获取缓冲区的大小</code>

<code>        </code><code>int remainbuf=out.getRemaining();          //获取剩余缓冲区的大小</code>

<code>        </code><code>int usedbuf=allbuf-remainbuf;              //已用缓冲区</code>

<code>        </code><code>out.println("已用缓冲区大小为:"+usedbuf);   //输出已用缓冲区大小</code>

4、介绍session对象:

session是会话对象主要是用来记录每个客户端访问状态,这个对象使用十分频繁!例如,我前面博文介绍的可以限制用户单号登录,防止表单重复提交都是用session来完成!

常用方法:

setAttribute(String name,Object value)设置session范围内的name属性的属性值为value,并将其存储在session的对象中

getSession()获取session范围内的name属性的值

boolean isNew 是否存有新的session

removerAttribute(String name)删除session值

下面是hi一个简单的例子:

login.jsp,check.jsp,logout.jsp

<code>&lt;% </code>

<code>    </code><code>String name="";</code>

<code>    </code><code>//判断是否为新的session</code>

<code>    </code><code>if(!session.isNew()){</code>

<code>        </code><code>name=(String)session.getAttribute("username");</code>

<code>        </code><code>if(name==null)</code>

<code>            </code><code>name="";</code>

<code>    </code><code>}</code>

<code>%&gt;</code>

<code>&lt;</code><code>p</code><code>&gt;欢迎光临!&lt;/</code><code>p</code><code>&gt;</code>

<code>&lt;</code><code>p</code><code>&gt;Session ID:&lt;%=session.getId()%&gt;&lt;/</code><code>p</code><code>&gt;  </code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;用户登录&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>form</code> <code>action</code><code>=</code><code>"check.jsp"</code> <code>method</code><code>=</code><code>"post"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>p</code><code>&gt;用户名:&lt;</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"username"</code> <code>value=&lt;%=name%&gt;&gt;&lt;/</code><code>p</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;进入空间&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;%</code>

<code>    </code><code>String name=null;</code>

<code>    </code><code>name=request.getParameter("username");</code>

<code>    </code><code>if(name!=null)</code>

<code>        </code><code>session.setAttribute("username",name);</code>

<code>&lt;</code><code>a</code> <code>href</code><code>=</code><code>"login.jsp"</code><code>&gt;登录&lt;/</code><code>a</code><code>&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;</code>

<code>&lt;</code><code>a</code> <code>href</code><code>=</code><code>"logout.jsp"</code><code>&gt;注销&lt;/</code><code>a</code><code>&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;</code>

<code>&lt;</code><code>p</code><code>&gt;当前用户为:&lt;%=name %&gt;&lt;/</code><code>p</code><code>&gt;</code>

<code>&lt;</code><code>p</code><code>&gt;中共有10条未读消息&lt;/</code><code>p</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;注销页面&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>String name=(String)session.getAttribute("username");</code>

<code>    </code><code>session.invalidate();</code>

<code>&lt;%=name %&gt;,再见!</code>

<code>&lt;</code><code>p</code><code>&gt;</code>

<code>&lt;</code><code>a</code> <code>href</code><code>=</code><code>"login.jsp"</code><code>&gt;重新登录&lt;/</code><code>a</code><code>&gt;</code>

5、介绍application对象:

application对象主要用于获取和设置Servlet的相关信息,因为它的生命周期是从服务器创建知道关闭为止,对象将会一直存在

主要方法setAttribute(String name ,Object value)Object getAttribute(String name)

<code>    </code><code>&lt;</code><code>title</code><code>&gt;application object test&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>String count=(String)application.getAttribute("count");</code>

<code>    </code><code>if(count==null)</code>

<code>    </code><code>{</code>

<code>        </code><code>count="1";</code>

<code>    </code><code>else</code>

<code>        </code><code>count=Integer.parseInt(count)+1+"";</code>

<code>    </code><code>application.setAttribute("count",count);</code>

<code>&lt;%="&lt;</code><code>h1</code><code>&gt;到目前为止,访问该网站的人数为:"+count+"&lt;/</code><code>h1</code><code>&gt;&lt;</code><code>br</code><code>&gt;" %&gt;</code>

6、介绍pageContext对象

pageContext是一个特殊的属性,因为不仅仅可以设置page范围的属性,还可以设置其他范围的属性,通过pageContext可以访问本页面的所有其他对象,如request,response,out,而因为request,response本身已提供给我们,所以pageContext使用并不多

详细获取方法如下代码,

<code>    </code><code>&lt;</code><code>title</code><code>&gt;pageContext object test&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>pageContext.setAttribute("attributename","page_scope"); //设置page范围内的属性</code>

<code>    </code><code>request.setAttribute("attributename","request_scope");  //设置request范围内的属性</code>

<code>    </code><code>session.setAttribute("attributename","session_scope");  //设置session范围内的属性</code>

<code>    </code><code>application.setAttribute("attributename","application_scope");  //设置application范围内的属性</code>

<code>    </code><code>String str1=(String)pageContext.getAttribute("attributename",pageContext.PAGE_SCOPE);</code>

<code>    </code><code>String str2=(String)pageContext.getAttribute("attributename",pageContext.REQUEST_SCOPE);</code>

<code>    </code><code>String str3=(String)pageContext.getAttribute("attributename",pageContext.SESSION_SCOPE);</code>

<code>    </code><code>String str4=(String)pageContext.getAttribute("attributename",pageContext.APPLICATION_SCOPE);</code>

<code>attributename在不同范围的属性值</code>

<code>&lt;</code><code>br</code><code>&gt;</code>

<code>&lt;%="page范围:"+str1 %&gt;&lt;</code><code>br</code><code>&gt;</code>

<code>&lt;%="request范围:"+str2 %&gt;&lt;</code><code>br</code><code>&gt;</code>

<code>&lt;%="session范围:"+str3 %&gt;&lt;</code><code>br</code><code>&gt;</code>

<code>&lt;%="application范围:"+str4 %&gt;&lt;</code><code>br</code><code>&gt;</code>

7、介绍page对象:

page对象是指的是JSP页面的本身,她是Object对象的类,通过page对象可以调用到Servlet类定义的方法,page对象在开发中并不经常用到,这里就不讲解了!

8、介绍config对象:

config对象是ServletConfig类的一个实例,在Servlet初始化时,可以通过config向Servlet传递信息,在JSP开发中config使用并不多,只有需要重新重载Servlet的init()方法时才会用到config方法

其中有一个方法使用较多,ServletContext.getServletContext获得一个包含服务器相关信息的ServlletContext对象

9、介绍exception对象:

主要是处理页面异常和错误,实际开发中此对象使用也不多,让用户直接看到错误,是很不好的吧?

所以一般都是调试项目会使用

使用这个对象必须将isErrorPage设置为true

如下

<code>&lt;%@ page contentType="text/html;charset=GB2312" errorPage="exceptionobject.jsp"%&gt;</code>

<code>    </code><code>发生错误的位置!&lt;</code><code>br</code><code>&gt;</code>

<code>        </code><code>int a=5;</code>

<code>        </code><code>int b=0;</code>

<code>    </code><code>输出结果=&lt;%=(a/b)%&gt;</code>

打印错误代码

<code>&lt;%@ page contentType="text/html;charset=GB2312" isErrorPage="true"%&gt;</code>

<code>&lt;%@ page import="java.io.PrintStream"%&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;exception object test&lt;/</code><code>title</code><code>&gt;</code>

<code>    </code><code>&lt;%=exception.getMessage() %&gt;&lt;</code><code>br</code><code>&gt;</code>

<code>        </code><code>exception.printStackTrace(new java.io.PrintWriter(out));</code>

    综上总结在实际开发中,我们经常使用的就是request,response,session,out,这四个!也是我们必须掌握的,以上代码经本人亲测,完全正确,文中有遗漏的地方欢迎举手!也算是自己一个小总结!

本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1431807,如需转载请自行联系原作者