JSP从零开始
一、JSP概述
1、Servlet的优点和缺点
Servlet几乎可以完成服务器编程的所有任务,而且对于Java程序员来说,也容易上手,编写代码时与编写桌面应用程序的差别不大。但是,Servlet的这一切操作都是与业务逻辑有关的,而对于呈现给用户的交互界面。Servlet并不擅长。
总结来说,Servlet的有点主要体现在数据操作等方面:
- 读取表单数据
- 读取HTTP请求报头
- 读取HTTP状态代码和响应报头
- 进行会话跟踪
- 对数据库进行操作
Servlet的缺点主要体现在数据呈现方面:
- 需要使用大量的print语句生成网页,还要小心处理转义字符
- 专门的网页制作不适合于Java Web项目
- 需要程序员既熟悉Java又熟悉网页设计
2、JSP的诞生和优点
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是一种动态网页技术标准。JSP技术类似与ASP技术(在HTML的代码中嵌入VB Script脚本语言),它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,其优点如下:
- 不再需要使用print语句生成网页,直接使用HTML
- 一次编写,到处运行。除了系统之外,代码不用做任何更改
- 多样化和功能强大的开发工具支持,提高了开发效率
- 将开发人员和分为JAV程序员和网页设计师,各司其职,在各自擅长的领域内工作
二、JSP的工作原理
1、设计思想
JSP可以看做是在HTML标记中嵌入了Java代码(通过脚本语言来实现),不同于Servlet,Servlet是在Java代码中嵌入了HTML标记(通过print语句实现),两者看起来好像都是Java语言和HTML混合的形式,但是效果完全不同。按照JSP的这种方式混合,在一定程度上实现了业务逻辑与数据呈现的分离。
虽然JSP文件的后缀是.jsp,但是JSP页面在修改后第一次访问的时候,将由Web容器将其转换成一个符合Servlet规范的后缀为.java的文件,然后再编译成字节码文件,最后执行字节码文件。
2、生命周期
JSP生命周期包括以下阶段:
- 编译阶段:包括解析JSP文件、将JSP文件转为servlet、编译servlet三部分
解析JSP文件—-Servlet容器解析JSP文件代码,如果有语法错误,就会向客户端返回错误信息
将JSP文件转为servlet—-Servelet容器把JSP文件翻译成Servelet源文件
编译servlet—-Servelet容器编译Servelet源文件,生成servelet - 初始化阶段:加载与JSP对应的Servelet类,创建其实例,并调用它的初始化方法
- 运行时阶段:调用与JSP对应的Servelet实例的服务方法
- 销毁阶段:调用与JSP对应的Servelet实例的销毁方法,然后销毁Servelet实例
JSP仅在第一次被访问时(或者修改后第一次访问时),才会转换成Servlet并被编译成字节码文件,以后再访问时,就无须转换了。这就是为什么在使用JSP时,有人感觉JSP在第一次运行时比较慢,但在之后再次请求时,速度就快多了的原因。因为第一次有个转换的过程,而之后就和一般的Servlet一样了。
三、JSP编程
先看一个打印当前系统时间的例子,新建web项目,在.jsp文件中编程如下:
<%@ page language="java" import="java.util.Date"
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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>
现在时间是:
<%=new Date().toString()%></h1>
</body>
</html>
在上面代码中使用了page指令的import属性,导入了Date类,同时使用了contentType属性。代码运行结果如下:
1、JSP页面组成
我们把JSP页面分为两个部分:静态部分和动态部分。
静态部分称为模板文本,这部分是JSP容器不处理的,基本上会原封不动地由服务器端传递到客户端,一般由HTML组成。
动态部分与调用Java代码有关,根据调用方式的不同,主要有指令标记、声明标记、脚本标记、表达式标记、动作标记、注释标记等。在学习过程中,先重点掌握指令标记、动作标记、注释标记即可。
2、静态部分(模板文本)
1) JSP指令标记
主要用来设定JSP页面的整体配置信息,以便于在转换期间将JSP页面顺利转换成Servlet。语法如下,
<% @JSP 标准指令 属性1 属性2 ... 属性n %>
JSP指令标记为page、include、taglib三种。
a. page指令
page指令描述了和页面相关的信息。在一个JSP页面中,page指令可以出现多次,但是在每个page指令中,每一种属性却只能出现一次,重复的属性设置将覆盖掉先前的设置。
page指令的基本语法格式如下:
<%@page page_directive_attr_list %>
b. include指令
include指令的作用是包含另一个文件,这种包含就是在页面编译期间引入一个文件,其语法相当简单:
<%@include file="……"%>
c. taglib指令
JSP页面除了可以使用标准动作标记等,同时支持用户自己扩展标记库,这时候就需要用到taglib指令,语法为:
<%@ taglib uri=" " prefix=" " %>
2) JSP动作标记
JSP动作标记设计的初衷是减少页面的Java脚本的使用,将原来页面的一系列操作封装成标记,从而在需要类似操作时,只写标记即可,这样增强了代码的可维护性和重用性。
JSP动作标记详解
3) JSP注释标记
在代码中添加注释,可以增强代码的可读性和程序的可维护性,所以应该适当添加注释标记。
a. HTML中的注释
<! --HTML中的注释-- >
b. Java中的注释
<%
//Java中的单行注释
/*Java中的多行注释*/
%>
c. JSP的注释
<% --Jsp的注释-- >
容器在将JSP转换成Servlet时,会忽略<%–和–%>之间的内容。