(三)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.mzph.cn/diannao/7723.shtml

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

相关文章

静态库和动态库的了解

静态库和动态库是程序开发中常用的两种库文件类型&#xff0c;它们各有特点&#xff0c;适用于不同的场景。下面是对它们的基本概念、优缺点以及使用场景的概述&#xff1a; 静态库 概念&#xff1a;静态库是一组预先编译好的函数和数据的归档集合&#xff0c;通常以.a&#x…

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

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

为什么BGP用于建立对等体关系的环回口主机路由通过BGP传递不优

BGP用于建立对等体关系的环回口主机路由通过BGP传递不优 问题描述&#xff1a; R1和R2通过环回口建立BGP对等体关系 R1在BGP进程中&#xff0c;又network了该环回口地址的主机路由 此时&#xff0c;在R2的bgp routing-table&#xff08;BGP协议路由表&#xff09;中&#x…

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时&#xff0c;笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题&#xff0c;我们需要逐一排查这些可能的原因&#xff0c;并采取相应的解决措施。 首先&#xff0c;网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…

Vue2之路由跳转传参中文问题处理

Vue2之路由跳转传参中文问题处理 文章目录 Vue2之路由跳转传参中文问题处理1. 问题描述1. 当前vue组件2. 跳转到的vue组件3. 出现的错误 2. 解决方法1. 当前vue组件2. 跳转到的vue组件 1. 问题描述 在el-table中的记录列表中放置了一个 操作按钮&#xff0c;点这个按钮时可以新…

android 获取唯一设备id

git项目地址&#xff1a;GitCode - 开发者的代码家园 集成步骤&#xff1a; 1、 allprojects {repositories { ~~~~...maven { url https://jitpack.io }} } 2、 dependencies {implementation com.github.z244370114:DeviceLibray:1.0.4 } 3、获取唯一id (1)需要在…

RabbitMQ之基础入门

在 AMQP 中&#xff0c;Producer 将消息发送到 Exchange &#xff0c;再由 Exchange 将消息路由到一个或多个 Queue 中&#xff08;或者丢弃&#xff09;。Exchange 根据 Routing Key 和 Binding Key 将消息路由到 Queue &#xff0c;目前提供了 Direct、Topic、Fanout、Header…

新媒体运营面试必备高频话术!建议收藏

01 请简单做个自我介绍 回答思路&#xff1a; 在面试前&#xff0c;面试官往往已经看过你的简历&#xff0c;所以要说简历上没有的。在表述的时候&#xff0c;可以按照以下3 点来讲&#xff1a; 热爱&#xff1a;体现你对行业和岗位的热爱 匹配&#xff1a;体现你的经历与岗…

github提交不了的问题

开了VPN提交的时候提示这个报错 是需要这两个端口号一致&#xff0c;就能提交了

线程池

文章目录 普通线程池自定义线程池 普通线程池 //创建线程池&#xff0c;不指定上限 ExecutorService pool1 Executors.newCachedThreadPool(); //创建线程池&#xff0c;指定上限 ExecutorService pool1 Executors.newFixedThreadPool(5); --------------------------------…

Material Studio 计算分子静电力、电荷密度以及差分电荷密度

1.先打开Material Studio导入要计算的分子cif文件或者mol文件&#xff0c;直接Flie-Import 2.高斯几何优化一下结构&#xff0c;参数按照我的设置就行&#xff0c;一般通用&#xff0c;后面出问题再调整 3.点完Run后会跳出很多计算过程&#xff0c;不用管&#xff0c;等他计算完…

ObjectUtils.isNotEmpty和StringUtils.isNotBlank有什么区别

ObjectUtils.isNotEmpty() 和 StringUtils.isNotBlank() 分别属于 Apache Commons Lang 库中的两个不同工具类的方法&#xff0c;它们用于不同的场景和目的&#xff1a; ObjectUtils.isNotEmpty()&#xff1a; 这个方法通常用来判断一个对象是否非空&#xff0c;但它并非专门…

GO语言核心30讲 实战与应用 (第二部分)

原站地址&#xff1a;Go语言核心36讲_Golang_Go语言-极客时间 一、sync.WaitGroup和sync.Once 1. sync.WaitGroup 比通道更加适合实现一对多的 goroutine 协作流程。 2. WaitGroup类型有三个指针方法&#xff1a;Wait、Add和Done&#xff0c;以及内部有一个计数器。 (1) Wa…

【FL常用插件#1】Ozone11臭氧的安装和使用

本文内容收集自互联网&#xff0c;仅供个人学习参考使用&#xff0c;不允许用于商业用途&#xff0c;造成的侵权行为与本文作者无关 安装 VST2、VST3、AAX和NKS是音频技术界常见的几种插件格式&#xff0c;它们在功能和兼容性上有所不同&#xff1a; VST2 (Virtual Studio Tec…

python环境下labelImg图片标注工具的使用

labelimg GitHub地址 python环境下labelImg图片标注工具的使用 1. 写在开头2. 如何使用2.1安装2.2 启动2.2.1 先启动后设置标注的目录2.2.2 指定标注的目录和预设置的标签 2.3 设置自动保存和显示类别。2.4 保存文件类型2.5 [快捷键](https://github.com/HumanSignal/labelImg…

FastDFS-单机扩容

描述 周一上班收到用户反馈系统异常&#xff0c;紧急排查日志发现报错&#xff1a;FdfsServerException:错误:28&#xff0c;错误信息:没有足够的存储空间。 解决 根据异常信息判断是文件服务器可用内存不够了&#xff0c;首先登录文件服务器&#xff0c;使用df -h命令查看一…

如何使用systemctl管理自定义Python服务(Flask应用)

诸神缄默不语-个人CSDN博文目录 在本教程中&#xff0c;我们将学习如何在 Linux 系统中创建并管理一个自定义 Python 服务。这里的例子将展示如何通过 systemd 的 systemctl 命令来启动、监控和管理一个基于 Flask 的 web 应用。通过这种方式&#xff0c;你可以确保你的应用作…

teleport内置组件和plugins插件基本使用

teleport内置组件和plugins插件基本使用 一. teleport内置组件使用1. 模板中使用teleport1. public中模板中不在app元素中的任意html元素 二. plugins插件使用1.创建插件的方式&#xff1a;2.main.js中引用 一. teleport内置组件使用 在组件化开发中&#xff0c;我们封装一个组…

5.合并两个有序数组

文章目录 题目简介题目解答解法一 &#xff1a;合并后排序解法二&#xff1a;双指针排序 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 合并两个有序数组 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一 &#xff1a;合并后排序 假设我们要合…

NXP i.MX8系列平台开发讲解 - 3.11 Linux PCIe设备调试(WIFI模块)

专栏文章目录传送门&#xff1a;返回专栏目录 文章目录 目录 1. WIFI 模块简单介绍 2. 设备驱动原理介绍 3. PCIE WIFI驱动实例分析 3.1 查看设备树 3.2 wifi 设备驱动代码分析 3.3 内核配置选项 4. WIFI驱动调试相关 根据前面对PCIe的讲解&#xff0c;对PCIe的整体都有…