目录
- JSP概述
- 作用
- 一个简单的案例:使用JSP页面输出当前日期
- JSP处理过程
- JSP 生命周期
- 编译阶段
- 初始化阶段
- 执行阶段
- 销毁阶段
- 案例
- JSP页面的元素
- JSP指令
- JSP中的page指令
- Include指令
- 示例
- taglib指令
- JSP中的小脚本与表达式
- JSP中的声明
- JSP中的注释
- HTML的注释
- JSP注释
- JSP行为
JSP概述
- JSP(全称Java Server Pages)是一种动态网页开发技术。是由 Sun公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
- JSP 技术是以 Java 语言作为脚本语言的,使用HTML嵌套Java代码实现,运行在服务器端的Java页面。
- JSP文件后缀名为 *.jsp 。
- JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows上。
作用
- 替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)
- 就是显示网页的,和HTML有什么区别?就是我们的jsp页面可以嵌套java代码
- 可以和Servlet完美的契合
一个简单的案例:使用JSP页面输出当前日期
<%@ page language="java" import="java.util.*,java.text.*"
contentType= "text/html; charset=utf-8" %>
<html>
<head>
<title>输出当前日期</title>
</head>
<body>
你好,今天是
<% SimpleDateFormat formater =new SimpleDateFormat("yyyy年 MM月dd日");
String strCurrentTime = formater.format(new Date()); %>
<%=strCurrentTime %>
</body>
</html>
JSP处理过程
第一次请求之后,Web容器可以重用已经编译好的字节码文件
如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译
以下步骤表明了Web服务器是如何使用JSP来创建网页的:
- 就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。
- Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
- JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
- JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
- Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
- Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
- 最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。
一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改日期早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。这使得整个流程与其他脚本语言(比如PHP)相比要高效快捷一些。
总的来说,JSP网页就是用另一种方式来编写servlet而不用成为Java编程高手。除了解释阶段外,JSP网页几乎可以被当成一个普通的servlet来对待。
JSP 生命周期
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
以下是JSP生命周期中所走过的几个阶段:
编译阶段
servlet容器编译jsp源文件,生成servlet类
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:
- 解析JSP文件。
- 将JSP文件转为servlet。
- 编译servlet。
初始化阶段
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:
public void jspInit(){
// 初始化代码
}
以般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。
执行阶段
调用与JSP对应的servlet实例的服务方法
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。
_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:
void _jspService(HttpServletRequest request,HttpServletResponse response)
{
// 服务端处理代码
}
_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。
销毁阶段
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
jspDestroy()方法的格式如下:
public void jspDestroy()
{
// 清理代码
}
案例
创建一个index.jsp 将下面的 代码 复制到 jsp页面中 然后运行Tomcat
访问http://localhost:9090/kgcSmbms/index.jsp 看看 控制台打印效果 已经页面显示的内容
关闭tomcat
JSP页面的元素
JSP指令
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。
JSP指令语法格式:<%@ directive attribute="value" %>
指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开。
JSP中的三种指令标签:
指令 | 描述 |
---|---|
<%@ page … %> | 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义 |
JSP中的page指令
作用:通过设置内部的多个属性定义整个页面的属性
属性 | 描述 |
---|---|
buffer | 指定out对象使用缓冲区的大小 |
autoFlush | 控制out对象的 缓存区 |
contentType | 指定当前JSP页面的MIME类型和字符编码 |
errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
extends | 指定servlet从哪一个类继承 |
import | 导入要使用的Java类 |
info | 定义JSP页面的描述信息 |
isThreadSafe | 指定对JSP页面的访问是否为线程安全 |
language | 定义JSP页面所用的脚本语言,默认是Java |
session | 指定JSP页面是否使用session |
isELIgnored | 指定是否执行EL表达式 (默认true) |
isScriptingEnabled | 确定脚本元素能否被使用 |
pageEncoding | 当前页面的编码格式 |
Include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。最后会被整合 成一个 Servlet .class
注意: 使用 include 指令是以静态方式包含文件 简单来说就是合二为一 ,原封不动地附加到当前文件中 所以要避免重复的代码 和变量 等逻辑。
例如:里面不要包含 … 这样的标签,因为是把源代码原封不动的附加过来,所以会与当前的jsp中的这样的标签重复导致出错。
但是也是有好处的 就是 js 和jsp … 变量方法等共享 你可以在 Include指令 后面修改包含页面内 变量的内容 从而改变包含页面的状态
为了避嫌 html 和jsp 中文乱码的情况 在项目的web.xml中添加
<jsp-config>
<jsp-property-group>
<url-pattern>*.html</url-pattern>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
语法:<%@ include file=“url” %>
示例
<%@ page language="java" contentType="text/html; charset=UTF-8" isELIgnored="true" pageEncoding="UTF-8" %>
<html>
<head>
<title>index</title>
</head>
<body>
<%@ include file="index1.html" %>
<%@ include file="index1.jsp" %>
<h1>index.jsp</h1>
</body>
</html>
taglib指令
在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”
Taglib指令的语法:<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性确定标签库的位置,prefix属性指定标签库的前缀。
比如引入JSTL标签库<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
JSP中的小脚本与表达式
在JSP页面中计算两个数的和,将结果输出显示
<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8" %>
<html>
<head><title>计算求和</title></head>
<body>
两个数的求和结果为:
<%
int numA = 4, numB = 5 ;
int result = numA+numB;
%>
<%=result %>
</body>
</html>
JSP中的声明
作用:JSP页面中定义方法
语法:<%! Java代码%>
<%@ page language="java" import="java.util.*,java.text.*"
contentType="text/html; charset=utf-8"%>
<html>
<%!
String formatDate(Date d){
SimpleDateFormat formater =
new SimpleDateFormat("yyyy年MM月dd日");
return formater.format(d); }
%>你好,今天是
<%=formatDate(new Date()) %>
</body>
</html>
JSP中的注释
HTML的注释
F12查看页面源码可见
<!-- html注释-->
JSP注释
F12查看页面源码不可见
<%-- JSP注释--%>
<% //单行注释 %>
<% /*多行注释 */ %>
JSP行为
JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。
行为标签只有一种语法格式,它严格遵守XML标准:<jsp:action_name attribute="value" />
行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:
语法 | 描述 |
---|---|
jsp:include | 用于在当前页面中包含静态或动态资源 |
jsp:useBean | 寻找和初始化一个JavaBean组件 |
jsp:setProperty | 设置 JavaBean组件的值 配合 jsp:useBean使用 |
jsp:getProperty | 输出某个JavaBean的属性。 配合 jsp:useBean 使用 |
jsp:forward | 把请求转到一个新的页面 (转发) |