本节主要介绍了JSP的基本概念。
JSP的组成(html+jsp)。
JSP的创建。
JSP的优点。
JSP的执行过程。
JSP的指令元素,脚本段,注释,动作元素,也就是JSP页面的组成部分。
1.JSP简介
1.1概念
1.JSP:是sun公司发布的,和微软的ASP是类似的技术,不过JSP是更加的广泛。是在html文件中加入了Java程序段的JSP标签。
白话:JSP就是网页中加入了Java代码
1.2JSP组成
1.组成:
JSP由Java程序段+HTML页面组成
Java程序段
-
注释:html注释,JSP注释,JSP+html注释,脚本段注释
-
指令:include,page和taglib
-
脚本段:普通脚本段,表达式,声明脚本段
-
动作元素:就是JSP的标签
Java程序段最好在jsp中少用,优先推荐的就是jsp中本身存在的标签
1.3JSP优点
1.JSP可以充当显示逻辑,原先的Servlet显示页面必须得靠append往输出流中写入html的内容。
2.可重用,可以接哈JavaBean实现复杂的逻辑。
3.采用标签代替脚本段。
1.4JSP执行过程
1.JSP的执行过程
问什么访问JSP页面第一次比第二次慢?就是第一次存在一个将JSP页面翻译成class文件的过程,第二次直接处理请求就可以。
第一次请求时:
客户端发起请求->服务器查找对应的JSP->JSP翻译成Servlet.Java代码->编译成class文件->载入内存->创建实例,处理请求
第二次请求时:
发起请求->直接创建实例,处理请求
1.5如何声明JSP页面
1.案例:创建第一个JSP页面
从下面的创建过程中可以发现,除了头部多了一行,其余的和普通的html文件没有什么不同,就是page指令声明了JSP文件。
<%@ page language="java" 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>第一个jsp页面</title>
</head>
<body>
你好
</body>
</html>
效果图:
2.JSP组成部分详解
从上面可以获悉,JSP的组成包括注释,指令元素,脚本段以及动作元素,下面2.1-2.4将详解我们的JSP组成部分。
2.1注解
1.常见的注解
-
html注解
-
html+jsp注解
-
jsp注解
-
脚本段注解
案例:测试四种注解。
<!-- 我是html注解 -->
<!-- 我是html+jsp<%=new java.util.Date() %> -->
<%--我是jsp注解 --%>
<%
//我是脚本段注解
/*我也是脚本段注解*/
%>
查看html页面的源码图:
-
可以获悉jsp和脚本段的注释没有显示
-
html的注解显示出来,html中的jsp脚本段也显示出来
2.2指令元素
1.什么是指令元素?
-
JSP的指令元素由JSP的引擎去实现,负责如何处理JSP页面,并不会直接产生任何输出。
2.指令元素
-
page:声明jsp页面
-
include:包含静态资源
-
taglib:引入标签库用(后面发相关案例)
2.2.1page指令
1.简介:page负责全局的JSP属性,例如,页面编码,缓冲区大小,是否使用session等等。
2.语法格式:
-
就是<%@ page 属性="属性值"...%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
3.常见的page指令的属性
-
language:JSP的脚本段默认的语言,目前只能是Java,而且必须声明
-
extends:编译形成的Servlet所集成的父类
-
import:导入脚本段中需要的Java包
-
session:执行JSP页面是不是使用session,默认是true
-
contentType:JSP页面响应的结果和编码
-
pageEncoding:页面本身的编码
-
buffer:设置缓冲区大小
-
autoFlush:缓冲区满了是不是自动刷新
-
isThreadSafe:当前的JSP是不是支持多线程访问,默认是true
-
info:指定导入到JSP页面中的文字
-
errorPage:公用的错误页面,需要指定错误页面的url地址
-
isErrorPage:当前页面是不是出现错误的页面,指定为true可以使用exception对象
-
isELIgnored:是不是忽略对表达式的计算${}
4.page指令的注意事项
-
pageEncoding要和contentType的编码一致
-
page指令不能动态包含,但是可以静态包含
2.2.2include指令
1.简介:可以在页面中包含另一个页面,最终翻译成一个Servlet文件。
扩展:静态包含和动态包含的区别。
<%@include file=""%>声明的就是静态包含
jsp:include声明的是动态包含。
静态包含有也就是说,最终翻译出来的Servlet是一个文件。动态包含最终的结果是多个Servlet文件,也就是被包含的部分不会和引用的一起翻译成一个Servlet。
总结:前者把文件包含进去再去编译,最后形成一个文件。后者动态包含,文件单独编译,放入的是结果。
2.静态包含语法
<%@include file="引入文件的未知" %>
3.案例:头部和底部作为被引用的静态页面。
<%--引入头部 --%>
<%@include file="header.jsp" %>
<div style="text-align:center;height:500px">
我是中间区域 <br>
我是中间区域 <br>
我是中间区域 <br>
我是中间区域 <br>
我是中间区域 <br>
</div>
<%--引入底部 --%>
<%@include file="footer.jsp" %>
效果图:
2.3脚本元素
1.常见的有三种脚本元素
<%--第一种脚本元素 --%>
<%
int a=5;
int b=4;
int c=a+b;
%>
<%--第二种脚本元素(可以往页面显示内容) --%>
a=<%=a %>
b<%=b %>
c=<%=c %>
<%--声明式脚本元素 --%>
<%!
int x=0;
%>
<%x++; %>
x<%=x %>
效果图:
再次运行:
-
发现唯独x的值发生变化(下面解释)
2.声明里面的变量和脚本段里面的有什么区别。
创建一个Fun类,方便理解。
public class Fun {
int x;
public int sum(int a,int b) {
return a+b;
}
}
声明里面的x相当于类里面的静态变量。而脚本段里面的相当于形参,每次调用都是不同的对象,以为jsp本身多线程,x是一个对象。
总之:声明中的变量是实例变量,相当于类的属性。脚本段中的相当于临时变量,多线程访问不会变。
2.4动作元素
1.简介:符合xml标记的语法,能够实现请求转发,包含动态文件以及访问JavaBean等的功能的就可以称之为JSP动作元素。
2.语法格式:带标签体的和不带标签体的(也叫空标记)。
3.常见的动作元素
-
jsp:forword:请求转发
-
jsp:include:动态包含
-
jsp:useBean:创建JavaBean对象
-
jsp:setProperty:设置JavaBean对象属性
-
jsp:getProperty:获取JavaBean对象属性
-
jsp:param:设置参数
3.具体的案例:下期继续