【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. h5-news_index

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdcAAABuCAIAAAD6VM6fAAAUEUlEQVR4nO2dfXRTZZ7Hfx735Z/lr9 ...

  2. Win+X

    Win+X 方便的快捷键,可以快速使用命令行和运行!

  3. pcap文件生成metadata——使用tshark解析tcpdump的pcap包

    pcap文件生成metadata #!/usr/bin/env python # -*- coding: utf-8 -*- import os import time, datetime impor ...

  4. Hadoop 三剑客之 —— 分布式文件存储系统 HDFS

    一.介绍 二.HDFS 设计原理     2.1 HDFS 架构     2.2 文件系统命名空间     2.3 数据复制     2.4 数据复制的实现原理     2.5 副本的选择     2 ...

  5. ROS-URDF文件标签解读

    前言:URDF文件标签解读.margin: auto; width: 700px; height: 100px; ; width: 700px; text-align: center; 一.连杆(li ...

  6. Linux中安装redis的phpredis扩展

    下载phpredis扩展 http://pecl.php.net/package/redis wget http://pecl.php.net/get/redis-4.0.2.tgz 需要环境配置文件 ...

  7. Hacking PHP

    0X01 SQL注入 这里主要是PHP的防范注入的几个配置,注入手法不再赘述 magic_quotes_gpc 对 $_GET $_POST $_COOKIE 变量中的 ' " \ 空字符( ...

  8. Data type-数据类型

    操作方式.含义.存储方式. In computer science and computer programming, a data type or simply type is a classifi ...

  9. ZBrush中物体的显示与隐藏

    在ZBrush®中除了遮罩功能可以对局部网格进行编辑外,通过显示和隐藏局部网格也可以对局部进行控制.选择网格的控制都是手动操作,在软件中并没有相应的命令进行操作.选择局部网格的工作原理也很简单,即被选 ...

  10. 利用after和before伪元素在文字两边写横线

    示例: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...