这里是修真院前端小课堂,本篇分析的主题是

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

每篇分享文从

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

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

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

1、背景介绍

百度百科是这么介绍jsp的:“jsp是一种动态网页技术标准。它出现的根本原因是为了简化servlet的设计,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。”

从以上的介绍可以得出,servlet是先出的,jsp是后出的。

所以,想要了解jsp,先学习一下servlet。

在地址栏输入"test3"访问该servlet,浏览器返回结果如下。

如果你右键查看网页源代码,可以看到是非常普通的HTML代码。

也就是,在servlet中,各种拼接HTML代码,最终返回给客户端一个HTML页面。
我们想要做的动态的网站,如果所有的HTML页面都通过这样的方式来形成,那岂不太繁琐了。
于是,诞生了jsp。

那么jsp是啥样的呢?

去浏览器访问的结果:

可以看到,jsp页面中的

 <% for(int i=0; i<4;i++) {

等嵌入的长得像java代码都消失了。而helloworld这句话出现了4次。于是猜测,jsp是否就是HTML页面嵌入java代码,然后通过某种机制去执行这些java代码,最终返回给我们想要生成的HTML页面?

在系统的某个路径下,你可以找到被tomcat解析成java类的jsp页面。而且一个是.class文件,另一个是java文件。
这不正是我们所熟悉的java类和它被编译成.class字节码文件吗?

打开test_jsp文件看一下,发现关键的部分:

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.PageContext _jspx_page_context = null;try {response.setContentType("text/html;charset=UTF-8");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;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! <br>\r\n");out.write("\r\n");out.write("    ");} out.write("\r\n");out.write("\r\n");out.write("</body>\r\n");out.write("</html>\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        作用域 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

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

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

<%@ 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">
<jsp:useBean id="pageVar" scope="page" class="java.lang.StringBuffer"/>
<jsp:useBean id="requestVar" scope="request" class="java.lang.StringBuffer"/>
<jsp:useBean id="sessionVar" scope="session"  class="java.lang.StringBuffer"/>
<jsp:useBean id="applicationVar" scope="application"  class="java.lang.StringBuffer"/>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSP内置对象作用域</title>
</head>
<body><%pageVar.append("page01");requestVar.append("page01");sessionVar.append("page01");applicationVar.append("page01");
%>
<jsp:forward page="page02.jsp"/>
</body>
</html>
<%@ page language="java" import="java.util.*" 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">
<jsp:useBean id="pageVar" scope="page" class="java.lang.StringBuffer"/>
<jsp:useBean id="requestVar" scope="request" class="java.lang.StringBuffer"/>
<jsp:useBean id="sessionVar" scope="session" class="java.lang.StringBuffer"/>
<jsp:useBean id="applicationVar" scope="application" class="java.lang.StringBuffer"/>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSP内置对象作用域</title>
</head>
<body>
这里是page02,是从page1转来的<br/>
name
<%pageVar.append("page02");requestVar.append("page02");sessionVar.append("page02");applicationVar.append("page02");
%>
<h2>page</h2> = <%=pageVar.toString()%><br/>
<h2>request</h2> = <%=requestVar.toString()%><br/>
<h2>session</h2> = <%=sessionVar.toString()%><br/>
<h2>application</h2> = <%=applicationVar.toString()%><br/></body>
</html>

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

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

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

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

什么是jsp?jsp的内置对象有哪些?相关推荐

  1. 第4章 JSP语法、内置对象

    第4章 JSP语法.内置对象 关于Spring Boot+Vue全栈开发实战(三方面)前端 全栈 Spring Boot JSP概述 4.1.1 什么是JSP(Java Server Page) 4. ...

  2. 编写两个jsp页面inputString.jsp 和computer.jsp,用内置对象获取inputString.jsp页面提交的字符串。

    编写两个jsp页面inputString.jsp 和computer.jsp,用户可以并使用inputString.jsp提供的表单输入一个字符串,并提交给computer.jsp页面,该页面通过内置 ...

  3. jsp输出金字塔_实验二 JSP语法及内置对象.doc

    实验二 JSP语法及内置对象 燕山大学经济管理学院 JSP编程技术 实验指导书 经济管理学院电子商务系 2011年5月 实 验 说 明 <JSP编程技术>JSP(Java Server P ...

  4. JSP的out内置对象及其常用方法

    JSP全名为Java Server Page,即Java服务器语言,是一种简化的Servlet语言,与ASP相似,用于动态网页的设计,下面我们就简单讲一下JSP的out内置对象以及一些常用的方法,ou ...

  5. jsp是在html中添加什么作用域,JSP九个内置对象 四大作用域 动作指令

    九个内置对象: 1.application:javax.servlet.ServletContext的实例,代表JSP所属的web应用本身,常用的方法有getAttribute(). 2.config ...

  6. jsp中的内置对象(9个)、作用

    jsp内置对象 定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 1.request对象 客户 ...

  7. JSP动作和内置对象

    前言:          这节的内容很简单,简单总结下. 一.动作元素 动作元素:主要在请求处理阶段起作用,能够影响输出流和对象的创建.使用修改等,它按照XML语法进行书写. 动作元素分为两类: 一类 ...

  8. JSP中out内置对象的使用

    out内置对象的应用方法 方法名 含义 print() 输出显示信息 println() 换行输出显示信息 clear() 清除缓冲区里的内容 clearBuffer() 清除当前缓冲区的内容 flu ...

  9. JSP学习02-config内置对象

    1.config实质上是ServletConfig的一个实例 2.config常用来获取Servlet的初始化参数 web.xml <?xml version="1.0" e ...

  10. 十月二日读书笔记(JSP网页的内置对象)

    1 request request对象用于获取客户端发来的请求信息,包括HTTP报文和网页发来的信息.例如,要获取以下表单控件的信息: <form action = "acceptio ...

最新文章

  1. Golang中的panic和recover(捕获异常)
  2. 【行业报告】基于社交图谱关系的反欺诈产品应用——青云
  3. Python反射(自省)机制
  4. Linux单磁盘根分区扩容(非LVM)
  5. 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.7 推荐阅读
  6. c++矩阵类_数据结构-JavaScript矩阵类的设计与实现
  7. centos 7 mysql随机密码_在centos中安装了mysql5.7之后解决不知道随机的密码的问题...
  8. android显示过程,Android 桌面加载图标过程分析
  9. 基于点特征的各位姿求解算法对比(pose-estimation-compared)
  10. Git的使用——解决中文乱码
  11. iOS开发初探篇——UITabBarController
  12. Android 逆向分析(三)之动态调试Smali
  13. java工程中的相关路径
  14. 【完美解决】ds1302外置时钟模块重复初始化时间问题(单片机掉电,模块电池供电)
  15. app开发需要哪些技术?4种app制作方法对比
  16. [企业信息化大家学系列]处于变革边缘的中国供应链管理
  17. Mixly米思齐_点阵
  18. Apache开启rewrite重写模块
  19. 三元运算 微信小程序_微信小程序 三元运算符 条件语句if和循环语句for(三目运算+hidden)...
  20. 内存数据库-H2简介与实践

热门文章

  1. LED 亮度调节原理 - 调电流还是调电压
  2. ros使用遇到的问题与解决方案
  3. ubuntu18.04安装 usb无限网卡上网
  4. Python爬取外网数据
  5. Word哥,扎克伯格请到了钢铁侠为AI配音
  6. ***大论文中插入Visio不失真方法:word插入viso图片方法
  7. mysql (errcode 13)_MySQL Errcode:13 – 权限被拒绝
  8. Flutter常用插件和对.yaml讲解
  9. Microsoft SQL Server Management Studio ------- 附加数据库失败
  10. 上海小学生几年级开始学计算机,上海的小学一年级到底是什么水平和真实情况...