《Java Web程序设计任务教程》简要复盘:第六章 JSP技术


作者:氯磷Rolin

目录:

第六章 JSP技术

在动态网页的开发中,经常需要动态生成HTML内容,如果使用Servlet来实现HTML页面的更新,需要调用大量的输出语句,使静态和动态内容混合在一起,导致程序非常臃肿。
为了克服这些缺点,Oracle(SUN)公司推出了JSP技术。

什么是JSP

  • JSP全名Java Server Pages,它用于简捷而快速的生成Web界面
  • 因为Servlet展示信息不方便,所以引入了JSP技术
  • JSP本质上是一个Servlet!!
  • JSP就是在HTML页面的基础上嵌入了Java代码
  • JSP也拥有java的众多特征,例如:跨平台性,业务代码相分离,组件重用,预编译等

JSP的运行原理

  • 原理图
    在这里插入图片描述
  • JSP的具体运行过程
  1. 客户端发出请求给JSP容器(Tomcat),请求访问JSP文件
  2. JSP容器将JSP文件转换成一个Java Servlet源文件,如果出错则会输出错误信息
  3. JSP容器再将Java Servlet源文件编译成相应的*.class字节码文件
  4. 由Tomcat加载*.class文件,创建一个Servlet实例,并且调用jspInit()方法进行初始化
  5. 执行jspService()方法处理客户端的请求。和Servlet一样,多个客户端同时请求该JSP文件则JSP容器也会创建多个线程来处理它们。
  6. 如果JSP文件被修改了,则根据设置服务器将决定是否对该文件进行重新编译。
  7. 由于第一次调用时需要转换和编译,往往会产生一些延迟或卡顿
  8. 当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息发送回客户端
  9. 由于系统资源不足或其他原因,JSP容器可能会以某种不确定的方式将编译好的Servlet移出内存,此时Servlet会先调用jspDestroy()方法,然后该实例会被加入垃圾回收系统处理

虽然JSP类不实现Servlet接口,但是继承自HttpJspBase类
由于HttpJspBase类是HttpServlet的一个子类,由此JSP编译生成的java类实质上就是一个Servlet

JSP的基本语法

JSP文件中可以嵌套很多内容,例如JSP的脚本元素和注释等,这些内容的编写需要遵循一定的语法规范

  • JSP脚本元素

JSP脚本元素是指嵌套在<%%>之间的Java程序代码。通过JSP脚本元素可以将Java代码嵌入到HTML页面中,所有可执行的Java代码都可以通过JSP脚本来执行

  • JSP脚本元素主要包括如下三种类型:
    1. JSP Scriptlets
    2. JSP 声明语句
    3. JSP 表达式
  • JSP脚本元素语法:
标签 语法 用途
程序代码标签(JSP Scriptlets) <% 此处输入Java程序代码 %> 编写Java程序代码,但不可以定义代码,此时在编译后这段代码是放在jspService()里
JSP声明语句 <%! 变量或方法的声明 %> 声明JSP内所使用的成员方法、成员变量、静态方法、静态变量、静态代码块等 在其声明的方法在整个JSP页面都有效,此时在编译后这段代码是放在jspService()外
JSP表达式 <%=变量%> 用于将程序数据输出到客户端,即将java中的变量或者表达式的值输出到页面
JSP注释 <%-- 注释信息 --%> Tomcat在编译JSP页面时会自动忽略JSP注释内容,不会将注释信息发送到客户端。而在JSP页面编写的HTML注释会被发送到客户端

JSP指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

为了设置JSP页面的一些信息,Sun公司提供了JSP指令。JSP2.0中定义了page、include等指令,每种指令都定义了各自的属性。

page指令

page指令称为页面指令,用来定义JSP页面的全局属性,该配置会作用域整个页面。
page指令的属性可以定义MIME类型、定义需要导入的包、错误页的指定等。

  • page指令的语法格式如下:
    <%@page 属性1=“属性值1” 属性2=“属性值2”%>
  • page指令的常用属性:
属性名称 取值范围 描述
language java 指明解释该JSP文件时采用的语言,默认为Java
import 任何包名和类名 指明在JSP页面翻译成Servlet时导入的包或类。是唯一一个可以多次引用的指令属性
session true\false 指明该JSP内是否内置Session对象,默认为true
isErrorPage true\false 指定该页面是否为错误处理页面,如果为true,则说明内置Exception对象的exception,可以直接使用
errorPage 某个JSP页面的相对路径 指定一个错误页面,如果该JSP抛出一个未被捕捉的异常,则转到该属性指定的页面
contentType 有效的文档类型 客户端浏览器根据该属性判断文档类型
pageEnCoding 当前页面 指定页面编码格式
  • page指令的其他属性:
属性名称 描述
extends 指定JSP页面产生的Servlet继承的父类
buffer 指定缓冲区的大小,默认是8KB。如果为none,则表示不设置缓冲区。(此属性要和autoFlush一起使用
autoFlush 指定输出缓冲区即将溢出时,是否强制输出缓冲区的内容。可以设置为true或false(默认为true)
isThreadSafe 指定JSP是否支持多线程。可以设置为true或false,若为true,则表示该页面可以处理多个用户的请求;如果为false,则此JSP一次只能处理一个页面的用户请求。
info 设置JSP页面的相关信息。可以使用servlet.getServletInfo()方法获取到JSP页面中的文本信息
isELIgnored 指定JSP文件是否支持EL表达式

除了import属性外,其他的属性都只能出现一次,否则会编译失败。
page指令的属性名称都是区分大小写的

include指令

include指令是文件加载指令,用于在JSP中插入一个包含文件或代码的文件,这个包含的过程是静态包含。

它把文件插入后与原来的JSP文件合并成一个新的JSP页面(注意:如果被插入的内容发送改变,则包含这个页面的JSP文件就需要重新编译)。

  • 具体语法:
<%@ include file="head.html"%>
  • 属性
    include指令只有一个file属性,该属性用来指定插入到JSP页面目标位置的文件资源。
    插入文件的路径一般不以/开头,而是使用相对路径
  • 示例:在一个网站所有链接都插入同一个导航栏

在一个空白的HTML页面中直接使用include指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试页面</title>
    <link href="${pageContext.request.contextPath}/css/usercenter.css" type="text/css" rel="stylesheet"/>
    <link rel="icon" type="image/ico" sizes="128x128" href="img/n9.ico"/>
</head>
<body>
    <%@include file="/part/top.jsp"%>

</body>
</html>

其中top是顶部栏,具体代码如下:


                
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值