(三)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并启用

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5月6(信息差)

&#x1f30d;一次预测多个token&#xff0c;Meta新模型推理加速3倍&#xff0c;编程任务提高17% https://hub.baai.ac.cn/view/36857 &#x1f384; LeetCode 周赛超越 80% 人类选手&#xff0c;推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

Hi3516标准系统入门&#xff08;命令行方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会…

一加12/11/10/Ace2/Ace3手机上锁回锁BL无限重启黑屏9008模式救砖

一加12/11/10/Ace2/Ace3手机官方都支持解锁BL&#xff0c;搞机的用户也比较多&#xff0c;相对于其他品牌来说&#xff0c;并没有做出限制&#xff0c;这也可能是搞机党最后的救命稻草。而厌倦了root搞机的用户&#xff0c;就习惯性回锁BL&#xff0c;希望彻底变回官方原来的样…

数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务

目录 一、引言 二、数字旅游以科技创新推动旅游服务智能化 1、智能化技术的应用 2、提升旅游服务的效率和质量 三、数字旅游以科技创新推动旅游服务精准化 1、精准化需求的识别与满足 2、精准化营销与推广 四、数字旅游以科技创新推动旅游服务个性化 1、个性化服务的创…

3D相机及应用

无论是2D相机和3D相机&#xff0c;在工业应用中都有着不可或缺的作用。3D相机与2D相机的最大区别在于&#xff0c;3D相机可以获取真实世界尺度下的3D信息&#xff0c;而2D相机只能获取像素尺度下的2D平面图像信息。通过3D相机得到的数据&#xff0c;我们可以还原出被测量物体的…

java线上问题排查之内存分析(三)

java线上问题排查之内存分析 使用top命令 top命令显示的结果列表中&#xff0c;会看到%MEM这一列&#xff0c;这里可以看到你的进程可能对内存的使用率特别高。以查看正在运行的进程和系统负载信息&#xff0c;包括cpu负载、内存使用、各个进程所占系统资源等。 2.用jstat命令…

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

从互联网医院源码到搭建:开发视频问诊小程序的技术解析

如今&#xff0c;视频问诊小程序作为医疗服务的一种新形式&#xff0c;正逐渐受到人们的关注和青睐。今天&#xff0c;小编将为您详解视频问诊小程序的开发流程。 一、背景介绍 互联网医院源码是视频问诊小程序开发的基础&#xff0c;它提供了一套完整的医疗服务系统框架&…

Windows PC上从零开始部署ChatGML-6B-int4量化模型

引言 ChatGLM-6B是清华大学知识工程和数据挖掘小组&#xff08;Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University&#xff09;发布的一个开源的对话机器人。6B表示这是ChatGLM模型的60亿参数的小规模版本&#xff0c;约60亿参数。 ChatGML-6B-in…

spring高级篇(七)

1、异常处理 在DispatcherServlet中&#xff0c;doDispatch(HttpServletRequest request, HttpServletResponse response) 方法用于进行任务处理&#xff1a; 在捕获到异常后没有立刻进行处理&#xff0c;而是先用一个局部变量dispatchException进行记录&#xff0c;然后统一由…

文心一言 VS 讯飞星火 VS chatgpt (253)-- 算法导论18.2 6题

六、假设 B-TREE-SEARCH 的实现是在每个结点内采用二分查找&#xff0c;而不是线性查找。证明&#xff1a;无论怎样选择 t ( t 为 n 的函数)&#xff0c;这种实现所需的 CPU 时间都为 O(lgn)。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 首先&#xff0c;我…

ChatGPT理论分析

ChatGPT "ChatGPT"是一个基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的对话系统。GPT 是一个由OpenAI 开发的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它使用深度学习来生成文本。以下是对ChatGPT进行理论分析的几个主…

PTA|小字辈

题目 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c;我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号&#x…

c#数据库: 10.调用存储过程查询信息,并显示在窗体上

查询女生信息&#xff0c;并将信息显示在窗体上: 原数据表//右键数据库名,新建查询 ------------- 新建查询窗口,添加新建存储过程Procedure_GetGirls1和查询代码如下 : CREATE PROCEDURE dbo.Procedure_GetGirls1 /*存储过程名称*/ AS SELECT * f…

《设计一款蓝牙热敏打印机》

主控芯片用易兆威蓝牙ic&#xff0c;通讯接口&#xff1a;蓝牙、串口、usb 安卓apk用java kotlin编写、上位机用Qt编写。

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设&#xff0c;有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现&#xff0c;可用于操作系统&#xff0c;提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器&#xff0c;属于CM4内核中的一个外设&#xff0c;…

套管外径测量仪 多尺寸型号 规格全可定制

套管&#xff08;bushing&#xff09;是一种将带电导体引入电气设备或穿过墙壁的一种绝缘装置。前者称为电器套管&#xff0c;后者称为穿墙套管。套管通常用在建筑地下室&#xff0c;是用来保护管道或者方便管道安装的铁圈。套管的分类有刚性套管、柔性防水套管、钢管套管及铁皮…

python+flask+ldap3搭建简易版IDaaS系统(前端站点)

Python工具开源专栏 Py0006 pythonflaskldap3搭建简易版IDaaS系统&#xff08;前端站点&#xff09; Python工具开源专栏前言目录结构前端网站的部分演示首页查询数据数据同步数据关联查询系统日志 完整代码已在GitHub上开源 前言 pythonflaskldap3搭建简易版IDaaS系统的前端站…

shell常用文件处理命令

1. 解压 1.1 tar 和 gz 文件 如果你有一个 .tar 文件,你可以使用以下命令来解压: tar -xvf your_file.tar在这个命令中,-x 表示解压缩,-v 表示详细输出(可选),-f 后面跟着要解压的文件名。 如果你的 .tar 文件同时被 gzip 压缩了(即 .tar.gz 文件),你可以使用以下…

Linux信号捕捉

要处理信号&#xff0c; 我们进程就得知道自己是否收到了信号&#xff0c; 收到了哪些信号&#xff0c; 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表&#xff0c; 什么时候进行检测呢&#xff1f; 当我们的进程从内核态返回到用户态的时候&…