【修真院java小课堂】JSP内置对象

大家好,我是IT修真院西安分院第三期学员,一枚正直纯洁善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务四,深度思考中的知识点——JSP九大内置对象。

一、背景介绍

jsp

JSP(Java Server Pages),即Java服务器界面;其根本是一个简化的Servlet设计,动态网页技术标准,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。JSP是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

一个JSP页面可以被分为以下几部份:

(1)静态数据,如HTML---------前端写的静态页面

(2)JSP指令,如include指令----------page、include、taglib

(3)JSP动作------------jsp:useBean等动作元素

(4)用户自定义标签-----自定义标签:时间转换

(5)JSP脚本元素和变量-------------使用到对象

JSP中,Scriptlet称为脚本小程序, 所有嵌套在HTML代码中的Java程序都必须使用Scriptlet标记出来。

<%%>:定义局部变量,编写语句

<%!%>:定义全局变量,可以编写类、方法

<%=%>:表达式输出,专门输出变量或一个具体值

简化理解:

servlet-----java代码

jsp---------java代码+html代码------所以说jsp可以算是servlet(编译过程什么的,不说)

然后就是:jsp中的内置对象------在jsp的java代码部分使用-----jsp内置了9个servlet的对象

总结:

jsp的内置对象的使用范围为jsp页面中的jsp脚本小程序部分;

问题:在任务中,完全可以不用jsp Scriptlet,通过EL表达式和jsp标签就能完成任务

相关:jsp产生的目的、原因;

javaweb的发展历程:

1、servlet的出现
    为了实现动态页面

2、jsp的出现-------纯jsp开发---<%%>
    java代码和html代码进行区分、out输出太多

3、model1:jsp+javaBean;---<%%>
    将部分java代码和jsp分离

4、mvc思想的出现----model2:jsp+javaBean+servlet---<%%>
    mvc思想

5、mvc各种框架的出现------struts、springmvc----任务4、5

6、前后端分离----jsp中返回json---任务2
    调接口、返回json----从页面变为数据

任务详情:修真院官网

二、知识剖析

虽然现在基本上使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的。像requestresponsesession这些对象,即便使用其他框架也是会经常用到的。因此十分有了解的必要。

request内置对象
response内置对象
page内置对象
session内置对象
application内置对象
out内置对象
exception内置对象
config内置对象
pageContext内置对象

在jsp开发当中使用比较多的就request、response、session和out对象。

request

request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

response

response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

session

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。

application

服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。

out

out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

page

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

config

config 对象的主要作用是取得服务器的配置信息。通过 pageContext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

exception

java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page isErrorPage 属性为true 时,该对象才可以使用。常用的方法有getMessage()printStackTrace()等。

pageContext

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的outrequestreponsesessionapplication 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

三、常见问题

pageContext对象和page对比

四、解决方案

JSP网页本身,page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:Object page = this;在JSP页面中,很少使用page对象。

pageContext  javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext和getServletConfig等.

总的来说,pageContext和page都是jsp中的隐含对象,pageContext代表jsp页面的上下文关系,能够调用、存取其他隐含对象;page代表处理当前请求的时候,这个页面的实现类的实例。

五、编码实战

六、扩展思考

JSP隐式对象和EL表达式隐式对象的区别

1.EL只能获取对象的属性、而不能改写、也不能直接调用方法
2.EL不能访问局部变量,只能访问作用域中的属性,比如${applicationScope.total}访问的就是applicatopn对象中的属性
3.jsp和EL表达式有一个共同的对象:pageContext 就是说<%pageContext%>和${pageContext}实际上是一个对象,余下的EL隐式对象都是Java映射(map),他们只是提供了更容易的途径来访问pageContext隐式对象的某些性质。

七、参考文献

https://blog.csdn.net/kyi_zhu123/article/details/54381221

https://www.cnblogs.com/xdp-gacl/p/3779872.html

https://blog.csdn.net/jrdgogo/article/details/52065267

https://www.cnblogs.com/whx7762/p/7723508.html

https://blog.csdn.net/zsq520520/article/details/70144604/

https://www.cnblogs.com/lifelee/p/5316403.html

八、更多讨论

1、jsp四大作用域:
(1)page:在当前页面内有效即在一个jsp页面里有效;
(2)request:在请求过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward跳转多个jsp。在这些页面里你都可以使用这个变量;
(3)Session:在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法);
(4)application:是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除(即不关闭程序),它们就一直可以使用 。

2、exception内置对象举例说明;

test.jsp为一个异常页面,page指令指定错误页面errorPage="exception.jsp"

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="exception.jsp" %>
<html>
<head>
    <title>test</title>
</head>
<body>
<%
    int i = 0;
    out.print(2 / i);
%>
</body>
</html>

exception.jsp为错误页面,page指令设置为isErrorPage="true",为错误页面

<%@ page contentType="text/html;charset=GBK" isErrorPage="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title> 内置对象的实例 </title></head>
<body>
<%=exception.getMessage()%>
</body>
</html>

结果区别:

相当于一个错误页面的处理。

3、Out输出对象clear(),clearBuffer()和flush()的区别

clear:

out对象的clear方法用于清除输出缓冲区。此方法不会将任何内容写入客户端。如果刷新缓冲区,则此方法抛出异常。
out对象的clear方法的一般语法如下:
out.clear();
clearBuffer:
out对象的clearBuffer方法用于清除输出缓冲区。此方法不会将任何内容写入客户端。
out对象的clear方法和clearBuffer方法之间的唯一区别是
clear方法在刷新缓冲区时抛出异常。
刷新缓冲区时,clearBuffer方法不会抛出异常。
flush:
out对象的两种方法,clear和clearBuffer用于清除输出缓冲区而不向客户端写入任何内容。如果要刷新缓冲区并将内容写入客户端,则可以使用out对象的flush方法。
out对象的flush方法用于通过将内容写入客户端来刷新缓冲区。

 

感谢观看,如有出错,恳请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值