【jsp】jsp简介
JSP起源:
- 只有局部内容需要动态产生和改变。在很多动态网页中,绝大部分内容都是固定不变的
- Servlet程序的代码将非常臃肿,编写和维护都将非常困难。使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生
- 实现美工设计与java代码的结合。对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。
- 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。
- Java代码和HTML语句混合在同一个文件中编写。JSP是简化Servlet编写的一种技术,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。
建立对JSP的直观认识
- JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp。
- 在JSP页面中编写的Java代码需要嵌套在<%和%>中
- 脚本片段(Scriptlets):嵌套在<%和%>之间的Java代码
- 模版元素:没有嵌套在<%和%>之间的内容被称之为JSP的。
- JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println语句将它们打印到命令行窗口。
- JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
什么是JSP
- JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
- JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态内容,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
- Jsp快速入门:在jsp页面中输出当前时间。
- 不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,
- servlet作为web应用中的控制器组件来使用
- JSP技术作为数据显示模板来使用。
- 其原因为,程序的数据通常要美化后再输出:
- 让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
- 让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。、
- 因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
提问:为什么JSP技术也是一种动态web资源的开发技术?
答:因为JSP技术允许在页面中嵌套java代码,以产生动态数据,并且web服务器在执行jsp时,web服务器会传递web开发相关的对象给jsp,jsp通过这些对象,可以与浏览器进行交互,所以jsp当然也是一种动态web资源开发技术。
强调一个概念:对现在的用户而言,认为通过浏览器看到的东西都是网页。但我们程序员心里要清楚,开一个浏览器访问网页,这些网页有可能是一个html页面(即静态web资源),也有可能是一个动态web资源(即servlet或jsp程序输出的)。
JSP原理
Web服务器是如何调用并执行一个jsp页面的?
Jsp页面中的html排版标签是如何被发送到客户端的?
Jsp页面中的java代码服务器是如何执行的?
Web服务器在调用jsp时,会给jsp提供一些什么java对象?
JSP运行原理:
- WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
- 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
- Tomcat 5.x把为JSP页面创建的Servlet源文件和class类文件放置在“<TOMCAT_HOME>\work\Catalina\<主机名>\<应用程序名>\”目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp.<JSP页面在WEB应用程序内的目录名> 。
- JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。
- 可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。
分析JSP所生成的Servlet代码
- JSP页面翻译成的Servlet继承了org.apache.jasper.runtime.HttpJspBase类,HttpJspBase类是HttpServlet的一个子类,因此JSP页面翻译成的Servlet是HttpServlet
- 一个孙子类。HttpJspBase类实现了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase类是抽象的。
- SUN公司为JSP的WEB容器开发商和JSP页面开发人员提供了一套专门应用于开发JSP程序的Java类,这套Java类被称为JSP API。HttpJspPage接口和JspPage接口用于JSP API,在HttpJspPage接口中只定义了一个_jspService方法,但它继承了JspPage接口,JspPage接口中定义了两个方法:jspInit()和jspDestroy()。
- HttpJspBase的init方法调用了jspInit和_jspInit方法,destroy方法内部调用了jspDestroy和_jspDestroy方法,service方法内部调用了_jspService方法。在HttpJspBase中实现的init、service和destroy方法都被声明成了final类型。
- JSP页面中的位于<% %>外面的每行和紧临<%%>两边的每段文本被转换成以这些文本作为参数的一条条out.write语句,JSP脚本片断(位于<%%>内的一段java代码)中的java代码被原封不动地搬移进了_jspService方法中的相应位置处,JSP表达式(位于<%=和%>之中的内容)则是被转换成以其中的变量或表达式作为参数的out.print语句。
JSP的执行过程
JSP的执行过程主要可以分为以下几点:
- 客户端发出请求。
- Web容器将JSP转译成Servlet源代码。
- Web容器将产生的源代码进行编译。
- Web容器加载编译后的代码并执行。
- 把执行结果响应至客户端。
隐式对象:9个
为什么需要隐式对象
- 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
- 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
- JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。
这9个对象分别是哪些,以及作用也是笔试经常考察的知识点。
- request
- response
- config
- application
- exception
- Session
- page
- out
- out隐式对象用于向客户端发送文本数据。
- out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
- JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
- 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
- 设置page指令的buffer属性关闭了out对象的缓存功能
- out对象的缓冲区已满
- 整个JSP页面结束
- out隐式对象的工作原理图
- out隐式对象注意事项
- 同时使用out和response.getwriter()输出数据。
- 用JSP实现文件下载。
- pageContext
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws java.io.IOException, ServletException
{
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
...
...
Throwable exception =
org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
【jsp】jsp简介相关推荐
- java 进度条jsp,jsp进度条_jsp技巧
开始页面:start.jsp 状态页面:status.jsp JSP进度条 setTimeout("location=status.jsp", 1000); JSP进度条 结果: ...
- JSP (一) ---[什么是JSP,JSP 与 Servlet 有什么区别]
目录 什么是JSP JSP 与 servlet 有什么区别 早期的动态页面从servlet中输出的;(这里的动态页面指的是数据可以动态地从数据库中获取); 但是由于服务器响应页面编辑比较复杂; 所以引 ...
- 金蝶中间件AAS部署JSP项目报错: jsp: JSP编译错误: Invalid escape sequence (valid ones are \b \t \n \f \r \“
问题现象如下图: 然后访问项目时,就会提示服务器内部错误. 具体报错信息: 2022-06-14 17:40:41 错误 [apusic.jsp.parser-HTTPHandler-5-47] Fi ...
- JSP→Javabean简介设计原则、JSP动作、Javabean三个动作、Javabean四个作用域范围、Model1简介弊端、JSP状态管理、include动作指令、forword动作、param
Javabean简介设计原则 JSP动作 useBean动作 setProperty动作 getProperty动作 Javabean的四个作用域范围 Model1简介弊端 JSP状态管理 Cooki ...
- JSP→JavaWeb简介、Tomcat服务器安装启动测试目录、Tomcat手动创建项目、开发工具MyEclipse与Eclipse配置环境、MyEclipse创建Web程序目录、修改Tomcat端口
动态网页的动态指的是能与用户进行交互 Tomcat官网http://tomcat.apache.org/ Tomcat服务器安装启动测试目录 Tomcat手动创建项目 修改服务器配置生效需要重启!重启 ...
- JSP -- JSP语法
1.什么是JSP? Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种惯用语开发动态web资源的技术 2.JSP技术的特点 相比html而言,html ...
- [Jsp] JSP和Servlet页面间的参数的传递和接收
在我们的项目中 ① 页面传递参数 1)JSP-->servlet: JSP页面传递参数一般都是通过在JS函数里面使用表单的Action属性/window的location属性/window的op ...
- html ajax请求jsp,JSP+jquery使用ajax方式调用json的实现方法
本文实例讲述了JSP+jQuery使用Ajax方式调用JSON的实现方法,在这里分享给大家以供大家参考,具体的实现以及代码如下所示: 前台: //test function test(uid) { i ...
- php 和jsp,jsp和php哪个好?jsp和php的简单比较
jsp和php这两个Web开发技术哪个好?这个问题应该会有很多人问,但是每种开发技术都有各自的优缺点,所谓的哪个好,不过是看你更擅长使用哪一种技术,所以今天我们来对比一下jsp和php,介绍jsp和p ...
- java中document解析jsp,JSP基于dom解析xml实例详解
本文实例讲述了JSP基于dom解析xml的方法.分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩) ...
最新文章
- java项目集成mybatis_JAVA应用程序单独集成Mybatis使用Demo
- Mysql中varchar类型的猫腻!
- 10的多少次方 oracle_初中数学:关于一元二次方程的中考经典例题,千万别错过!...
- MongoDB 的 upsert
- 高德地图+Serverless 护航你的假日出行
- SpringMVC异常处理器代码示例
- 旅行 jzoj 1281
- Idea Debug 时 JAVA对象转Json字符串 的操作
- 酷狗音乐api接口php,【教程分享】酷狗音乐API接口大全(40+个)
- 三星s8刷机包android10版本,三星S8+刷机包(官方固件最新升级包v7.0)
- Java设计模式之模板方法模式(UML类图分析+代码详解)
- The 10 Best Neighborhoods in Seattle
- 主动降噪耳机排行榜10强,主动降噪耳机十大品牌
- 【CTF-misc】真是阳间题!
- 爬取链家网站的北京租房信息
- 硬干货!1.8W字TS 学习指南,我不信你一口气能读完(建议收藏)
- 未明学院:毕业那些事:三方、档案、延毕,你都了解吗?
- 传世基本架构-服务器端(LoginGate服务器处理)
- 实习周记1(sdk了解、fiddler抓包、反编译工具)
- 2021武汉理工大学计算机考研复试经验分享
热门文章
- 双卡双待手机[海信]挂断来电和指定卡去电实现
- 通过request对象获取客户端请求信息
- Python dll注入
- androidstudio批量删除注释的方法
- ios post上传文件到服务器,iOS post请求上传文件(OC)
- java开发电脑软件_JAVA开发程序员,开发使用笔记本推荐?
- 产业区块链一周动态丨成都欲打造全球算力之都,BSN写入福建新基建三年行动计划...
- 函数返回值的简述(简洁明了)
- 牛客网数据库SQL实战23—— 对所有员工的薪水按照salary进行按照1-N的排名
- 模糊综合评价的几种合成算子及matlab应用1