对应于书本第5章
总结:JSP在服务器端执行。
JSP是什么?
传统的HTML文件中加入java代码段形成JSP(Java Server Pages)文件。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP结构?
JSP可以包含指令标识、动作标识、html代码、JavaScript代码、Java代码等等。
指令标识
作用:设定整个JSP的信息
语法:
<%@ 指令名 属性1=”值1” 属性2=”值2”…….%>
JSP中指令有:page、include、taglib三个
多个属性可以一起写,也可以分开写
page指令:
属性有:language、extends、import、pageEncoding、contentType、session、buffer、autoFlush、isErrorPage、errorPage等。
例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ page import="java.text.SimpleDateFormat"%>
session属性:该JSP页面是否使用session,true表示用,false表示不用。
session是JSP内置对象
<%@ page session="false"%>
buffer属性:设置JSP的out输出对象的缓冲区大小,默认为8KB,一般都是8的倍数如16、32、64等
<%@ page buffer="128kb"%>
autoFlush属性:JSP页面缓存满时是否自动刷新
<%@ page autoFlush="false"%>
isErrorPage属性:是否将当前JSP页面设置为错误处理页面
<%@ page isErrorPage="false"%>
errorPage属性:指定该页面错误时应转到哪个错误处理页面
<%@ page errorPage="error/loginErrorPage.jsp"%>
include指令:
文件包含指令,在某个JSP文件中包含另一个JSP文件,是静态包含。
什么是静态包含?就是相当于代码分开写在两个文件中,包含进来再一起执行。而动态包含里有页面的跳转。
包含和被包含文件不能有相同的变量
要求:html、head、body等标记只写在主文件中,被包含文件中不要写。
语法:
<%@ include file="被包的文件名,可以是完整路径表示"%>
例:
<body style="margin:0px;">
<%@ include file="top.jsp"%>
<table width="781" height="279" border="1" cellpadding="0" cellspacing="0" background="images/center.JPG">
<tr>
<td> </td>
</tr>
</table>
<%@ include file="copyright.jsp"%>
</body>
此代码即是导入了两个被包含文件
taglib指令:
作用:声明该页面中使用的标签库,同时引用标签库,并指定标签的前缀。在页面引用标签库后,就可通过前缀来引用标签库中的标签。
语法:
<%@ taglib prefix="标签的前缀" uri="标签库文件的位置" %>
例如,引用JSTL的核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
脚本标识
有三种:
<%= 表达式 %>
<%! 声明变量或方法的代码 %> // JSP页面中定义全局的变量或方法
<% Java代码或脚本代码 %>
JSP注释
Java或JavaScript部分:// 或/* */
html部分: 一般<!-- -->,隐藏注释<%-- --%>
动作标识
三个:
<jsp:include>
<jsp:forward>
<jsp:param>
(1)
<jsp:include>,包含文件,可以是静态文件也可是动态文件
语法:
<jsp:include page="被包文件" flush="false/true" />
或
<jsp:include page="被包文件" flush="false/true" >
子动作标识<jsp:param>
</jsp:include>
说明:flush:可选属性,用于设置是否刷新缓冲区,默认为false
子动作标识<jsp:param>:用于向被包含的动态页面中传递参数
例
<body style="margin:0px;">
<jsp:include page="top.jsp"/>
<table width="781" height="279" border="1" cellpadding="0" cellspacing="0" background="images/center.JPG">
<tr>
<td> </td>
</tr>
</table>
<jsp:include page="copyright.jsp"/>
</body>
比较:
前面讲的include指令与动作啥区别?
指令的file属性不支持任何表达式,而include动作的page属性支持JSP表达式;
include指令相当于是代码分开写但是一起执行,而动作是分别编译执行;
include指令的两个文件中不能有重名的变量或方法,include动作因为是单独编译的所以主文件和被包文件没有冲突。
(2)
<jsp:forward>
语法:
<jsp:forward page="url"/>
或
<jsp:forward page="url">
子动作标识<jsp:param>
</jsp:forward>
例子:
有两个文件index.jsp 和login.jsp
其中index.jsp如下:
<html>
<head>
<title>中转页</title>
</head>
<body>
<jsp:forward page="login.jsp"/>
</body>
</html>
(3)传递参数标识
语法:
<jsp:param name="参数名" value="参数值"/>
例:通过jsp:param为jsp:forward指定参数
<jsp:forward page="modify.jsp">
<jsp:param name="userId" value="7"/>
</jsp:forward>
最后课后练习,里面有几行代码还要理解
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
</body>
</html>