第3.65课 上课 JSP深入介绍, 什么是JSP, JSP与Servlet的关…
3_65

JSP深入介绍
什么是JSP
1)JSP全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
2)JSP最大的特点在于,可以在html当中嵌入Java代码,为用户提供动态数据。
3)JSP是Servlet的简化设计,逻辑与界面设计分开,开发更方便。
JSP与Servlet的关系
1)JSP和Servlet,都可以用于开发动态web资源。但由于这2门技术各自的特点,开发人员经常用servlet作为web应用中的控制器组件或者说是接入层来使用,而把JSP技术作为数据显示模板来使用。
2)Servlet只负责响应请求并处理请求产生数据,数据的显示由JSP负责。
3)JSP与Servlet的不同之处:
a)Jsp文件后缀名--->.jsp,而Servlet文件的后续名 ---> .java
b)配置文件中不需要对jsp进行描述,当然也可以进行描述;
c)Jsp文件的组成--->html+jsp脚本元素;
JSP的运行原理
1)每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
2)由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
3)JSP的声明周期:

jsp的声明周期方法:
_jspInit(): 同servlet的init(),执行(调用)一次,构造器执行之后执行。
_jspService(): 同servlet的service(),执行多次,每次请求执行。
_jspDestroy(): 同servlet的destroy(),执行一次,对象被销毁之前执行。
JSP语法
声明
1)JSP页面中编写的所有代码,默认会翻译到servlet的_jspService()方法中, 而Jsp声明中的java代码被翻译到_jspService()方法的外面,即实例变量。语法:
<%!
java代码
%>
所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。
2)多个静态代码块、变量和方法可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
脚本
1)JSP脚本用于在JSP页面中编写多行Java代码。语法:
<%
多行java代码
%>
注意:
a)JSP脚本中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService()方法中。
b)JSP脚本中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。
2)在一个JSP页面中可以有多个脚本,在两个或多个脚本之间可以嵌入文本、HTML标记和其他JSP元素。举例:
<%
int x = 10;
out.println(x);
%>
<p>这是JSP页面文本</p>
<%
int y = 20;
out.println(y+””+x);
%>
3)多个脚本中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。
4)单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句。例如:
<%
for (int i=1; i<5; i++)
{
%>
<H1>hello</H1>
<%
}
%>
表达式
1)JSP表达式用于将程序数据输出到客户端。
语法:<%= 变量或表达式 %>
举例:当前时间:<%= new java.util.Date() %>
2)JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.write(…) 将数据输给客户端。
3)JSP脚本表达式中的变量或表达式后面不能有分号(;)。
注解
1)JSP的注释的格式: <%-- --%>
2)JSP引擎在将JSP页面翻译成Servlet程序时,会忽略JSP页面中被注释的内容。
3个静态指令的用法
page
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
说明:
page指令用于通知jsp引擎一些jsp的信息。
page指令必须出现在jsp页面的第一行。
Page指令的属性:
1)language="java":页面支持的语言。
2)contentType="text/html; charset=UTF-8":页面的格式和字符编码。
3)pageEncoding="UTF-8":页面的字符编码,建议和charset一致。
4)import="": 导包,唯一可以出现多次的属性。
5)isELIgnored="false":是否忽略EL表达式。
6)errorPage="error.jsp":当前jsp发生异常的时候跳转的页面。
7)isErrorPage="false":当前jsp是否一个异常处理页面。如果为true,可以访问exception内置对象。
include
index.jsp
<%@ include file="top.jsp" %>
说明:
包含指令又称为静态包含,会将被包含页面top.jsp的代码复制到当前页面进行编译、执行。
注意:
1)包含页面和被包含页面不能出现同名变量。
2)通常,静态包含常用来包含html或者logo等没有java代码的静态页面。
taglib
用于引入标签库,其语法规则:
<%@ taglib prefix="标签库的短名" uri="标签库的URL"%>
例如:
使用标签库的时候,需要导入jstl-2.1.jar 包
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
浙公网安备 33010602011771号