JSP和JSTL板块:第二节 JSP的指令和动作 来自【汤米尼克的JAVAEE全套教程专栏】

JSP和JSTL板块:第二节 JSP的指令和动作

  • 一、page指令:页面设置
    • (1)导入包:import属性
    • (2)设定字符集:pageEncoding属性
    • (3)设定错误页面:errorPage/isErrorPage属性
    • (4)设定MIME类型和字符编码:contentType属性
  • 二、include指令:包含
    • (1)静态包含:指令
    • (2)动态包含:动作
  • 三、forward动作:请求转发

JSP指令告诉JSP引擎对JSP页面如何编译,不包含控制逻辑,不产生任何可见的输出,只对当前文件做导入、设定当前文件特殊属性等操作。

用法:

<%@ 指令类别 属性1="..." 属性2="..." ... %>

JSP只包含三个指令:page,include,taglib,其中前两个最常用

一、page指令:页面设置

(1)导入包:import属性

在编写程序时,可能需要用到JDK的其他类或者自己定义的别的类,这时候就需要使用improt属性进行导入。import属性用法如下

<%@ page import="包名.类名" %>

如果想把包下面的所有类都导入,可以用.*

<%@ page import="包名.*" %><%@ page import="java.util.*"%>
导入包中多个类时,用逗号隔开
<%@ page import="java.io.*","java.awt.*" %> 

(2)设定字符集:pageEncoding属性

在Servlet中,可以使用request对象的两个属性:

request.setCharacterEncoding("UTF-8");
request.setContentType("text/html;charset=UTF-8");

设置前后两端的编码格式。
当然,在page指令的pageEncoding属性也可进行编码的指定。但是注意pageEncoding指的是JSP文件本身的编码,而contentType中的charset指的是服务器向客户端发送为客户端的内容编码(优先起决定作用的是pageEncoding

<%@ page language="java"   contentType="text/html" pageEncoding="UTF-8"%>
<html>
	<head>
		<title>test pageEncoding</title>
	</head>
	<body>
		<center><h2>pageEncoding属性测试</h2></center>
	</body>
</html>

(3)设定错误页面:errorPage/isErrorPage属性

在每个网站中都少不了设置错误页面,用于在网站发生错误时向用户显示一些网站管理员想让用户看到的信息,一般情况下,可以将异常现象在一个统一的网页中显示。我们可以通过errorPage属性和isErrorPage属性来指定错误页。

要完成错误页的操作,我们需要满足两个条件:

  • 使用errorPage属性指定错误出现时要跳转的页面。
  • 使用isErrorPage属性指明该页面是错误页。

注意:错误页的跳转属于服务器跳转(request域对象),页面内容改变,地址栏的地址不改变。

例:
报错页
JSP code

<%@ page language="java"   contentType="text/html"pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%>

<html>
	<head>
		<title>test errorPage</title>
	</head>
	<body>
		<center><h2>errorPage属性测试</h2></center>
	</body>
</html>

错误处理页error.jsp
code

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>   <%--定义该页面是错误页 --%>

<html>
	<head>
		<title>test isErrorPage</title>
	</head>
	<body>
		<center><h2>isErrorPage属性测试</h2></center>
	</body>
</html>

(4)设定MIME类型和字符编码:contentType属性

在page指令中,contentType属性可以指定JSP页面的编码方式和JSP页面响应的MIME类型,默认的MIME类型为text/html,默认的字符集类型为charset=ISO-8859-1。什么?你问我什么是MIME?

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,使用MIME类型可以设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。通用结构contentType="type/subtype"。点此了解更多关于MIME

例:为JSP页面指定MIME类型为text/html,编码为UTF-8
JSP code

<%@ page language="java"  contentType="text/html; charset=UTF-8" %>

<html>
	<head>
		<title>test MIME</title>
	</head>
	<body>
		<center><h2>contentType属性的设置测试</h2></center>
	</body>
</html>

以上就是page指令的四个常用属性

二、include指令:包含

使用包含操作,可以将同一段代码包含进JSP文件重复使用。例如,一般网页的组成可以分为几个区域,其中的一些区域可能是一直不需要改变的,比如顶部的菜单栏、底部的版权栏。只需要改变其中的一个具体区域,比如淘宝网中间的店铺内容。
在JSP中如果要想实现包含的操作,有两种做法:静态包含、动态包含
静态包含使用include指令即可,动态包含则需要使用include动作标签

(1)静态包含:指令

静态包含就是将要包含的内容原封不动复制进当前文件,与JSP中的Java脚本段一样,在Servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到_jspService方法中,回顾上一小节【第一节 JSP追根溯源】),所以只生成了一个Servlet,导致两个页面不能有同名的变量。运行效率高一点点,但耦合性较高,不够灵活。
语法

<%@ include file="要包含的文件路径"%> <!-- 相对路径 -- >


被包含的页面 included.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>被包含的页面</title>
    </head>
    <body>
        <h1>Hello Include</h1>
    </body>
</html>

拿包含的页面 include.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
	<head>
	    <title>拿包含的页面</title>
	</head>
	<body>
		<%@ include file="included.jsp "%>>
	</body>
</html>

访问拿包含的页面
在这里插入图片描述
底层原理
找到 拿包含的页面Servlet
在这里插入图片描述
include_jsp.java code

	  out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>拿包含的页面</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("    <head>\r\n");
      out.write("        <title>被包含的页面</title>\r\n");
      out.write("    </head>\r\n");
      out.write("    <body>\r\n");
      out.write("        <h1>Hello Include</h1>\r\n");
      out.write("    </body>\r\n");
      out.write("</html>\r\n");
      out.write(">\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");

可以看到底层就是拿包含的页面Servlet把被包含页面的代码在服务器里输出了一遍而已

(2)动态包含:动作

JSP动作指使用XML语法格式的标记来控制服务器的行为。

语法

<jsp:动作名 属性1="..." 属性2="..." ... />
或者
<jsp:动作名> ... </jsp:动作名>

include的动态包含

动态包含底层是Servlet中调用了一个方法来完成包含,会生成多个源码文件,所以可以定义同名变量,效率高,耦合度低

语法

<jsp:include page="文件名" />


被包含的页面 included.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>被包含的页面</title>
    </head>
    <body>
        <h1>Hello Include</h1>
    </body>
</html>

拿包含的页面 include.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
	<head>
	    <title>拿包含的页面</title>
	</head>
	<body> 
	    <%--现在改成动态包含了--%>
		<jsp:include  page="included.jsp" /> 
	</body>
</html>

访问拿包含的页面
在这里插入图片描述
那为什么说相当于Servlet中调用了一个方法?
底层原理
同样找到拿包含页面的Servlet
在这里插入图片描述
include_jsp.java code

      out.write("\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>拿包含的页面</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write('\r');
      out.write('\n');
      org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "included.jsp", out, false);
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");

可以看到,包含处代码变成了org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "included.jsp", out, false);Servlet调用了一个叫include的方法,而不是像静态包含一样直接输出代码了,所以动态包含可以定义同名变量,效率高,耦合度低。

三、forward动作:请求转发

我们已经在include的动态包含里介绍了什么是JSP的动作,除了include动作,还有一个重要的知识点,jsp:forward动作:请求转发。当forward动作被执行后,当前的页面将不再执行,而是去执行指定的目标页面
语法

<jsp:forward page="文件名" />


跳转前页面 start.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
	<head>
	    <title>跳转前页面</title>
	</head>
	<body>
		<jsp:forward  page="after.jsp" />  <%--请求转发动作--%>
		<h1>Hello 跳转前</h1>
	</body>
</html>

跳转后页面 after.jsp

<%--
  Created by IntelliJ IDEA.
  User: TommyNike
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>跳转后页面</title>
    </head>
    <body>
        <h1>Hello 请求转发</h1>
    </body>
</html>

访问跳转前页面:
在这里插入图片描述
可以看到跳转前页面在请求转发动作之后的内容都被跳过了,因为跳转去执行的跳转后页面了
请求转发:从服务器跳转到客户端,是服务器行为,在Servlet中对应方法是

request.getRequestDispather("url").forward(request,response);

特点

  1. 地址栏不变
  2. 从始至终只有一个请求,在同一个request的域对象中,request与response两个参数传的值可以共享。更多的请求转发内容见Servlet模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps&#xff1a;如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

day07-CSS高级

01-定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 left right top bottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置 显示模…

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路&#xff0c; 创建三个表&#xff0c; 第一个数是从四个数遍历&#xff0c; 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

【JS】基于node-media-server搭建流媒体服务器示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍基于node-media-server搭建流媒体服务器示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

【机器学习】常见算法详解第2篇:KNN之kd树介绍(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习&#xff0c;伴随浅显易懂的数学知识&#xff0c;让大家掌握机器学习常见算法原理&#xff0c;应用Scikit-learn实现机器学习算法的应用&#xff0…

Windows Server安装部署FTP服务

文章目录 建立FTP目录通过IIS在Server上安装FTP服务配置FTP站点配置身份验证和授权测试FTP服务FTP软件推荐FTP客户端软件FTP服务器软件适合Ubuntu的FTP软件 推荐阅读 在Windows操作系统中安装和配置FTP服务&#xff0c;主要是基于Internet Information Services (IIS)的FTP服务…

ABAP 笔记--内表结构不一致,无法更新数据库MODIFY和UPDATE

目录 ABAP 笔记内表结构不一致&#xff0c;无法更新数据库MODIFY和UPDATE ABAP 笔记 内表结构不一致&#xff0c;无法更新数据库 MODIFY和UPDATE 如果是使用MODIFY或者UPDATE

【2024.2.3练习】修剪灌木

题目描述 题目分析 数学思维题。首先容易看出从左往右树的最大高度是对称的&#xff0c;不妨只看前棵树&#xff0c;由于此时右边的灌木数量不少于左边灌木数量&#xff0c;所以要想长到最高一定是修剪到最右边再剪回来&#xff0c;设该树右边共有棵树&#xff0c;那么它能长到…

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …

JAVASE进阶:Collection高级(1)——源码分析contains方法、lambda遍历集合

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;JAVASE进阶&#xff1a;函数式编程——lambda表达式替代匿名内部类 &#x1f4da;订阅专栏&#xff1a;JAVASE进阶 希望文章对你…

2024 高级前端面试题之 HTTP模块 「精选篇」

该内容主要整理关于 HTTP模块 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 HTTP模块精选篇 1. HTTP 报文的组成部分2. 常见状态码3. 从输入URL到呈现页面过程3.1 简洁3.2 详细 4. TCP、UDP相关5. HTTP2相关6. https相关7. WebSocket的…

docker-compose Install HertzBeat

HertzBeat前言 HertzBeat 赫兹跳动 是一个拥有强大自定义监控能力,高性能集群,兼容 Prometheus,无需 Agent 的开源实时监控告警系统。 易用友好的开源实时监控告警系统,无需Agent,高性能集群,兼容Prometheus,强大自定义监控能力。​ 集 监控+告警+通知 为一体,支持对…

ToF传感器在移动机器人中的作用

原创 | 文 BFT机器人 在日新月异的机器人技术领域&#xff0c;技术的无缝整合正引领着人类与机器交互方式的革新潮流。ToF传感器作为变革性创新的一个例子&#xff0c;对移动机器人更好地感知周围环境起到了决定性的作用。 ToF传感器与激光雷达技术在创建深度图方面有着异曲同…

SpringBoot实战2

目录 1.如何返回两个类型的数据&#xff1f;User和Booth 2.如何使用MyBatis遍历一个数组进行查询&#xff1f; 3.前端要的数据太多太杂&#xff0c;我们拼接多个List&#xff0c;前端找数据困难&#xff0c;浪费时间。因此我们进行三表联表查询。 1.首先创建一个vo包&#x…

c++ STL less 的视角

c less 函数在不同的地方感觉所起的作用是不一样的&#xff0c; 这中间原因是 less 的视角不一样&#xff0c; 下面尝试给出解释下&#xff0c; 方便记忆 1、 左右视角 符合 排序sort less(value, element&#xff09; less 表示一种 “符合关系“&#xff0c; 表示sort 后…

大数据环境搭建(一)-Hive

1 hive介绍 由Facebook开源的,用于解决海量结构化日志的数据统计的项目 本质上是将HQL转化为MapReduce、Tez、Spark等程序 Hive表的数据是HDFS上的目录和文件 Hive元数据 metastore&#xff0c;包含Hive表的数据库、表名、列、分区、表类型、表所在目录等。 根据Hive部署模…

蓝桥杯第九届省赛题-----彩灯控制系统笔记

题目要求&#xff1a; 一、 基本要求 1.1 使用 CT107D 单片机竞赛板&#xff0c;完成“彩灯控制器”功能的程序设计与调 试&#xff1b; 1.2 设计与调试过程中&#xff0c;可参考组委会提供的“资源数据包”&#xff1b; 1.3 Keil 工程文件以准考证号命名&#xff0c…

在VM虚拟机搭建NFS服务器

NFS共享要求如下&#xff1a; &#xff08;1&#xff09;共享“/mnt/自已姓名的完整汉语拼音”目录&#xff0c;允许XXX网段的计算机访问该共享目录&#xff0c;可进行读写操作。&#xff08;说明&#xff1a;XXX网段&#xff0c;请根据你的规划&#xff0c;再具体指定&#xf…

VUE开发记录

1、VUE模板传递参数到JS方法 <select-language :value"item.language" change"selectLanguage($event, key)"></select-language>selectLanguage(value, key){console.log(value, key) }, 2、Element框架el-form-item自定义label和内容 <…

远秋医学培训系统未授权查看密码

指纹特征 title"远秋医学培训报名系统v1.0"漏洞复现 POC&#xff1a;/User/ManagerList.aspx?ty1&ty1