(一)JSP教程——JSP脚本标签

JSP脚本标签

        JSP脚本标签通常用作对象操作和数据运算,从而动态地生成页面内容。这里有三种类型的脚本标签:声明、代码段和表达式。

JSP声明

        JSP声明一个或多个变量、方法,供以后的代码使用。必须先对变量和方法进行声明,才能使用他们。

JSP声明的语法

<%!声明语句%>

也可以用如下格式:

<jsp:declaration>声明语句</jsp:declaration>

JSP脚本和声明的区别

        JSP 脚本只能声明变量,不能声明方法。JSP 声明语句可以声明变量和方法。

        JSP 脚本会把包含的内容转译插入到 Servlet 的 service() 方法中,也就是 <% %> 中定义的变量是局部变量。这也是 JSP 脚本不能声明方法的原因,因为 Java 不允许方法中嵌套方法。

        JSP 声明会把包含的内容添加到 Servlet 类中(在任何方法之外),也就是 <%! %> 中定义的变量是成员变量,方法是成员方法。

JSP代码段

  1. 在JSP界面中可以使用JSP代码段在界面中书写Java代码
  2. JSP代码段可以包含语句、变量和表达式,JSP代码段会把这些内容添加到Servlet的service方法中;
  3. JSP代码段的语法<%Java代码%>

或者在JSP页面中使用<jsp:scriptlet></jsp:scriptlet>,然后在该标记中间书写Java代码;

下面用实例来介绍一下JSP代码段的使用

创建一个login.html页面,用来输入一些测试数据

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>登录界面</title>

</head>

<body>

<form action="scriptlet.jsp" method="post">

    <input type="text" name="uname"><br/>

    <input type="text" name="url"><br/>

    <input type="submit" value="go">

</form>

</body>

</html>

     创建一个scriptlet的JSP界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP代码段</title>
</head>
<body>
<%
    String name = request.getParameter("uname");
    String url= request.getParameter("url");
    out.print("欢迎" + name + ",我们的网址是:" + url);
%>
</body>
</html>

        启动该应用

        打开浏览器,在浏览器地址栏中输入地址 http://localhost:8686/s01/login.html,打开的界面如下图所示

        输入名称和网站地址,然后点击go按钮

         得到界面结果如下

         修改一下scriptlet.jsp的代码,修改后的代码如下

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

<html>

<head>

    <title>JSP脚本</title>

</head>

<body>

<%--<%--%>

<%--    String name = request.getParameter("uname");--%>

<%--    String url= request.getParameter("url");--%>

<%--    out.print("欢迎" + name + ",我们的网址是:" + url);--%>

<%--%>--%>

<jsp:scriptlet>

        String name = request.getParameter("uname");

        String url= request.getParameter("url");

        out.print("欢迎" + name + ",我们的网址是:" + url);

</jsp:scriptlet>

</body>

</html>

        在浏览器地址栏中输入地址 http://localhost:8686/s01/login.html,可以看到会得到相同的结果

JSP表达式

        可以将变量或者表达式输出到页面上,不需要out.print()就能输出数据。通常用于打印变量或者方法的值。

表达式语法:

<%=表达式%>

或者用

<jsp:expression>表达式</jsp:expression>

这里需要注意JSP表达式不能以分号结尾。

添加一个expression.jsp页面,页面代码如下

访问该页面得到的结果为

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

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

相关文章

golang学习笔记(内存逃逸分析)

golang的内存逃逸 逃逸分析&#xff08; Escape analysis&#xff09; 是指由编译器决定内存分配的位置&#xff0c; 不需要程序员指定。 函数中申请一个新的对象。 如果分配在栈中&#xff0c; 则函数执行结束可自动将内存回收&#xff1b;如果分配在堆中&#xff0c; 则函数…

微软开源 MS-DOS「GitHub 热点速览」

上周又是被「大模型」霸榜的一周&#xff0c;各种 AI、LLM、ChatGPT、Sora、RAG 的开源项目在 GitHub 上“争相斗艳”。这不 Meta 刚开源 Llama 3 没几天&#xff0c;苹果紧跟着就开源了手机端大模型&#xff1a;CoreNet。 GitHub 地址&#xff1a;github.com/apple/corenet 开…

网络安全前置知识-linux操作系统

计算机体系结构 计算机发展历史 计算机组成 计算机硬件组成 1. CPU 原文链接&#xff1a;https://blog.csdn.net/stone_fall/article/details/88414017 一条指令的执行过程分为以下5个周期&#xff1a; 取指令周期&#xff08;Instruction Fetch&#xff0c;IF&#xff…

【Cpp】类和对象

标题&#xff1a;【Cpp】类和对象 水墨不写bug 正文开始&#xff1a; &#xff08;一&#xff09;面向过程与面向对象 面向过程和面向对象是两种不同的编程思想。 面向过程指的是将程序分解成多个步骤&#xff0c;每个步骤都是一个独立的函数&#xff0c;通过函数之间的调用实…

使用OneAPI创建LLM访问API Key

OneAPI 是一个能替代 springdoc-openapi/Swagger 的 API 生产工具&#xff0c;既不需要修改后端代码&#xff0c;也不需要启动应用。 也支持导出 OpenAPI 3.0 协议数据&#xff0c;方便在其他工具中消费。 前面我们介绍了LobeChat需要配置LLM的API访问Key&#xff0c;今天你可…

《架构即未来》读后感

目录 一、引言 二、《架构即未来》读后感 1、主题的简要介绍 2、我的看法和理解 3、作者的优点和传递的信息 4、思想如何适用于当今社会 三、《架构即未来》对于企业发展的影响具体体现在哪些方面&#xff1f; 一、引言 任何一个持续成长的公司最终都需要解决系统、组织…

【讲解下如何解决一些常见的 Composer 错误】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分&#xff0c;它主要用于处理企业内部文件向外部传输的流程&#xff0c;确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括&#xff1a; 1、防止数据泄露&#xff1a;通过严格的审批流程和安全策略&…

【强训笔记】day7

NO.1 思路&#xff1a;双指针模拟&#xff0c;begin表示最长数字字符串最后一个字符&#xff0c;而len表示数字字符串的长度&#xff0c;i用来遍历&#xff0c;如果为数字&#xff0c;那么定义j变量继续遍历&#xff0c;直到不为数字&#xff0c;i-j如果大于len&#xff0c;就…

LabVIEW机械臂控制与图像处理示教平台

LabVIEW机械臂控制与图像处理示教平台 随着工业自动化技术的快速发展&#xff0c;工业机器人在制造业中的应用越来越广泛&#xff0c;它们在提高生产效率、降低人工成本以及保证产品质量方面发挥着重要作用。然而&#xff0c;传统的工业机器人编程和操作需要专业知识&#xff…

深入理解vector 【C++】

一、vector的介绍&#xff1a; 1.vector是表示可变大小的顺序容器。 2.就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&am…

【C++STL详解(五)】--------list的介绍与使用

目录 前言 一、list的介绍 二、list的使用 Ⅰ.默认成员函数 1、构造函数 2、赋值重载 3、析构函数 Ⅱ、容量 1.size() Ⅲ、迭代器与遍历 1.beginend (正向迭代器) 2.rbeginrend (反向迭代器) 3.front 4.back Ⅳ、增删查改 1.push_front 2.pop_front 3.push_b…

Matlab|二阶锥松弛在配电网最优潮流计算中的应用

目录 一、主要内容 二、部分代码 三、程序代码 四、下载链接 一、主要内容 最优潮流计算是电网规划、优化运行的重要基础。首先建立了配电网全天有功损耗最小化的最优潮流计算模型&#xff1b;其次结合辐射型配电网潮流特点建立支路潮流约束&#xff0c;并考虑配电网中的可…

平平科技工作室-Python-步步惊心

一.准备图片 放在 文件夹取名为imgs,分为两种boys和girls 二.编写程序 首先创建一个文件名为index.py 其次编写程序 # coding:utf-8 import sys, time, easygui, os, pygame from pygame.locals import * pygame.init() # 设置窗口显示位置、大小、颜色、标题 os.environ[ …

Go语言的包管理工具go mod与之前的GOPATH有什么区别?

在深入探讨Go语言的包管理工具go mod与之前的GOPATH之间的区别之前&#xff0c;我们首先需要理解这两个概念各自的作用和背景。 GOPATH时代 在Go语言早期版本中&#xff0c;GOPATH是一个非常重要的环境变量。它告诉Go工具链在哪里查找你的Go代码、第三方库以及编译后的二进制…

C#描述-计算机视觉OpenCV(4):图像分割

C#描述-计算机视觉OpenCV&#xff08;4&#xff09;&#xff1a;图像分割 前言用 GrabCut 算法分割图像实例展示 前言 本文中如果有什么没说明的地方&#xff0c;大概率在前文中描述过了。 C#描述-计算机视觉OpenCV&#xff08;1&#xff09;&#xff1a;基础操作 C#描述-计算…

docker 指定根目录 迁移根目录

docker 指定根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装docker 26.1.03…

记一次从登录框到前台rce

接口未授权挖掘 在网站未登录的情况下&#xff0c;由于不知道后台接口。唯一办法通过js文件、路径扫描。通过这种收集方式使用burp进行批量扫描&#xff0c;分别探测GET/POST请求。观察响应包跟状态码。判断响应包&#xff0c;确定存在未授权后&#xff0c;再构造数据包。 2 突…

C++ | Leetcode C++题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minPathSum(vector<vector<int>>& grid) {if (grid.size() 0 || grid[0].size() 0) {return 0;}int rows grid.size(), columns grid[0].size();auto dp vector < vector <int>…