`
涛涛饭
  • 浏览: 10488 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

JSP中9大隐式对象的总结

JSP 
阅读更多

JSP的隐式对象[9]

 

用来数据共享的对象:

pageContext:     在本页共享数据

request    在同一次请求响应过程中共享数据

session    在同一个会话中共享数据

application     在应用程序运行期间共享数据

 

 

Servlet有关的对象:

page  jsp页面本身

config 用来存储jsp配置信息的对象

 

与输入输出有关的对象:

out 向浏览器输出信息

request:包含请求信息

response:包含的响应信息

 

和异常处理有关的对象

exception    用来处理异常的对象

           定义错误页面

           <%@ page isErrorPage="true" %>

 

           如果页面需要处理异常

           <%@ page errorPage="error.jsp"%>

request              请求对象                 类型 javax.servlet.ServletRequest        作用域 Request

response           响应对象                    类型 javax.servlet.SrvletResponse       作用域  Page

pageContext    页面上下文对象        类型 javax.servlet.jsp.PageContext      作用域    Page

session             会话对象                     类型 javax.servlet.http.HttpSession       作用域    Session

application       应用程序对象            类型 javax.servlet.ServletContext          作用域    Application

out                      输出对象                    类型 javax.servlet.jsp.JspWriter             作用域    Page

config                配置对象                    类型 javax.servlet.ServletConfig            作用域    Page

page                 页面对象                    类型 javax.lang.Object                            作用域    Page

exception         例外对象                    类型 javax.lang.Throwable                     作用域    Page 

 

代码示例index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

 

<%

       //存储

       pageContext.setAttribute("pageContext", 1);

       request.setAttribute("request", 1);

       session.setAttribute("session", 1);

       application.setAttribute("application", 1);

       //在本页获取

       Object obj = pageContext.getAttribute("pageContext");

       Object obj1 = request.getAttribute("request");

       Object obj2 = session.getAttribute("session");

       Object obj3 = application.getAttribute("application");

%>

pageContext:<%=obj %><br/>

       request:<%=obj1 %><br/>

       session:<%=obj2 %><br/>

       application:<%=obj3 %><br/>

<%

//request.getRequestDispatcher("index2.jsp").forward(request, response);

 

//response.sendRedirect("index2.jsp");

 

%>

</body>

</html>

这是index.jsp文件,在小文本程序脚本中分别给pageContextrequestsessionapplication三个对象赋值1,并且在本页打出,页面显示:

pageContext:1
request:1
session:1
application:1

四个对象中的值,

打开index.jsp中的

request.getRequestDispatcher("index2.jsp").forward(request, response);

让改页面跳转到到index2.jsp.

下面给出index2.jsp的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

       <%

              //在转发后的页获取

              Object obj = pageContext.getAttribute("pageContext");

              Object obj1 = request.getAttribute("request");

              Object obj2 = session.getAttribute("session");

              Object obj3 = application.getAttribute("application");

       %>

      

       这个是index2.jsp的数据:<br/>

       pageContext:<%=obj %><br/>

       request:<%=obj1 %><br/>

       session:<%=obj2 %><br/>

       application:<%=obj3 %><br/>

      

       <%

       //request.getRequestDispatcher("index3.jsp").forward(request, response);

 %>

</body>

</html>

再次执行index.jsp显示的结果:

这个是index2.jsp的数据:
pageContext:null
request:1
session:1
application:1

 

由此说明pageContext的作用范围是本页中。

这一次注销index.jsp中的//request.getRequestDispatcher("index2.jsp").forward(request, response);

打开response.sendRedirect("index2.jsp");

显示运行结果:

这个是index2.jsp的数据:
pageContext:null
request:null
session:1
application:1

这是什么原因呢?

这是因为forward和重定向跳转有区别,forward跳转是同一个请求响应,重定向跳转是进行了第二次请求响应,当使用重定向跳转进行了新的请求响应,由此也说明了request是作用范围是在同一个请求响应中。并且request的作用范围大于pageContext

接下来打开index.jsp中的

request.getRequestDispatcher("index2.jsp").forward(request, response);

关闭

//response.sendRedirect("index2.jsp");

然后打开index2.jsp中的

request.getRequestDispatcher("index3.jsp").forward(request, response);

运行index.jsp运行结果显示:

这个是index33333333.jsp的数据:
pageContext:null
request:1
session:1
application:1

下面给出index3.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

       <%

              //在转发后的页获取

              Object obj = pageContext.getAttribute("pageContext");

              Object obj1 = request.getAttribute("request");

              Object obj2 = session.getAttribute("session");

              Object obj3 = application.getAttribute("application");

       %>

      

       这个是index33333333.jsp的数据:<br/>

       pageContext:<%=obj %><br/>

       request:<%=obj1 %><br/>

       session:<%=obj2 %><br/>

       application:<%=obj3 %><br/>

</body>

</html>

这里我们需要注意同一浏览器无论多少窗口访问同一个地址,那么他们都是同一个session对象,但是不同浏览器访问同一地址,是不同的session对象。

当我们在同一个浏览器里面运行index.jsp页面,也就是给那四个对象赋值,不管我们打开多少次窗口运行多少次index2.Jsp页面结果显示也是:

这个是index33333333.jsp的数据:
pageContext:null
request:null
session:1
application:1

但是当我们在其他的浏览器中访问index2.jsp或者关闭浏览器重新访问index2.jsp的时候页面显示的结果:

这个是index33333333.jsp的数据:
pageContext:null
request:null
session:null
application:1

在此证明了session的作用范围是一次会话。

其实也另外说明从index.jsp跳转index2.jsp,再从index2.jsp跳转index3.jsp是同一次请求应答,它与index2.jsp直接跳转index3.jsp不是同一个请求应答。

 

这一次我们关掉服务器重新启动Tomcat,再去访问index2.jsp或者index3.jsp显示结果:

这个是index33333333.jsp的数据:
pageContext:null
request:null
session:null
application:null

这里说明application的作用范围是在应用程序运行期间。

 

下面给出index4.jsp的代码:

<%@page import="org.apache.jasper.servlet.JspServlet"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

 

       <%

              //由于JSP本身就是一个Servlet

              HttpJspPage servlet = (HttpJspPage) page;

              String str = servlet.getServletInfo();

      

              String str2 = this.getServletName();

              String str3=this.getServletInfo();

       %>

       <%=str%> -- <%=str2%>--<%=str3%>

</body>

</html>

其实我觉得这里的重点是强调jsp本身就是一个Servlet,我就简单说一下jsp怎么工作的,Tomcat现将jsp转化成jsp.java 再将jsp.java转化成jsp.class文件运行

运行结果显示:

Jasper JSP 2.1 Engine -- jsp--Jasper JSP 2.1 Engine

strstr3一样很明显说明了pagejsp页面本身。

下面给出index5.jsp的代码:
<%@page import="org.apache.jasper.servlet.JspServlet"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

       这个是index5.jsp!

 

       <%

       String className = config.getInitParameter("className");

       String url = config.getInitParameter("url");

       String user = config.getInitParameter("user");

       String pwd = config.getInitParameter("pwd");

%>

 

 

<%=className %><br/>

<%=url %><br/>

<%=user %><br/>

<%=pwd %><br/>

</body>

</html>

运行结果显示:

这个是index5.jsp! oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:ORCL
scott
tiger

这是因为我们在web.xml中配置了。

<servlet>

      <servlet-name>aa</servlet-name>

      <jsp-file>/index5.jsp</jsp-file>

      <init-param>

             <param-name>className</param-name>

             <param-value>oracle.jdbc.driver.OracleDriver</param-value>

      </init-param>

      <init-param>

             <param-name>url</param-name>

             <param-value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</param-value>

      </init-param>

      <init-param>

             <param-name>user</param-name>

             <param-value>scott</param-value>

      </init-param>

             <init-param>

             <param-name>pwd</param-name>

             <param-value>tiger</param-value>

      </init-param>

  </servlet>

  <servlet-mapping>

      <servlet-name>aa</servlet-name>

      <url-pattern>/aa</url-pattern>

  </servlet-mapping>

所以config是用来存储jsp配置信息的对象

Out向浏览器输出信息我们经常会用到

PrintWriter out = response.getWriter();

 

out.print(“   ”);

我们最后一个说一下这个异常对象

exception    用来处理异常的对象

下面给出index6.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

       pageEncoding="UTF-8"%>

 

<%@ page errorPage="error.jsp"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

 

       <%

              int a = 1, b = 0;

       %>

       <%=a / b%>

       <a href="index7.jsp">这是一个超连接</a>

 

 

</body>

</html>

还有error.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

 

<%@ page isErrorPage="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

你访问的页面飞走了!!

 

<%

String msg = exception.getMessage();

%>

 

<%=msg %>

</body>

</html>

运行index6.jsp的结果显示:

你访问的页面飞走了!! / by zero

要注意的就是上面我们说道的需要定义错误页面,并且在出错的页面中写入

<%@ page errorPage="error.jsp"%>

分享到:
评论

相关推荐

    EL表达式 隐式对象

    ### EL表达式 隐式对象 #### 一、EL表达式基础 ##### 1. 语法结构 EL表达式采用特定的语法结构来进行数据的提取和操作,其基本格式为 `${expression}`。这里的 `expression` 可以是变量、方法调用或其他逻辑表达式...

    Java Web程序设计入门课件-EL隐式对象.pptx

    总结来说,Java Web程序设计中的EL隐式对象极大地简化了开发者的工作,使他们能够更高效地处理Web应用程序中的数据。从请求参数到会话管理,再到Cookie操作,EL隐式对象提供了一套完整的工具集,帮助开发者构建功能...

    JSP基础知识总结(JSP技术,XML配置,会话,JavaBean)

    第二部分就是Jsp技术,包括:jsp简介,jsp脚本和指令的使用,jsp隐式对象,JavaBean与jsp中的标准动作,jsp表达式语言,自定义标签,jsp自定义表签库. 第三部分就是过滤器的设计模式,包括过滤器和MVC设计模式. 目录 [隐藏] ...

    JSP测试题1(有答案)

    9. 关于 JSP 的隐式对象,正确的描述是:隐式对象是 web 容器加载的一组对象,可以直接在 JSP 页面使用。 知识点:JSP 中的隐式对象是 web 容器加载的一组对象,例如 request、response、session 等,可以直接在 ...

    jsp期末复习资料总结

    在J2EE中,JSP隐式对象包括pageContext、application和out,它们提供便利的功能,如pageContext用于访问其他JSP对象,application用于共享全局数据,out用于输出数据到响应流。 【JSP标记】 JSP标记分为指令标记...

    servlet jsp总结

    ### Servlet与JSP知识点总结 #### 一、Servlet概述及基本使用 - **Servlet定义**:Servlet是一种服务器端的小程序,用于处理来自Web浏览器或其他HTTP客户端的请求,并返回响应。Servlet通常作为MVC架构模式中的...

    JSP程序设计期末试卷A题目及其答案.doc

    本文总结了 JSP 程序设计期末试卷 A 题目及其答案中的知识点,涵盖了 JSP 的基本概念、异常处理、隐式注释、重定向、Session 对象、JavaBean、getProperty 标记、 `&lt;c:choose&gt;` 标记、输出变量、Filter 方法和 ...

    Jsp期末考试卷子

    **JSP隐式对象**:“context”并不是JSP的一个隐式对象,JSP的隐式对象包括`page`, `pageContext`, `request`, `response`, `session`, `application`, `out`, `config`, `exception`等,它们由JSP容器自动提供,...

    JSP 标准动作的WORD文档

    首先,我们要理解JSP隐式对象的重要性。这些预定义的对象,如`request`、`response`、`out`、`session`、`application`和`pageContext`,是JSP容器自动导入到每个JSP页面中的。它们提供了对HTTP请求、响应以及页面上...

    JSP EL表达式

    - 隐式对象的使用需要在JSP页面的web.xml文件中对EL表达式的支持进行配置。 - EL表达式默认不启用对静态资源的访问,需要通过配置JSP页面解析器来启用。 总结而言,JSP EL表达式为JSP页面提供了一种轻量级的数据...

    JSP开发技术\第15章 WebLogic server 下的Jsp开发

    第12页介绍了JSP中的9个隐式对象,它们是开发者可以直接使用的预定义对象,包括`out`、`request`、`response`、`session`、`application`、`config`、`page`、`pageContext`和`exception`。这些对象提供了与HTTP请求...

    良心出品JSP程序设计期末试卷A题目及其答案.doc

    本资源摘要信息涵盖了 JSP 程序设计期末试卷的主要知识点,包括 JSP 页面的扩展名、导入 java.io.* 包、异常处理、隐式注释、重定向、Session 对象、JavaBean 的访问范围、请求转发、属性获取、条件标记、Filter ...

    JSP期末试题

    解析:JSP隐式对象中没有"context",正确的应该是"pageContext",它是JSP页面的上下文对象,提供了访问其他JSP隐式对象的方法。 6)Servlet 中,HttpServletResponse 的()方法用来把一个 Http 请求重定向到另外的...

    JSP & Servlet 深入剖析

    #### JSP隐式对象 - **隐式对象**:JSP提供了多个预定义的隐式对象,这些对象无需显式声明即可直接使用。常见的隐式对象包括: - `out`:用于向客户端输出数据。 - `request`:封装了HTTP请求的信息。 - `...

    一套JSP测试题,有答案

    - **隐式对象**:预定义的对象,如request、session、application等,无需显式声明即可在EL中使用。 #### 7. JSTL标签库 JSTL(JavaServer Pages Standard Tag Library)是一组标准标签库,用于增强JSP页面的功能性...

    JSP试题.doc

    5. **JSP的隐式对象**:在JSP中,`b)context`不是一个隐式对象。隐式对象包括`pageContext`、`application`、`out`等,它们提供了访问上下文、输出流等功能的便捷方式。 ### Servlet的功能 6. **重定向URL**:`c)...

    jsp表达式语言

    - **隐式对象**:EL提供了一系列内置对象,如`pageScope`、`requestScope`、`sessionScope`和`applicationScope`,以及`param`、`header`等,用于快速访问请求参数和其他HTTP相关信息。 #### 四、EL在无脚本JSP页面...

    网上花店jsp+javabean

    在“网上花店jsp+javabean”项目中,当用户在前端页面(JSP)上进行操作,比如选择鲜花、填写收货信息并提交订单,这些请求会被JSP捕获并通过隐式对象(如`request`、`session`)传递到后台的JavaBean。JavaBean处理...

Global site tag (gtag.js) - Google Analytics