【JSP】☆★之详解九个内置对象

 

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

 

内置对象名称                相对应的类              作用域
request javax.servlet.ServletRequest request
response javax.servlet.ServletResponse page
pageContext javax.servlet.pageContext session
session javax.servlet.HttpSession page
application javax.servlet.ServletContext application
out javax.servlet.JspWriter page
config javax.servlet.ServletConfig page
page javax.servlet.Object page
exception javax.servlet.Throwable page

由此可见,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
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>表单页</title>
</head>
<body>
    <!-- 使用form标签创建表单-->
    <form action="requestobject2.jsp" method="post">
        <p>用户名:<input type="text" name="username"/></p>
        <p>年龄:     <input type="text" name="age"/></p>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>request object test</title>
</head>
<body>
   <!--获取表单域的值-->
   <%
         request.setCharacterEncoding("gb2312");        //中文名时需要设置编码格式
        String username=request.getParameter("username"); //获取用户名
        String strage=request.getParameter("age"); //获取用户年龄,此时为String类型
        int age=Integer.parseInt(strage);      //将字符串解析为整数
   %>
   <!--下面输出表单域的值-->
    用户名:<%=username%><br>
    年龄:<%=age%>
</body>
</html>

(源码2)

2、介绍response对象:

response常用方法有

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

addCookie(Cookie cookie)添加cookie对象

setRedirect(url)重定向jsp文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>response object test</title>
</head>
<body>
   <!--获取表单域的值-->
   <%   
        String str=null;    
         str=request.getParameter("username");
         if(str==null)
           {str="";
           }
        byte b[]=str.getBytes("ISO-8859-1");
        str=new String(b);
         if(str.equals(""))
        {
             response.sendRedirect("responseform.jsp"); 
        }
       else 
        
           out.println("欢迎您来到本网页!");
           out.println(str);
        }
    %>
</body>
</html>

(源码3)

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

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

3、介绍out对象:

out对象常用方法有

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

getBufferSize()获取缓冲区的大小

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>out object test</title>
</head>
<body>
    <!-- 使用out对象输出-->
    <%
        out.print("Hello World");      //不换行  
        out.println("Hello World");        //换行
    %>
</body>
</html>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>out object test</title>
</head>
<body>
    <!-- 使用out获取缓冲区信息-->
    <%
        int allbuf=out.getBufferSize();           //获取缓冲区的大小
        int remainbuf=out.getRemaining();          //获取剩余缓冲区的大小
        int usedbuf=allbuf-remainbuf;              //已用缓冲区
        out.println("已用缓冲区大小为:"+usedbuf);   //输出已用缓冲区大小
    %>
</body>
</html>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ page contentType="text/html;charset=GB2312" %>
<% 
    String name="";
    //判断是否为新的session
    if(!session.isNew()){
        name=(String)session.getAttribute("username");
        if(name==null)
            name="";
    }
%>
<p>欢迎光临!</p>
<p>Session ID:<%=session.getId()%></p>  
<html>
<head>
    <title>用户登录</title>
</head>
 
<body>
    <!-- 使用form标签创建表单-->
    <form action="check.jsp" method="post">
        <p>用户名:<input type="text" name="username" value=<%=name%>></p>
        <input type="submit" value="提交"/>
    </form>
 
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>进入空间</title>
</head>
<body>
<%
    String name=null;
    name=request.getParameter("username");
    if(name!=null)
        session.setAttribute("username",name);
%>
<a href="login.jsp">登录</a>&nbsp;&nbsp;&nbsp;
<a href="logout.jsp">注销</a>&nbsp;&nbsp;&nbsp;
<p>当前用户为:<%=name %></p>
<p>中共有10条未读消息</p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>注销页面</title>
</head>
<body>
<%
    String name=(String)session.getAttribute("username");
    session.invalidate();
%>
<%=name %>,再见!
<p>
<p>
<a href="login.jsp">重新登录</a>
</body>
</html>

5、介绍application对象:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>application object test</title>
</head>
<body>
<% 
    String count=(String)application.getAttribute("count");
    if(count==null)
    {
        count="1";
    }
    else
    {
        count=Integer.parseInt(count)+1+"";
    }
    application.setAttribute("count",count);
%>
<%="<h1>到目前为止,访问该网站的人数为:"+count+"</h1><br>" %>
</body>
</html>

6、介绍pageContext对象

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

详细获取方法如下代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
    <title>pageContext object test</title>
</head>
<body>
<%
    pageContext.setAttribute("attributename","page_scope"); //设置page范围内的属性
    request.setAttribute("attributename","request_scope");  //设置request范围内的属性
    session.setAttribute("attributename","session_scope");  //设置session范围内的属性
    application.setAttribute("attributename","application_scope");  //设置application范围内的属性
    String str1=(String)pageContext.getAttribute("attributename",pageContext.PAGE_SCOPE);
    String str2=(String)pageContext.getAttribute("attributename",pageContext.REQUEST_SCOPE);
    String str3=(String)pageContext.getAttribute("attributename",pageContext.SESSION_SCOPE);
    String str4=(String)pageContext.getAttribute("attributename",pageContext.APPLICATION_SCOPE);
%>
attributename在不同范围的属性值
<br>
<%="page范围:"+str1 %><br>
<%="request范围:"+str2 %><br>
<%="session范围:"+str3 %><br>
<%="application范围:"+str4 %><br>
</body>
</html>

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

如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page contentType="text/html;charset=GB2312" errorPage="exceptionobject.jsp"%>
<html>
<head>
    <title>pageContext object test</title>
</head>
<body>
    发生错误的位置!<br>
    <%
        int a=5;
        int b=0;
    %>
    输出结果=<%=(a/b)%>
</body>
</html>

打印错误代码

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true"%>
<%@ page import="java.io.PrintStream"%>
<html>
<head>
    <title>exception object test</title>
</head>
<body>
    <%=exception.getMessage() %><br>
    <%
        exception.printStackTrace(new java.io.PrintWriter(out));
    %>
</body>
</html>

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

详解JSP九个内置对象的更多相关文章

  1. jsp九个内置对象、四个域对象及Servlet的三大域对象

    一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创 ...

  2. JSP九个内置对象及指令、动作标签

    一.JSP九大内置对象 (一)JSP中无需创建就可以使用的9个对象 输入输出对象 1.response(HttpServletResponse):处理JSP生成的响应,然后将响应结果发送给客户端.是s ...

  3. JSP九个内置对象

    JSP内置对象有: 1.request对象      客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例. 2.r ...

  4. jsp jsp九个内置对象

       每个JSP页面在第一次被访问的时候,WEB容器都会把请求交给JSP引擎(即一个JAVA)程序.JSP引擎先将JSP翻译成一个_jspServlet实质也是一次servlet,然后按照 Servl ...

  5. JSP中的内置对象和Struts中的Web资源的详解

    JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法: ...

  6. java web学习总结(二十五) -------------------JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  7. JavaWeb---总结(十七)JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  8. JavaWeb学习总结(十七)——JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  9. javaWeb学习总结(8)- JSP中的九个内置对象(4)

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

随机推荐

  1. 0x14 hash

    被虐爆了 cry 我的hash是真的菜啊... poj3349 肝了一个上午心态崩了...一上午fail了42次我的天,一开始搞了个排序复杂度多了个log,而且是那种可能不同值相等的hash,把12种 ...

  2. 使用fiddler模拟http get

    wireshark抓到一个http get数据包 GET /Hero/zhCN/client/alert?build=zhCN&targetRegion=0&homeCountry= ...

  3. Spring学习笔记(一) 简介

    版权声明 本文是摘自IBM上Naveen Balani的一篇文章,原文请点击此处:http://www.ibm.com/developerworks/cn/java/wa-spring1/ Sprin ...

  4. T7315 yyy矩阵折叠(长)

    题目背景 全场基本暴零 题目描述 输入输出格式 输入格式: 如图 输出格式: 如图 输入输出样例 输入样例#1: 2 2 1 -2 3 -4 输出样例#1: 4 输入样例#2: 2 5 1 -2 -3 ...

  5. Android GreenDao 使用教程

    上一篇 总结了grendao 环境搭建以及简单的增删查改,接下来将全面解析框架的使用,基于上篇的orm模型(Note)数据库讲解 GreenDao的插入: 插入的方式有很多: daoSession.g ...

  6. indexOf实际试用方法

    用于搜索和查找关键字个数或者位置 例如: package zifu; public class tianqi { public static void main (String args[]){ St ...

  7. Kattis - Eight Queens

    Eight Queens In the game of chess, the queen is a powerful piece. It can attack by moving any number ...

  8. 谁说NTFS不支持UEFI启动的?启动U盘放不了超过4G的文件怎么办?Server2016 Win10 U盘UEFI启动制作方法

    大家都知道,我们平时做启动盘,用得最多的就是UltraISO(软碟通)这个工具了.用它我们可以很简单快速的把一个空白的普通U盘制作成一个PE启动U盘或系统U盘,然后用它来安装系统非常的方便,受到了广大 ...

  9. 转载:常用 Git 命令清单

    转载:常用 Git 命令清单 原文地址:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html  作者: 阮一峰 我每天使用 Git , ...

  10. 在ros中集成Fast-rtps库并运行hello world 程序

    1.介绍 ROS:自行百度 Fast-RTPS:是eProsima公司对RTPS标准的一个实现,也就是函数库.RTPS是DDS标准中的一个子集.RTPS:Real Time Publish Subsc ...