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

JSP指令

388次阅读
没有评论

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7819794
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器 在多台服务器同时运行的环境中,性能监控、状态告警、资源可视化 是运维人...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...