JSP基础语法-指令(directive)
JSP基础语法
3.5、指令(directive)
语法:<%@指令名 属性名=属性值 属性名=属性值….. %>
作用:为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
\* page指令在同一个jsp页面当中可以编写多个,大部分情况下都是出现在jsp页面的顶部。【这不是必须的】
3.5.1、page指令 <%@page %>
\* import属性(翻译生成java语言中的import语句)
<%@page import=”java.util.Date,java.util.ArrayList”%>
\* contentType属性:设置响应的内容类型以及字符编码方式
例1:【其实这个属性主要是用来设置响应的内容类型,捎带着可以设置字符编码方式】
<%@page contentType="text/html; charset=UTF-8" %>
被翻译为:
response.setContentType("text/html;charset=UTF-8");
例2:指定JSP页面响应内容类型
<%@page contentType="text/html"%>
\* pageEncoding属性:专门用来设置响应时采用的响应的字符编码方式。
<%@page pageEncoding="UTF-8"%>
\* session属性(指定当前JSP页面是否可以使用session这个内置对象)
<%@page session="false"%> session内置对象不可用:表示访问当前jsp页面的时候,不获取session,也就意味着在当前jsp页面当中不能使用九大内置对象之一:session。
<%@page session="true"%> session内置对象可用(缺省的):表示访问当前jsp页面的时候,获取session,如果获取不到session对象会新建session对象,保证内置对象session可以使用
\* errorPage属性:设置指定当前JSP页面发生错误之后跳转的资源路径。
\* isErrorPage属性:设置当前JSP页面当中可以使用内置对象exception
isErrorPage="true":表示exception内置对象可以使用
isErrorPage="false":表示exception内置对象不可以使用
默认值:isErrorPage="false"
内置对象exception表示刚刚发生的异常,捕获到该异常之后,该异常对象的内存地址赋值给了exception引用。
exception这个内置对象引用直接指向了JVM堆内存中的异常对象。
\* isELIgnored属性指定当前页面中如果有EL表达式是否忽略,true表示忽略,false表示不忽略
1.jsp代码:
<%@page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>page指令-01页</title>
</head>
<body>
<%-- errorPage属性用来设置当前jsp出现异常之后跳转的页面 --%>
<%@page errorPage="/2.jsp" contentType="text/html; charset=UTF-8"%>
<%
System.out.println("执行 page指令-01页 代码!!!");
String s = null;
s.toString();
%>
<%-- 表达式代码被翻译到service方法内部,service方法上有两个参数request和response,可以直接拿来使用 --%>
<%="request=" + request%>
<%--
JSP中有九大内置对象,可以在JSP中直接拿来使用:
pageContext
request
session
application
response
out
exception
config
page
--%>
<%-- 在service方法之外不能使用九大内置对象 --%>
<%--
<%!
public void m1(){
String username = request.getParameter("name");
}
%>
--%>
</body>
</html>
2.jsp异常页代码:
<%--
<%@page contentType="text/html; charset=UTF-8" %>
--%>
<%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8" %>
<html>
<head>
<title>page指令-02错误页</title>
</head>
<body>
<%--
<%@page import="java.util.Date" %>
<%@page import="java.text.SimpleDateFormat" %>
--%>
<%--
<%@page import="java.util.*,java.text.*" %>
--%>
<%@page import="java.util.Date,java.text.SimpleDateFormat" %>
<%-- 输出系统当前时间 --%>
<%
System.out.println("执行 page指令-02错误页 代码!!!");
Date nowTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String strTime = sdf.format(nowTime);
%>
系统当前时间:<%=strTime %>
<br>====================================================<br>
<%--
<%@page session="false" %>
--%>
<%@page session="true" %>
session:<%=session %>
<br>====================================================<br>
<%-- isErrorPage属性用来设置当前jsp页面当中是否可以使用内置对象exception --%>
<%@page isErrorPage="true" %>
亲,出错了哦!联系管理员吧!
<%
//打印异常追踪信息,将异常信息输出到控制台
//exception是九大内置对象之一
exception.printStackTrace();
%>
<%--isErrorPage=true后,请求转发进这个页面会报HTTP 500
原因在于Eclipse使用的默认浏览器是IE,IE会默认输出“友好的”错误信息(即你上面所显示的页面)。
这种情况只需进入IE浏览器,点击“设置”--Internet选项--“高级”里面,然后 取消勾选 ”显示友好的HTTP错误信息”选项。
--%>>
</body>
</html>
————————————————
3.5.2、include指令 <%@include %>
<%@include file="filePath"%>
include指令表示静态包含,例如在a.jsp中编写了<%@include file="b.jsp"%>,就表示将a.jsp翻译之后的java源程序和b.jsp翻译生成的java源程序合并在一起,然后将其编译生成一个.class文件。我们通常采用这种方式做到页面的重复使用,例如web站点中每一个页面都有相同的头和相同的尾,我们可以单独将头和尾定义成单独的jsp文件,在我们使用的时候直接使用include引入即可,这样可以大大减少重复代码。但是需要引起注意的是,两个java源程序合并成一个java源程序,必须保证这两个java源程序中没有相同变量的定义。因为在同一个域中变量名是不能重名的。
\* include指令的语法格式:
<%@include file="/2.jsp"%> 路径:和url-pattern是相同的
\* include指令的作用:
假设这10个jsp文件当中都有一块相同的部分,在每一个jsp文件当中都去编写这块相同的代码,将来在修改的时候,维护的时候需要修改10个位置,维护成本高。
可以将这块相同的部分单独的抽取出来,放到一个独立的jsp文件当中,在某个需要这段代码的jsp文件当中使用include指令进行包含,将来修改的时候只需要修改这个独立的jsp文件即可,维护成本降低。
代码得到了复用。
\* include指令的执行原理:
1.jsp使用include指令包含2.jsp之后,在jsp文件翻译生成java源代码阶段将2.jsp包含进来,两个jsp最终翻译生成一个java源文件,最终编译生成一个class字节码文件。这种包含可以称为静态包含或者叫做静态联编。【编译期包含】
注意:1.jsp包含2.jsp的时候使用静态包含的话,它们是共享同一个service方法的。可见静态联编可以让两个jsp文件共享同一个局部变量。但是需要注意的是,使用静态联编的时候两个jsp文件当中定义的局部变量的名称不能重名。
\* 什么时候选择静态包含?
负责包含的jsp页面和被包含的jsp页面当中有重名的局部变量不能使用静态包含。
1.jsp代码:
<%@page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>include指令</title>
</head>
<body>
<%--
<%=i %>
--%>
<table border="1px" align="center" width="50%">
<tr>
<th>序号</th>
<th>代号</th>
<th>部队</th>
</tr>
<%@include file="/2.jsp" %>
</table>
<%=i %>
</body>
</html>
<%--
注意:1.jsp包含2.jsp的时候使用静态包含的话,它们是共享同一个service方法的。可见静态联编可以让两个jsp文件共享同一个局部变量。但是需要注意的是,使用静态联编的时候两个jsp文件当中定义的局部变量的名称不能重名。
String username = "lili";
--%>
2.jsp被包含代码:
<%@page contentType="text/html; charset=UTF-8"%>
<%!
private String name = "admin";
%>
<%
int i = 10;
String username = "lili";
%>
<tr align="center">
<td>1</td>
<td>刀锋</td>
<td>八一</td>
</tr>
<tr align="center">
<td>2</td>
<td>智能链接</td>
<td>十一</td>
</tr>
————————————————
3.5.3、taglib指令 <%@taglib %>
为了让JSP看起来更加的专业(只做页面展示),减少jsp页面中java代码的数量,我们引入了标签库,使用了标签库之后JSP程序中不再出现太多的java程序了,这样JSP页面看起来主要工作就是页面展示。大家设想在JSP页面中有大量的java程序暴露,那维护起来是很困难的。
————————————————
还没有评论,来说两句吧...