热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

request内置对象,什么是JSP

这里是修真院前端小课堂,本篇分析的主题是【什么是jsp?jsp的内置对象有哪些?】每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论


这里是修真院尖端小教室,本篇分析的主题是


【什么是jsp? jsp的内置对象是什么? 】


所有的共享语句都是


【背景介绍】【知识分析】【常见问题】【解决方案】【编码实战】【思维拓展】【更多讨论】【参考文献】


从8个方面深入解析前端知识/技能,本篇分享的是:


【什么是jsp? jsp的内置对象是什么? 】


1、背景介绍百度百科这样介绍JSP :“JSP是动态网页技术标准。 其根本原因是为了简化servlet的设计,是由Sun Microsystems公司提出并由多家企业参与设立的动态web技术标准。 ”


通过以上介绍,可以看到servlet先出,jsp后出。


所以,如果你想知道jsp,请先学习servlet。


在地址栏中键入test3访问servlet时,浏览器将返回与以下内容类似的结果:


在网页源代码上单击鼠标右键,可以看到它是一个非常常见的HTML代码。


也就是说,servlet将各种HTML代码连接在一起,最终将HTML页返回给客户端。


我们要做的动态网站,如果所有的HTML页面都是这样形成的,会不会太繁琐了?


于是,jsp诞生了。


jsp怎么样呢?


访问浏览器的结果:


如您所见,jsp页面的


%for(intI=0; i4; I )等中嵌入的类似java代码的东西消失了。 出现了四次helloworld这个词。 因此,jsp推测是不是要在HTML页面中嵌入java代码,以某种方式执行这些java代码,最终返回到想要生成的HTML页面。


在系统所在的路径下,可以找到由tomcat解析为java类的jsp页。 然后一个是. class文件,另一个是java文件。


这不是我们熟悉的java类及其编译到. class字节码文件中吗?


打开test_jsp文件可以看到重要的部分。


publicvoid_JSP服务(final javax.servlet.http.httpservletrequestrequest,final javax.servlet.http.http servlet respop javax.servlet.servlet exception javax.servlet.http.http会话会话=null; final javax.servlet.servlet上下文APP; final javax.servlet.servletconfig config; jvax.servlet.JSP.jspwriter out=null; final java.lang.Object page=this; jvax.servlet.JSP.jspwriter _ jspx _ out=null; avax.servlet.JSP.pagecontext _ jspx _ page _ cOntext=null; try { response.set content type (' text/html; charset=UTF-8 '; pagecOntext=_ jspx factory.get pagecontext (this,request,response,null,true,8192,true ); _jspx_page_cOntext=pageContext; application=pagecontext.getservletcontext (; cOnfig=pagecontext.get servletconfig (; session=pageContext.getSession (; out=pageContext.getOut (; _jspx_out=out; out.write('\r\n ' ); out.write('\r\n ' ); out.write(html\r\n ); out.write(head\r\n ); out.write(title测试/title\r\n ); out.write ()/head\r\n ); out.write(body\r\n ); out.write('\r\n ' );

out.write(" "); for(int i=0; i<4;i++) { out.write("\r\n"); out.write(" helloWorld!
\r\n"); out.write("\r\n"); out.write(" "); } out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }

 

2、知识剖析:


来看一下jsp的执行流程:

 

注意,只有jsp是新创建或是修改后第一次访问时,jsp parser才会将其编译成servlet程序。之后调用JSDK将对应的servlet程序编译成servlet字节码。

而且,它并非是将页面本身发送给客户端,而是把页面执行的结果发送给客户端。
客户端收到这个文件后,就可以正常显示在客户端了。

比如我要要访问test.jsp,然后利用Tomcat的解析器,他会将jsp文件转化为java文件,这个java文件就是servlet,
所以jsp本质上就是servlet。
jsp能实现的,servlet也能实现。不管你最终写的是一个多么复杂的jsp文件,它最后总能转化为一个html文件。

jsp的9个内置对象和4个作用域:

request 请求对象  类型 javax.servlet.ServletRequest 作用域 Requestresponse 响应对象 类型 javax.servlet.SrvletResponse 作用域 PagepageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Pagesession 会话对象 类型 javax.servlet.http.HttpSession 作用域 Sessionapplication 应用程序对象 类型 javax.servlet.ServletContext 作用域 Applicationout 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Pageconfig 配置对象 类型 javax.servlet.ServletConfig 作用域 Pagepage 页面对象 类型 javax.lang.Object 作用域 Pageexception 例外对象 类型 javax.lang.Throwable 作用域 page

同样 来看一个例子:
这里有两个jsp页面,page01和page02。

jsp useBean 标签表示 创建一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上。
那这里我创建了4个字符串缓冲类的实例,他们的作用域分别是page, request, session,application。

<%@ page language="java" cOntentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% pageVar.append("page01"); requestVar.append("page01"); sessionVar.append("page01"); applicationVar.append("page01");%> <%@ page language="java" import="java.util.*" cOntentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 这里是page02,是从page1转来的
name<% pageVar.append("page02"); requestVar.append("page02"); sessionVar.append("page02"); applicationVar.append("page02");%>

page

= <%=pageVar.toString()%>

request

= <%=requestVar.toString()%>

session

= <%=sessionVar.toString()%>

application

= <%=applicationVar.toString()%>

jsp forward 标签表示 当走到这里的时候,页面会跳转到page02.jsp。 这刚好就是一个会话的场景,

 

 

现在我们刷新一下页面,可以看到,page作用域变量的输出的值为page02,原本它的page01已经不见了。

request作用域的变量只在当前请求的中有效,当前的请求就是从page01到page02的一次跳转。
所以它的值把page01和page02都显示出来了。

session作用域的变量为当前会话,也就是只要浏览器不关闭,page02能一直叠加到上去。
application 对所有应用有效,也就是只要这个应用启动着,都要叠加。

 


推荐阅读
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • andr ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
author-avatar
零乱772_553
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有