【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. XCode下Swift – WebView IOS demo

    简介 我今天用Mac升级了XCode到8.1,Swift版本应该到了swift3,按网上的demo写webview的例子,报一堆错,整了一天才搞定,不想其他人踩坑了! XCode8.1 ,swift3 ...

  2. ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法

    title: ubuntu下Chrome谷歌浏览器部分网站图片显示不正常的解决方法 toc: false date: 2018-09-02 14:37:26 categories: methods t ...

  3. Spark SQL 编程API入门系列之SparkSQL数据源

    不多说,直接上干货! SparkSQL数据源:从各种数据源创建DataFrame 因为 spark sql,dataframe,datasets 都是共用 spark sql 这个库的,三者共享同样的 ...

  4. C++代码审查---参考林锐高质量C/C++

    功能模块名称 审查人 审查日期 代码名称 代码作者 文件结构 重要性       审查项 结论                  头文件和定义文件的名称是否合理? 头文件和定义文件的目录结构是否合理? ...

  5. Vue中问题总结 与未解决问题总结

    问题一: Error in render: "TypeError: Cannot read property 'matched' of undefined" 使用路由之后报错,路由 ...

  6. 动态数组C++实现

    回顾大二的数据结构知识.从数组开始.实现了一个可自动扩充容量的泛型数组. 头文件:Array.h #ifndef Array_hpp #define Array_hpp template <cl ...

  7. linux 下vim中关于删除某段,某行,或者全部删除的命令

  8. php--方便好用的函数

    在写代码的时候经常会遇见各种各样的问题,感觉需要写函数解决,其实php中已经给出指定函数了.这些函数就需要我们日常去了解记忆. 1.获取指点年份中某月的天数 cal_days_in_month() & ...

  9. Event-driven programming-main loop

    In computer programming, event-driven programming is a programming paradigm in which the flow of the ...

  10. CDR X7 限时3折618年中大促,是时候出手了!

    力量与激情.胜利与喜悦,这些自带饱满情绪的词,即将“刷屏”这个夏天!32支球队,28个不眠夜,你将与谁度过? 一场视觉上的饕餮盛宴即将开始! 小编也是个疯狂足球迷,虽然中国队无缘今年的俄罗斯世界杯,但 ...