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简介相关推荐

  1. java 进度条jsp,jsp进度条_jsp技巧

    开始页面:start.jsp 状态页面:status.jsp JSP进度条 setTimeout("location=status.jsp", 1000); JSP进度条 结果: ...

  2. JSP (一) ---[什么是JSP,JSP 与 Servlet 有什么区别]

    目录 什么是JSP JSP 与 servlet 有什么区别 早期的动态页面从servlet中输出的;(这里的动态页面指的是数据可以动态地从数据库中获取); 但是由于服务器响应页面编辑比较复杂; 所以引 ...

  3. 金蝶中间件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 ...

  4. JSP→Javabean简介设计原则、JSP动作、Javabean三个动作、Javabean四个作用域范围、Model1简介弊端、JSP状态管理、include动作指令、forword动作、param

    Javabean简介设计原则 JSP动作 useBean动作 setProperty动作 getProperty动作 Javabean的四个作用域范围 Model1简介弊端 JSP状态管理 Cooki ...

  5. JSP→JavaWeb简介、Tomcat服务器安装启动测试目录、Tomcat手动创建项目、开发工具MyEclipse与Eclipse配置环境、MyEclipse创建Web程序目录、修改Tomcat端口

    动态网页的动态指的是能与用户进行交互 Tomcat官网http://tomcat.apache.org/ Tomcat服务器安装启动测试目录 Tomcat手动创建项目 修改服务器配置生效需要重启!重启 ...

  6. JSP -- JSP语法

    1.什么是JSP?       Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种惯用语开发动态web资源的技术 2.JSP技术的特点 相比html而言,html ...

  7. [Jsp] JSP和Servlet页面间的参数的传递和接收

    在我们的项目中 ① 页面传递参数 1)JSP-->servlet: JSP页面传递参数一般都是通过在JS函数里面使用表单的Action属性/window的location属性/window的op ...

  8. html ajax请求jsp,JSP+jquery使用ajax方式调用json的实现方法

    本文实例讲述了JSP+jQuery使用Ajax方式调用JSON的实现方法,在这里分享给大家以供大家参考,具体的实现以及代码如下所示: 前台: //test function test(uid) { i ...

  9. php 和jsp,jsp和php哪个好?jsp和php的简单比较

    jsp和php这两个Web开发技术哪个好?这个问题应该会有很多人问,但是每种开发技术都有各自的优缺点,所谓的哪个好,不过是看你更擅长使用哪一种技术,所以今天我们来对比一下jsp和php,介绍jsp和p ...

  10. java中document解析jsp,JSP基于dom解析xml实例详解

    本文实例讲述了JSP基于dom解析xml的方法.分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩) ...

最新文章

  1. java项目集成mybatis_JAVA应用程序单独集成Mybatis使用Demo
  2. Mysql中varchar类型的猫腻!
  3. 10的多少次方 oracle_初中数学:关于一元二次方程的中考经典例题,千万别错过!...
  4. MongoDB 的 upsert
  5. 高德地图+Serverless 护航你的假日出行
  6. SpringMVC异常处理器代码示例
  7. 旅行 jzoj 1281
  8. Idea Debug 时 JAVA对象转Json字符串 的操作
  9. 酷狗音乐api接口php,【教程分享】酷狗音乐API接口大全(40+个)
  10. 三星s8刷机包android10版本,三星S8+刷机包(官方固件最新升级包v7.0)
  11. Java设计模式之模板方法模式(UML类图分析+代码详解)
  12. The 10 Best Neighborhoods in Seattle
  13. 主动降噪耳机排行榜10强,主动降噪耳机十大品牌
  14. 【CTF-misc】真是阳间题!
  15. 爬取链家网站的北京租房信息
  16. 硬干货!1.8W字TS 学习指南,我不信你一口气能读完(建议收藏)
  17. 未明学院:毕业那些事:三方、档案、延毕,你都了解吗?
  18. 传世基本架构-服务器端(LoginGate服务器处理)
  19. 实习周记1(sdk了解、fiddler抓包、反编译工具)
  20. 2021武汉理工大学计算机考研复试经验分享

热门文章

  1. 双卡双待手机[海信]挂断来电和指定卡去电实现
  2. 通过request对象获取客户端请求信息
  3. Python dll注入
  4. androidstudio批量删除注释的方法
  5. ios post上传文件到服务器,iOS post请求上传文件(OC)
  6. java开发电脑软件_JAVA开发程序员,开发使用笔记本推荐?
  7. 产业区块链一周动态丨成都欲打造全球算力之都,BSN写入福建新基建三年行动计划...
  8. 函数返回值的简述(简洁明了)
  9. 牛客网数据库SQL实战23—— 对所有员工的薪水按照salary进行按照1-N的排名
  10. 模糊综合评价的几种合成算子及matlab应用1