阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

JSP指令

98次阅读
没有评论

共计 4211 个字符,预计需要花费 11 分钟才能阅读完成。

1、JSP 指令概述

JSP 指令的格式:<%@指令名 attr1=””attr2=””%>,一般都会把 JSP 指令放到 JSP 文件的最上方,但这不是必须的。

JSP 中有三大指令:page、include、taglib,最为常用,也最为复杂的就是 page 指令了。

2、page 指令

page 指令是最为常用的指定,也是属性最多的属性!

page 指令没有必须属性,都是可选属性。例如 <%@page %>,没有给出任何属性也是可以的!

在 JSP 页面中,任何指令都可以重复出现!

<%@ page language=”java”%>

<%@ page import=”java.util.*”%>

<%@ page pageEncoding=”utf-8”%>

这也是可以的!

2.1、page 指令的 pageEncoding 和 contentType(重点)

pageEncoding 指定当前 JSP 页面的编码!这个编码是给服务器看的,服务器需要知道当前 JSP 使用的编码,不然服务器无法正确把 JSP 编译成 java 文件。所以这个编码只需要与真实的页面编码一致即可!在 MyEclipse 中,在 JSP 文件上点击右键,选择属性就可以看到当前 JSP 页面的编码了。

contentType 属性与 response.setContentType()方法的作用相同!它会完成两项工作,一是设置响应字符流的编码,二是设置 content-type 响应头。例如:<%@ contentType=”text/html;charset=utf-8”%>,它会使“真身”中出现 response.setContentType(“text/html;charset=utf-8”)。

无论是 page 指令的 pageEncoding 还是 contentType,它们的默认值都是 ISO-8859-1,我们知道 ISO-8859- 1 是无法显示中文的,所以 JSP 页面中存在中文的话,一定要设置这两个属性。

其实 pageEncoding 和 contentType 这两个属性的关系很“暧昧”:

l 当设置了 pageEncoding,而没设置 contentType 时:contentType 的默认值为 pageEncoding;

l 当设置了 contentType,而没设置 pageEncoding 时:pageEncoding 的默认值与 contentType;

也就是说,当 pageEncoding和 contentType只出现一个时,那么另一个的值与出现的值相同。如果两个都不出现,那么两个属性的值都是 ISO-8859-1****。所以通过我们至少设置它们两个其中一个!

2.2、page 指令的 import 属性

import 是 page 指令中一个很特别的属性!

import 属性值对应“真身”中的 import 语句。

import 属性值可以使逗号:<%@page import=”java.net.,java.util.,java.sql.*”%>

import 属性是唯一可以重复出现的属性:

<%@page import=”java.util.”import=”java.net.”import=”java.sql.*”%>

但是,我们一般会使用多个 page 指令来导入多个包:

<%@ page import=”java.util.*”%>

<%@ page import=”java.net.*”%>

<%@ page import=”java.text.*”%>

2.3、page 指令的 errorPage 和 isErrorPage

我们知道,在一个 JSP 页面出错后,Tomcat 会响应给用户错误信息(500 页面)!如果你不希望 Tomcat 给用户输出错误信息,那么可以使用 page 指令的 errorPage 来指定错误页!也就是自定义错误页面,例如:<%@page errorPage=”xxx.jsp”%>。这时,在当前 JSP 页面出现错误时,会请求转发到 xxx.jsp 页面。

a.jsp

<%@ page import="java.util.*" pageEncoding="UTF-8"%> <%@ page errorPage="b.jsp" %> <% if(true) throw new Exception("哈哈~"); %>

b.jsp

<%@ page pageEncoding="UTF-8"%> <html> <body> <h1> 出错啦!</h1> </body> </html>

在上面代码中,a.jsp 抛出异常后,会请求转发到 b.jsp。在浏览器的地址栏中还是 a.jsp,因为是请求转发!

而且客户端浏览器收到的响应码为 200,表示请求成功!如果希望客户端得到 500,那么需要指定 b.jsp 为错误页面。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page isErrorPage="true" %> <html> <body> <h1> 出错啦!</h1> <%=exception.getMessage() %> </body> </html>

注意,当 isErrorPage 为 true 时,说明当前 JSP 为错误页面,即专门处理错误的页面。那么这个页面中就可以使用一个内置对象 exception 了。其他页面是不能使用这个内置对象的!

温馨提示:IE会在状态码为 500时,并且响应正文的长度小于等于 512B时不给予显示!而是显示“网站无法显示该页面”字样。这时你只需要添加一些响应内容即可,例如上例中的 b.jsp中我给出一些内容,IE** 就可以正常显示了!

2.3.1、web.xml 中配置错误页面

不只可以通过 JSP 的 page 指令来配置错误页面,还可以在 web.xml 文件中指定错误页面。这种方式其实与 page 指令无关,但想来想去还是在这个位置来讲解比较合适!

web.xml

<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error500.jsp</location> </error-page> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/error.jsp</location> </error-page>

有两种使用方式:

l 子元素;

l 子元素;

其中 是指定响应码;指定转发的页面;是指定抛出的异常类型。

在上例中:

l 当出现 404 时,会跳转到 error404.jsp 页面;

l 当出现 RuntimeException 异常时,会跳转到 error.jsp 页面;

l 当出现非 RuntimeException 的异常时,会跳转到 error500.jsp 页面。

这种方式会在控制台看到异常信息!而使用 page 指令时不会在控制台打印异常信息。

2.4、page 指令的 autFlush 和 buffer

buffer 表示当前 JSP 的输出流(out 隐藏对象)的缓冲区大小,默认为 ****8kb

authFlush 表示在 out 对象的缓冲区满时如果处理!当 authFlush 为 true 时,表示缓冲区满时把缓冲区数据输出到客户端;当 authFlush 为 false 时,表示缓冲区满时,抛出异常。authFlush**** 的默认值为 true

这两个属性一般我们也不会去特意设置,都是保留默认值!

2.5、page 指令的 isELIgnored

后面我们会讲解 EL 表达式语言,page 指令的 isElIgnored 属性表示当前 JSP 页面是否忽略 EL 表达式,默认值为 false,表示不忽略(即支持)。

2.6、page 指令的其他属性

l language:只能是 ****Java,这个属性可以看出 JSP 最初设计时的野心!希望 JSP 可以转换成其他语言!但是,到现在 JSP 也只能转换成 Java 代码;

l info:JSP 说明性信息;

l isThreadSafe:默认为 false,为 true 时,JSP 生成的 Servlet 会去实现一个过时的标记接口 SingleThreadModel,这时 JSP 就只能处理单线程的访问;

l session:默认为 true,表示当前 JSP 页面可以使用 session 对象,如果为 false 表示当前 JSP 页面不能使用 session 对象;

l extends:指定当前 JSP 页面生成的 Servlet 的父类;

2.7、<jsp-config>(了解)

在 web.xml 页面中配置 也可以完成很多 page 指定的功能!

	<jsp-config>
		<jsp-property-group>
			<url-pattern>*.jsp</url-pattern> 
			<el-ignored>true</el-ignored> 
			<page-encoding>UTF-8</page-encoding> 
			<scripting-invalid>true</scripting-invalid> 
		</jsp-property-group>
	</jsp-config>

3、include 指令

include 指令表示静态包含!即目的是把多个 JSP 合并成一个 JSP 文件!

include 指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。

静态包含:当 hel.jsp 页面包含了 lo.jsp 页面后,在编译 hel.jsp 页面时,需要把 hel.jsp 和 lo.jsp 页面合并成一个文件,然后再编译成 Servlet(Java 文件)。

JSP 指令

很明显,在 ol.jsp 中在使用 username 变量,而这个变量在 hel.jsp 中定义的,所以只有这两个 JSP 文件合并后才能使用。通过 include 指定完成对它们的合并!

4、taglib 指令

这个指令需要在学习了自定义标签后才会使用,现在只能做了了解而已!

在 JSP 页面中使用第三方的标签库时,需要使用 taglib 指令来“导包”。例如:

<%@ taglib prefix=“c”uri=“http://java.sun.com/jsp/jstl/core”%>

其中 prefix 表示标签的前缀,这个名称可以随便起。uri 是由第三方标签库定义的,所以你需要知道第三方定义的 uri。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-06-06发表,共计4211字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中