(三)JSP教程——JSP动作标签
JSP动作标签
用户可以使用JSP动作标签向当前输出流输出数据,进行页面定向,也可以通过动作标签使用、修改和创建对象。
<jsp:include>标签
<jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文本文件等。通过include动作,可以多次使用同一个页面,增加了代码的可重用性。例如,可以在页面中使用include动作引入头部和底部页面。
<jsp:include>的语法如下:
<jsp:include page="relativeURL | <%=expression%>" flush="true" />
page指定引入页面的路径,flush表示在引入文件前是否刷洗缓冲区,默认为false。
下面以在JSP页面中引入头部页面来说明include的用法。
首先创建一个head.jsp页面,head页面的代码如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>head页面</title>
</head>
<body>
<p>header页面内容</p>
</body>
</html>
接着编写index.jsp页面,页面内容如下
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>主界面</title>
</head>
<body>
<jsp:include page="head.jsp"></jsp:include>
<p>主界面内容</p>
</body>
</html>
<jsp:forward>标签
<jsp:forward>标签能实时地从当前JSP页面跳转到同一个Web应用中静态资源,JSP页面或者Servlet,同时有效终止当前JSP页面的执行。其语法如下:
<jsp:forward page="url"/>
page属性指定要跳转资源的相对URL,且指定的文件只能十该Web应用中的文件。
下面用示例来说明<jsp:forward>标签的使用。首先我们准备一个login.jsp页面。
login.jsp页面的代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<jsp:forward page="index.jsp"></jsp:forward>
</body>
</html>
index.jsp内容如下
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>主界面</title>
</head>
<body>
<p>主界面内容</p>
</body>
</html>
重新启动应用后,打开浏览器,在地址栏中输入:http://localhost:8080/s001/login.jsp
界面展示如下图所示
可以看到,浏览器中地址仍然是跳转前的地址。<jsp:forward>与Servlet中转发类似,客户端不会显示转发后的地址,有较好的隐蔽性。
<jsp:param>标签
<jsp:param>动作用来传递参数信息,经常和其它动作一起使用,例如和<jsp:include> 和 <jsp:forward>一起使用。其语法如下:
<jsp: param name="param_name" value="param_value" />
在<jsp:forward>标签中嵌套<jsp:param>可以将参数传递给要跳转的页面。语法如下:
<jsp:forward page="url">
<jsp: param name="param_name" value="param_value" />
</jsp:forward>
接下来我们修改以下login.jsp页面,代码如下
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<%
String gender = request.getParameter("gender");
if (gender.equals("male")) {
gender = "Mr.";
} else if (gender.equals("female")) {
gender = "Mrs.";
} else {
gender = "";
}
%>
Welcome!<%=gender%><%=request.getParameter("username")%>
</body>
</html>
启动该应用后,在浏览器地址栏中输入:http://localhost:8080/s001/login.jsp
可以看到如下结果
JSP useBean动作
<jsp:useBean>的语法如下:
<jsp:useBean id = "name" class = "package.class" scope= "page | request | session | application" />
属性id设定bean对象的变量名称。属性class设定bean对象对应的类,使用此标签会调用JavaBean不带参数的构造方法。
属性scope设定bean的应用范围,其值有四种:page、request、session、application,默认为page。
scope取值page:JSP引擎分配给每个客户的bean是互不相同的,他们占有不同的内存空间,该bean的有效范围是当前页面,当客户离开这个页面时,JSP取消分配给该客户的bean。
scope取值session:JSP引擎分配给每个客户的bean时互不相同的,该bean的有效范围是客户的会话期间。如果客户在某个页面更改了这个bean的属性,其他页面的这个bean的属性也将会发生同样的变化。
scope取值request:JSP引擎分配给每个客户的bean是互不相同的,该bean的有效范围是request期间。JSP引擎对请求做出响应后,取消分配给客户的这个bean。
scope取值application:所有客户共享这个bean,如果一个客户更改了这个bean的属性,所有客户的这个bean的属性也将发生同样的变化。这个bean直到服务器关闭才被取消。
下面以示例来说明<jsp:useBean>的用法,首先创建一个简答的Test类,Test类代码如下:
package com.example.servlet001;
public class Test {
public String concatStr(String str) {
String str2 = str.concat("Test java bean");
return str2;
}
}
然后创建一个index.jsp页面来使用这个类
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JavaBean示例</title>
</head>
<body>
<jsp:useBean id="test" class="com.example.servlet001.Test" />
<%
String str = "这是";
out.print(test.concatStr(str));
%>
</body>
</html>
启动该应用后,在浏览器中输入URL地址:http://localhost:8080/s001/
<jsp:getProperty>标签与<jsp:setProperty>标签
<jsp:getProperty name = "beanName" property = "attributeName">
<jsp:getProperty>标签用来获取JavaBean的属性值,属性name指定bean对象的变量名,属性property为要获取的对象属性名。使用此标签会调用指定属性的get方法,因此在JavaBean类定义中必须有此属性的get方法,且此方法的访问修饰符为public,否则执行此标签会抛出异常。
<jsp:setProperty name = "beanName" property = "attributeName" value = "attributeValue"/>
<jsp:setProperty>标签用来设置JavaBean的属性值,属性name指定bean对象的变量名,属性property为要设置的对象属性名,属性value为设定的属性值。使用此标签会调用指定属性的set方法,因此在JavaBean类定义中必须有此属性的set方法,且此方法的访问修饰符为public,否则执行此标签时会抛出异常。
另外JavaBean在JSP中还有一个很重要的机制——自省机制,即当服务器接收到请求时,它能根据请求的参数名称,自动设定与JavaBean相同属性名称的值。
首先创建一个Site类,Site类的代码如下:
package com.example.servlet001;
public class Site {
private String name;
private String url;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
创建一个login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="index.jsp" method="post">
网站名称: <input type="text" name="name"/> <br> <br>
网址: <input type="text" name="url"/> <br> <br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
创建一个index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JavaBean示例</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="site" class="com.example.servlet001.Site"/>
<jsp:setProperty property="*" name="site"/>
<jsp:getProperty property="name" name="site"/>
<jsp:getProperty property="url" name="site"/>
</body>
</html>
启动该应用后,在浏览器地址栏中输入:http://localhost:8080/s001/login.jsp
点击提交按钮后的界面展示如下图所示
<jsp:plugin>标签
首先创建一个applet小程序,applet小程序代码如下
package com.example.httpservletrequest01;
import java.applet.Applet;
import java.awt.*;
public class MyApplet extends Applet {
@Override
public void init() {
setBackground(Color.gray);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.drawString("Hello Word", 25, 50);
}
}
创建一个index.jsp页面,页面代码如下:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP plugin</title>
</head>
<body>
<jsp:plugin codebase="http://localhost:8686/s01/" type="applet" code="com.example.httpservletrequest01.MyApplet.class" width="800" height="800"></jsp:plugin>
</body>
</html>
Chrome浏览器需要安装CheerpJ Applet Runner 10.6,并启用
相关文章:

(三)JSP教程——JSP动作标签
JSP动作标签 用户可以使用JSP动作标签向当前输出流输出数据,进行页面定向,也可以通过动作标签使用、修改和创建对象。 <jsp:include>标签 <jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文…...

centos7安装真的Redmine-5.1.2+ruby-3.0.0
下载redmine-5.1.2.tar.gz,上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…...

方法的重写
方法的重写 概念:子类继承父类之后,就拥有了符合权限的父类的属性和方法,但是当父类的方法不符合子类的要求的时候,子类也可以重新的书写自己想要的方法。所以,方法的重写,即子类继承父类的方法后…...
Terraform局部值
Terraform输入变量用于从外部传递值到Terraform模块内部进行使用,如果把Terraform代码看作是一个函数的话,Terraform输入变量就是函数的输入参数。 Terraform局部值则用于在Terraform模块内部定义反复使用的常量值或表达式,如果把Terraform代…...

vue+element-ui实现横向长箭头,横向线上下可自定义文字(使用after伪元素实现箭头)
项目场景: 需要实现一个长箭头,横向线上下可自定义文字 代码描述 <div><span class"data-model">{{ //上方文字}}</span><el-divider class"q"> </el-divider>//分隔线<span class"data-mod…...

性能监控之prometheus+grafana搭建
前言 Prometheus和Grafana是两个流行的开源工具,用于监控和可视化系统和应用程序的性能指标。它们通常一起使用,提供了强大的监控和数据可视化功能。 Prometheus Prometheus是一种开源的系统监控和警报工具包。它最初由SoundCloud开发,并于…...

25-ESP32-S3 内置的真随机数发生器(RNG)
ESP32-S3 内置的真随机数发生器(RNG)😎 引言 📚 在许多应用中,随机数发生器(RNG)是必不可少的。无论是在密码学🔒、游戏🎮、模拟🧪或其他领域,随…...

万兆以太网MAC设计(12)万兆UDP协议栈上板与主机网卡通信
文章目录 一、设置IP以及MAC二、上板效果2.1、板卡与主机数据回环测试2.2、板卡满带宽发送数据 一、设置IP以及MAC 顶层模块设置源MAC地址 module XC7Z100_Top#(parameter P_SRC_MAC 48h01_02_03_04_05_06,parameter P_DST_MAC 48hff_ff_ff_ff_ff_ff )(input …...

2024年4月17日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.17,华为机试
2024年4月17日华为春招实习试题【三题】-题目题解在线评测 🔮题目一描述:扑克牌消消乐输入描述输出描述样例一样例二Limitation解题思路一:模拟,遇到连续3张相同牌号的卡牌,直接删除解题思路二:栈解题思路三…...

展开说说:Android线程池解析
何谓线程池?本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么? 第一:前面博客提到过创建和销毁线程的操作本身是有性能开销的,如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…...

Selenium自动化测试面试题全家桶
🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 …...
Docker 容器日志占用空间过大解决办法
1、vi /etc/docker/daemon.json {"log-driver":"json-file","log-opts": {"max-size":"200m", "max-file":"1"} } 2、重新加载守护进程配置文件 systemctl daemon-reload 3、重启docker systemctl…...

update_min_vruntime()流程图
linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单,总一句话,将 cfs_rq->min_vruntime 设置为: max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…...
十进制转任意进制(以及任意进制来回转换<了解>)
十进制转任意进制: #include <iostream> #include <vector> #include <string> using namespace std; // 将十进制数转换为P进制形式的字符串 string toBase(int num, int base) {string result ""; // 初始化结果字符串为空wh…...

postcss-px-to-viewport 从入坑到放弃 (nuxt3搭建响应式官网解决方案 )
前沿 什么是 postcss-px-to-viewport 将px单位转换为视口单位的 (vw, vh, vmin, vmax) 的 PostCSS 插件。 为什么使用 postcss-px-to-viewport 在pc端盛行的时代 ,如果你不想去适配更多的pc端代码,可以采用它。 由于nuxt3本身已带postcss,所…...
C语言从入门到入门
一、引言 C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言具有高效、灵活和可移植性等特点,因此被广泛应用于系统编程、嵌入式系统开发、游戏开发等领域。 …...

Java基础教程 - 4 流程控制
更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 4 流程控制 4.1 分支结构…...
大厂Java面试题:MyBatis中有几种加载映射器(Mapper.xml)的方式?
大家好,我是王有志。 今天给大家带来的是一道来自京东的 MyBatis 面试题:MyBatis 中有几种加载映射器(Mapper.xml)的方式? 常见加载 MyBatis 映射器的方式有 5 种,可以根据不同的使用方式来进行具体区分&…...

Flutter笔记:Widgets Easier组件库(10)快速处理承若型对话
Flutter笔记 使用Widgets Easier组件库快速处理承若型对话 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…...
10_Linux中的计划任务
10_Linux中的计划任务 常见计划任务 Linux系统中默认在执行的计划任务 日志文件的轮询:logrotate日志文件分析logwatch任务建立locate数据库建立manpage查询数据库RPM软件日志文件删除缓存与网络有关的分析 仅执行一次的计划任务 atd和at [rootnode4 ~]# systemctl start…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...