(三)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://xiahunao.cn/news/3016265.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

B端UX/UI设计面试作品集分层源文件figmasketch模板

当您考虑找工作时&#xff0c;是否曾质疑过项目复盘作品集的重要性&#xff1f;实际上&#xff0c;一份精心准备的项目复盘作品集对于求职者来说具有无可估量的价值&#xff0c;特别是对于设计师这一职业领域。 以下所述或许对您而言已非陌生。您的作品集应当成为您专业技能与…

Stable Diffusion:AI绘画的新纪元

摘要&#xff1a; Stable Diffusion&#xff08;SD&#xff09;作为AI绘画领域的新星&#xff0c;以其开源免费、强大的生成能力和高度的自定义性&#xff0c;正在引领一场艺术与技术的革命。本文旨在为读者提供Stable Diffusion的全面介绍&#xff0c;包括其原理、核心组件、安…

解决Pyppeteer下载chromium慢或者失败的问题[INFO] Starting Chromium download.

文章目录 1.进入网址2.选择上面对应自己系统的文件夹进去3. 然后找到自己的python环境中的site-packages中pyppeteer中的chromium_downloader.py文件并打开 在首次使用Pyppeteer时需要下载chromium 1.进入网址 https://registry.npmmirror.com/binary.html?pathchromium-bro…

裸辞、裁员、老板跑路、被迫失业,未来是「超级个体」的时代

本期我们邀请的程序员是张立强&#xff0c;裸辞、裁员、老板跑路、被迫失业&#xff0c;管理层利益争夺&#xff0c;职业转型&#xff0c;工作五年&#xff0c;攒出了十年经验。程序员如何寻找自己的第二曲线&#xff0c;不妨听听立强的看法。 裸辞失业 大家好&#xff0c;我…

SparkSQL与Hive整合 、SparkSQL函数操作

SparkSQL与Hive整合 SparkSQL和Hive的整合&#xff0c;是一种比较常见的关联处理方式&#xff0c;SparkSQL加载Hive中的数据进行业务处理&#xff0c;同时将计算结果落地回Hive中。 整合需要注意的地方 1)需要引入hive的hive-site.xml&#xff0c;添加classpath目录下面即可…

【牛客】【模板】二维前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 二维前缀和&#xff1a;pre[i][j]a[i][j]pre[i-1][j]pre[i][j-1]-pre[i-1][j-1]; 子矩阵 左上角为(x1,y1) 右下角(x2,y2…

您的浏览器不支持 undefined 代理认证!如有问题请联系您的浏览器支持,请勿反馈此问题给 SwitchyOmega.

一、【问题描述】 PAC 文件是一个 JavaScript 文件&#xff0c;用于定义客户端的代理规则。您可以在 PAC 文件中编写规则&#xff0c;根据不同的目标网址或其他条件&#xff0c;决定是否通过代理服务器进行访问。您可以将 PAC 文件部署到服务器上&#xff0c;并在客户端配置浏…

Http协议解读,运营商劫持

上一篇文章中写到了TCP协议的一些特点&#xff0c;这篇文章对http协议的大体内容做出一些解释&#xff0c;同时&#xff0c;更详细的协议参照RFC文档。这里写官方一点 http协议(超文本传输协议HyperText Transfer Protocol)&#xff0c;它是基于TCP协议的应用层传输协议&#…

OpenCV 入门(五) —— 人脸识别模型训练与 Windows 下的人脸识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

Flask-大体了解介绍

初识Flask Flask是使用 Python编写的Web微框架。Web框架可以让我们不用关心底层的请求响应处理&#xff0c;更方便高效地编写Web程序。 Flask主要有两个依赖&#xff0c;一个是WSGI&#xff08;Web Server Gateway Interface&#xff0c;Web服务器网关接口&#xff09;工具集…

初期Linux

一&#xff0c;系统分为 1.1window系统 个人 &#xff1a;win7&#xff0c;win8&#xff0c;Win10&#xff0c;Win11服务器版&#xff1a;window server 2003&#xff0c;window server 2008 1.2Linux系统 centos7redhatubantukali 1.3什么是Linux&#xff1f; Linux是基…

【Qt QML】Qt Quick Scene Graph

Qt Quick 2是一个用于创建图形界面的库&#xff0c;它使用一个专门的场景图&#xff08;Scene Graph&#xff09;来进行渲染。通过使用OpenGL ES、OpenGL、Vulkan、Metal或Direct 3D等图形API&#xff0c;Qt Quick 2可以有效地优化图形渲染过程。使用场景图而不是传统的命令式绘…

数据库事务隔离级别及mysql实现方案

1、数据库的并发问题 以下几个概念是事务隔离级别要实际解决的问题&#xff0c;所以需要搞清楚都是什么意思。 脏读&#xff1a;读到了其他事务未提交的数据&#xff0c; 不可重复读&#xff1a;在一个事务内&#xff0c;多次读取的同一批数据出现不一致的情况。 幻读&…

RapidJSON介绍

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

硬件设计 之 RS485通信协议简单介绍及RS485测试波形

1.RS485定义&#xff1a; 增强型低功耗半双工RS-485(Enhanced Low Power Half-Duplesx RS-485 Transceivers) RS-485是一种串行通信标准&#xff0c;也被称为EIA-485或TIA-485。它定义了在多个设备之间进行数据传输的电气特性、信号线路和通信协议。 2.RS485通信电平&#xf…

华为机考入门python3--(23)牛客23- 删除字符串中出现次数最少的字符

分类&#xff1a;字符串 知识点&#xff1a; 访问字典中keychar的值&#xff0c;不存在则返回0 my_dict.get(char, 0) 字典的所有值 my_dict.value() 列表中的最小值 min(my_list) 题目来自【牛客】 import sysdef delete_min_freq_char(s):# 计算字母出现的频次…

贪心算法应用例题

最优装载问题 #include <stdio.h> #include <algorithm>//排序int main() {int data[] { 8,20,5,80,3,420,14,330,70 };//物体重量int max 500;//船容最大总重量int count sizeof(data) / sizeof(data[0]);//物体数量std::sort(data, data count);//排序,排完数…

JSON++介绍

1.简介 JSON 是一个轻量级的 JSON 解析库&#xff0c;它是 JSON&#xff08;JavaScript Object Notation&#xff09;的一个超集。整个代码由一个单独的头文件json.hpp组成&#xff0c;没有库&#xff0c;没有子项目&#xff0c;没有依赖项&#xff0c;没有复杂的构建系统&…

FL Studio20.9水果安装及切换修改中文语言教程

前言 喜欢音乐制作的小伙伴千万不要错过这个功能强大&#xff0c;安装便捷的音乐软件哦&#xff01;如果你们已经下载好了这款软件的话&#xff0c;小编今天在这里就为大家详细讲解下如何安装FL Studio软件&#xff0c;一起来学习吧&#xff01; 注意&#xff1a; &#xff0…

Java_方法引用

方法引用就是把已经有的方法拿过来用&#xff0c;当作函数式接口中抽象方法的方法体。 条件&#xff1a; 1.引用处需要是函数式接口 2.被引用的方法需要已经存在 3.被引用的方法的形参和返回值需要跟抽象方法的形参和返回值保持一致 4.被引用方法的功能需要满足当前的要求 简…