2019-05-14
基本知识
什么是JSP
JSP是Java Server Pages的缩写,是符合JavaEE标准的表现层技术。
JSP的页面构成
- 静态模板代码:HTML+CSS+JS,发送至客户端浏览器执行
- Java代码嵌入:JSP声明脚本、JSP代码脚本、JSP表达式。在服务器端执行,执行结果发送至客户端浏览器
- EL表达式、JSP指令标签、JSP动作标签、JSTL、第三方标签库、自定义标签等。在服务器端执行,执行结果发送至客户端浏览器
JSP的工作原理
JSP是由安装在Web服务器上的JSP引擎(JSP/Servlet容器)编译执行的。JSP页面的访问者无须安装Java运行环境,因为服务器输送到客户端的是JSP的执行结果,是标准的HTML页面。
JSP本质是一种特殊的Java类,即Servlet。每个JSP页面都是一个Servlet实例。JSP页面首先由服务器的JSP引擎自动翻译成 Servlet类,然后自动实例化执行,将生成的HTML响应文本发送到客户端浏览器。
Servlet类内部通过_jspService方法处理用户请求。翻译过程中JSP最主要的代码都是在此方法中。
如果该JSP页面是第一次被请求,那么会经历翻译-编译-执行完整阶段,如果不是第一次被请示,则不会再执行翻译/编译过程。这是为什么第二次执行JSP页面时明显比第一次执行要快的原因。如果修改了JSP页面,那么服务器将发现到该修改,并重新进行翻译和编译。这是为什么修改页面后访问速度变慢的原因。
JSP基本语法
JSP声明脚本
<%! 声明语句 %>
<%! int a = 1; %>
<%
out.println("a = " + a);
a++;
%>
使用声明语句声明的变量是非线程安全的,如果有多个用户执行此JSP页面,将共享该变量。
JSP页面编译成的Servlet类在容器中只有一个实例,在JSP中声明的变量是该实例的成员变量。成员变量在创建Servlet实例时初始化,其值将一直保存,直到实例销毁。
JSP代码脚本
<% Java代码 %>
<table width="500" height="300" align="center" border="1">
<%
for (int i = 0; i < 5; i++) {
%>
<tr>
<%
for (int j = 0; j < 8; j++) {
%>
<td></td>
<%
}
%>
</tr>
<%
}
%>
</table>
JSP表达式
<%
String str="Hello";
out.print(str);
%>
<!-- ----------两段代码效果相同-------------- -->
<%
String str="Hello";
%>
<%=str%>
JSP注释
注释分为两类:
HTML注释:使用作为结束。可以在客户端显示。
JSP注释:使用<%--作为开始,以--%>作为结束。不能在客户端显示。建议使用JSP注释,减少网络传输负担。
JSP指令标签
JSP指令标签在编译阶段起作用(亦称编译指令),用于通知服务器如何处理当前页面。
<%@ 指令名称 属性名="属性值",属性名="属性值", ...%>
常用指令标签:
- page指令:页面设置
- include指令:页面包含
- taglib指令:引入标签库
1.page指令标签
page指令标签用来设置当前页面的全局属性(共13个)。
属性名 | 说明 |
---|---|
language | 声明所使用的脚本语言种类,目前只有java类型。 |
contentType | 指定该JSP文件的MIME格式,以及网页编码格式,即JSP页最终在 Browser(客户端)所见到的网页内容的编码。该属性值会自动在Servlet代码中生成response.setContentType方法调用。 |
pageEncoding | JSP文件本身的编码格式。如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认编码。 |
import | 用来导入Java包,和Java中的import语句作用类似。若导入多个包,可用逗号分隔。 使用格式:<%@ page import="导入的包名" %> 例如:import="java.util." |
errorPage | 用来设置当前JSP文件发生异常错误时,网页重新跳转到能够处理异常的JSP页面。语法格式如下: <%@ page errorPage="错误处理页面"%> |
isErrorPage | 指定该JSP文件是否为处理异常的文件,默认值为false。该页面的Servlet会自动接受其他页面传递过来的exception对象。语法格式如下: <%@ page isErrorPage="true | false"%> 可以通过设置web.xml取代此种方式 <error-page> <error-code>错误代码</error-code> <location>/目标页面</location> </error-page> |
extends | 指定该JSP页面生成的Servlet继承于哪个父类。设定时必须指定该类的全名,即包名加类名。 |
session | 指定该JSP页面中是否有session对象。值为true或false,默认为true。 |
buffer | 指定输出流out是否具有缓冲区,默认有8KB缓冲。 |
autoFlush | 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时为正常输出,如果设置为false,则会在buffer溢出时产生一个异常。 |
isThreadSafe | 指定该JSP文件是否支持多线程使用。默认为true。设置为false则是线程安全的。 |
info | 设置该JSP文件的相关信息,可以是任何字符串,可通过Servlet.getServletInfo方法取得该信息。 |
isELIgnored | 指定该JSP文件是否忽略EL表达式。设置为false,则EL表达式不会被忽略,将会被执行。 |
<%@ page 属性1="属性值1" 属性2="属性值2" ... %>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
2.include指令标签
include指令标签可以将一个外部文件嵌入到当前JSP文件中,融合成一个页面。同时解析这个页面中的JSP代码。
include既可以包含静态文本,也可以包含动态的JSP页面。出现在一个JSP页面中的include指令标签的数量不受限制。
<%@ include file="被包含文件地址"%>
JSP动作标签
JSP动作标签(JSP Action)本质是一组JSP内置的标签,是对常用JSP功能的抽象与封装。
<jsp:XXX />
<jsp:XXX > </jsp:XXX>
include标签
用来动态包含文件。
<jsp:include page="包含文件URL地址" flush="true | false" />
page属性用来指定被包含文件的URL地址。flush属性用来指定缓冲区满时,是否进行清空。默认值为false。
include动作标签与include指令标签的区别:
<%@ include%>指令标签:静态包含。是将所有的被包含文件嵌入后,然后再进行编译处理。==因此多个jsp文件将形成一个Servlet,并且包含与被包含文件属于同一个request。==
<jsp:include>动作标签:动态包含。是将包含与被包含的文件分开编译,在运行时再动态加入。==每个jsp文件将形成单独的Servlet,并且包含与被包含文件属于不同的request。==
forward标签
forward标签用来转发用户的请求,使得用户请求一个页面跳转到另一个页面。这种跳转为服务器端转发,==用户的地址栏不会发生任何变化。==
<jsp:forward page="跳转目标地址" />
param标签
param标签以"键/值"对的形式传递参数数据。
<jsp:param name="参数名" value="参数值"/>
说明:
<jsp:param>
标签包含两个属性,name用来设定传递参数的名称;value用来设定传递参数的值。
<jsp:param>
本身不能单独使用。在<jsp:include>
、<jsp:forward>
中作为子标签使用。
<jsp:include page="目标页面">
<jsp:param name="参数名" value="参数值" />
</jsp:include>
<jsp:forward page ="目标页面">
<jsp:param name="参数名" value="参数值" />
</jsp:forward>
网友评论