[02] JSP内置对象


1、内置对象的来历

JSP是由一些内置对象的,即不需要定义,也不需要我们主动创建,就可以直接使用的对象。当然,其对象名称也是固定的,无法修改,我们可以直接调用其相关方法。

在 [01] JSP的基本认识 已经说过JSP的本质,并明白了其运行的流程,容器会帮我们将JSP翻译成为Java类,其中会有一些“固定”代码,我们还是先看其核心方法:
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {PageContext pageContext = null;HttpSession session = null;ServletContext application = null;ServletConfig config = null;JspWriter out = null;Object page = this;JspWriter _jspx_out = null;PageContext _jspx_page_context = null;try {response.setContentType("text/html");pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);_jspx_page_context = pageContext;application = pageContext.getServletContext();config = pageContext.getServletConfig();session = pageContext.getSession();out = pageContext.getOut();_jspx_out = out;//我们自定义的Java代码会被翻译到这个位置} catch (Throwable t) {if (!(t instanceof SkipPageException)) {out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {out.clearBuffer();} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}
}
x
1
public void _jspService(HttpServletRequest request, HttpServletResponse response) 
2
        throws java.io.IOException, ServletException {
3
4
    PageContext pageContext = null;
5
    HttpSession session = null;
6
    ServletContext application = null;
7
    ServletConfig config = null;
8
    JspWriter out = null;
9
    Object page = this;
10
    JspWriter _jspx_out = null;
11
    PageContext _jspx_page_context = null;
12
13
    try {
14
        response.setContentType("text/html");
15
        pageContext = _jspxFactory.getPageContext(this, request, response,
16
                null, true, 8192, true);
17
        _jspx_page_context = pageContext;
18
        application = pageContext.getServletContext();
19
        config = pageContext.getServletConfig();
20
        session = pageContext.getSession();
21
        out = pageContext.getOut();
22
        _jspx_out = out;
23
 
24
        //我们自定义的Java代码会被翻译到这个位置
25
26
    } catch (Throwable t) {
27
        if (!(t instanceof SkipPageException)) {
28
            out = _jspx_out;
29
            if (out != null && out.getBufferSize() != 0)
30
                try {
31
                    out.clearBuffer();
32
                } catch (java.io.IOException e) {
33
                }
34
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
35
        }
36
    } finally {
37
        _jspxFactory.releasePageContext(_jspx_page_context);
38
    }
39
}

可以看到,在方法的开头中定义了一系列变量,在 try catch 块中对变量进行了赋值。根据容器翻译JSP文件的流程我们知道,我们自定义的Java代码都是加载在“固定”代码之后,也就是变量赋值之后,所以我们完全可以使用该方法体中内部定义的变量,以及方法的参数,并且可以顺利执行。

于是我们常用的JSP内置对象就这么有了:
类型    变量名    备注
HttpServletRequest    
request    

HttpServletResponse    response    
PageContext    pageContext    JSP上下文对象,可以由此获取其他内置对象
HttpSession    session    
ServletContext    application    
ServletConfig    config    
JspWriter    out    可以像客户端输出内容,然而<%= %>更便捷
Object    pagepage = this 指翻译后当前类的对象,很少使用
Throwable    exception错误页面才可使用

注:在某个页面抛出异常时(需页面定义 errorPage="xxx.jsp"),将转发至JSP错误页面。提供exception对象是为了在JSP中进行处理,只有在错误页面中才可以使用该对象。所以如果是作为错误页面则必须定义 <%@page isErrorPage="true" %>

那么内置对象的使用也很简单,直接在JSP页面的<% %>中嵌入即可,如 <%=request.getParameter("title)%>

至于内置对象的作用域,从他们的类型来说,已经不言而喻了,详情可以参考Servlet部分的作用域知识点。

转载于:https://www.cnblogs.com/deng-cc/p/8124540.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上传Android应用到腾讯应用宝,乐固加固应用使用

当我们开发完安卓系统APP之后。需要上传到应用市场 在上传到腾讯应用宝是&#xff0c;需要使用腾讯加固工具 乐固 加固apk。才能正常上架。 如没有加固应用会提示&#xff1a; 加固步骤: 1、下载乐固包&#xff1a;https://download.csdn.net/download/meixi_android/107534…

工作203:实现预览效果

1子组件 成功 ChangeRest(event, file){/* console.log(event)console.log(file)*//* console.log(URL.createObjectURL(file.raw))*/this.imageUrl URL.createObjectURL(file.raw);/* this.imageUrlevent.tmp_urlconsole.log(this.imageUrl)*/console.log(1)this.eventSav…

python根据文件路径获取上级目录路径

import ospath /Users/caowei/数据集/Stable/EN-2300-103-RevA.txtp_path os.path.abspath(os.path.join(path, "..")) print(p_path)saveDir os.path.dirname(path) print(saveDir)

【深入Java虚拟机】之一:Java内存区域与内存溢出

内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区&#xff1a;程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器…

java.lang.NoSuchMethodError: android.app.Notification$Builder.setChannelId

报错原因&#xff1a;低版本安卓系统没有这个setChannelld方法 解决方法&#xff1a; 判断当前手机版本进行调用setChannelld if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {builder.setChannelId("com.tianxin.mapclient.liteapp"); }

工作204:进行输入成功后验证

this.$refs["form"].validate(valid > {if (valid) {setTimeout(() > {this.$message("校验成功")/*声明变量*/let method postAction;/*声明url* position()* *//*url/user*/let url this.url.add;/*4 判断是否有id 确定新增还是编辑 根据表单数…

python判断是否在docker中

设定很简单&#xff0c;docker中有一个文件.dockerenv&#xff0c;只要判断此文件是否存在&#xff0c;来判断python是否运行在docker环境中。代码如下&#xff1a; import os def idDocker():return os.path.exists(/.dockerenv)

文件手动删除后 同步到git

http://www.tk4479.net/xiaoyuanzhiying/article/details/44085135转载于:https://www.cnblogs.com/wzqx/p/8137829.html

Android应用安装apk版本升级,适配Android 8.0和Android 10.0下载安装,shell命令安装APK

安装失败&#xff0c;gradle.properties文件下添加 即可 android.injected.testOnly false shell命令安装 /*** 安装apk** param path apk文件路径*/ public void installAPK(String path) {Log.i(TAG, "installAPK:" path);com.dlc.xiaohaitun.utils.ShellUtil…

docker中centos遇到sudo: command not found

docker中的centos是精简环境&#xff0c;直接安装即可。 yum -y install sudo

Android BroadcastReceiver,广播与进程通讯,APK安装广播,获取已安装列表

1、创建广播接收器&#xff1a; /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;13164716840163.com* 日期&#xff1a;2018/11/1 09*/ public class MyBroadcastReceiver extends BroadcastReceiver {//需要实现的方法Overridepublic void onReceive(Context conte…

工作205:修改记录取消文本提示ele提示

<!--<el-popoverplacement"left"title"修改记录"width"200"trigger"click"content"修改记录&#xff0c;修改记录。" </el-popover>

vue时间过滤器filter

属于个人代码整理 filters: {formatDate: function (e) {// 获取js 时间戳let time new Date().getTime();// 去掉 js 时间戳后三位time parseInt((time - e) / 1000);// 存储转换值let s;if (time < 60 * 10) {// 十分钟内return 刚刚;} else if (time < 60 * 60 &am…

查看SELinux状态

sestatus -v转载于:https://www.cnblogs.com/aiyr/p/8144724.html

Android 自定义Switch,仿微信开关键Switch

switch (changeFragmentEvent.getViewId()) {//启动设备&#xff08;安卓接收&#xff09;case 1:textView.setText("vvvvv555"changeFragmentEvent.getstring());break;case 2:textView.setText("vvvvv555WWW22");break; } 效果 实现方法 1、drawable下创…

超级好用 将html字符串,转化为纯文本

原始html字符串&#xff1a; <p style"text-indent: 2em; line-height: 1.5em;">春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我们上前去</p><p><br/></p>目标纯文本&#xff1a; 春天像健壮的青年,有铁一般的胳膊和腰脚,他领着我…

知识准备(1)

网上的sql优化的知识随便一搜都有很多&#xff0c;但是很少有说为什么要这么做的。这里先引入一篇博客&#xff0c;然后我们再根据具体的每一条优化建议做分析 博客转自http://blog.csdn.net/lifuxiangcaohui/article/details/8063657 下面先列出这些法则&#xff0c;大家可以先…

Android 数据解析——Gson与json

查看json数据详情链接&#xff1a;JSON在线解析及格式化验证 - JSON.cn 相比json解析&#xff0c;Gson解析更高效简洁 先看看json解析 JSONObject object new JSONObject(s);String succ object.getString("success"); JSONArray barray object.getJSONArray(&qu…