JSP-简化

一、引入

在介绍完JSP的概念之后,我们深感JSP页面开发的困难,但是JSP并非没有做丝毫的努力。本篇将介绍JSP的两个快捷开发手段:EL表达式与JSTL。我们已知道JSP的复杂是来自于将HTML代码与Java代码揉杂在一起,于是我们通过上述的两个手段,可在很大程度上将两种开发语言分离,下面正式开始。

二、EL表达式

EL:Expression Language,用于在jsp文件中获取数据。语法格式为${expression}。例如:在Servlet中定义了一个brands变量,通过setAttribute方法设置在域中:

package com.byhuang.jsp;import com.byhuang.pojo.Brand;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@WebServlet("/el-demo")
public class ELDemoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get...");List<Brand> brands = new ArrayList<>();brands.add(new Brand("三只松鼠", "三只松鼠", 100, "三只松鼠,好吃不上火", 1));brands.add(new Brand("优衣库", "优衣库", 10, "优衣库,舒服", 0));brands.add(new Brand("小米", "小米", 1000, "小米", 1));req.setAttribute("brands", brands);req.getRequestDispatcher("/el-demo.jsp").forward(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}

那么在JSP中我们就可以通过${brands}来取出这个变量。

<html>
<head><title>EL-demo</title>
</head>
<body>${brands}
</body>
</html>

这样我们可以把brands的获取(通常是与数据库交互的业务逻辑)与brands的展示(前台页面)进行分离,使代码更加清晰。

三、JSTL

JSTL:Java Standarded Tag Library,JSP标准标签库。用标签取代JSP页面上的Java代码。

(1)JSTL的使用需要先引入依赖

        <!-- https://mvnrepository.com/artifact/jstl/jstl --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/taglibs/standard --><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>

(2) JSP代码改造,示例了条件语句(c:if)与循环语句(c:forEach)。类似于前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>EL-demo</title>
</head>
<body>${brands}<c:if test="true">true</c:if><table border="1" cellspacing="0" width="800"><tr><th>序号</th><th>品牌名称</th><th>企业名称</th><th>排序</th><th>描述</th><th>状态</th></tr><c:forEach items="${brands}" var="brand" varStatus="status"><tr><td>${status.count}</td><td>${brand.name}</td><td>${brand.entName}</td><td>${brand.order}</td><td>${brand.remark}</td><c:if test="${brand.status == 1}"><td>启用</td></c:if><c:if test="${brand.status == 0}"><td>禁用</td></c:if></tr></c:forEach></table>
</body>
</html>
四、总结

至此,我们利用EL与JSTL简化了JSP的开发,大大提升了JSP代码的可读性与易维护性。但是请读者思考,即使JSP克服了代码书写上的复杂,还存在什么问题呢?请关注下一篇文章,继续了解Java Web技术的更迭。

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

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

相关文章

Unity之物理系统

专栏的上一篇角色控制器控制角色移动跳崖&#xff0c;这一篇来说说Unity的物理系统。 本篇小编还要带大家做一个碰撞检测效果实例&#xff0c;先放效果图&#xff1a;流星撞击地面产生爆炸效果 一、Rigidbody 我们给胶囊添加了 Rigidbody 组件它才有的重力&#xff0c;我们来…

逸学Docker【java工程师基础】3.3Docker安装nacos

docker pull nacos/nacos-server docker network create nacos_network #创建容器网络 docker run -d \ --name nacos \ --privileged \ --cgroupns host \ --env JVM_XMX256m \ --env MODEstandalone \ --env JVM_XMS256m \ -p 8848:8848/tcp \ -p 9848:9848…

图解拒付平台:如何应对用户的拒付

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;5&#xff09;篇。 本章主要讲清楚支付系统中拒付涉及的基本概念&#xff0c;产品架构、系统架构&#xff0c;以及一些核心的流程和相关领域模型、状态机设计等。 1. 前言 拒付在中国比较少见&#xff0c;但…

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

【算法题】53. 最大子数组和

题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#x…

把握现货黄金的基本操作技巧

在投资市场这个大舞台上&#xff0c;有各种各样的投资产品供投资者选择&#xff0c;其中黄金作为一种重要的投资资产&#xff0c;一直受到广大投资者的青睐。然而&#xff0c;黄金交易并非易事&#xff0c;需要掌握一定的操作技巧。那么&#xff0c;如何才能把握住现货黄金的操…

vue3-条件渲染

条件渲染 v-if v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染。 <h1 v-if"awesome">Vue is awesome!</h1>v-else 你也可以使用 v-else 为 v-if 添加一个“else 区块”。 <button click"awesome !awesom…

YOLOv5改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

一、本文介绍 本文给大家带来的改进机制是TransNeXt特征提取网络,其发表于2023年的12月份是一个最新最前沿的网络模型&#xff0c;将其应用在我们的特征提取网络来提取特征&#xff0c;同时本文给大家解决其自带的一个报错&#xff0c;通过结合聚合的像素聚焦注意力和卷积GLU&…

CSS-Flex布局

文章目录 一、Flex布局总结 一、Flex布局 Flex布局是一种弹性盒子布局&#xff0c;适用于构建响应式的页面布局 Flex布局是一种弹性盒子布局&#xff0c;适用于构建响应式的页面布局。以下是一些Flex布局的技巧&#xff1a; 使用flex属性设置弹性容器的布局方式&#xff0c;常…

《绝地求生》职业选手画面设置推荐 绝地求生画面怎么设置最好

《绝地求生》画面怎么设置最好是很多玩家心中的疑问&#xff0c;如果性能不是问题无疑高特效显示效果更好&#xff0c;但并不是所有画面参数都利于战斗&#xff0c;今天闲游盒带来分享的《绝地求生》职业选手画面设置推荐&#xff0c;赶紧来看看吧。 当前PUBG的图像设置的重要性…

彝族民居一大特色——土掌房

彝族民居一大特色——土掌房在彝区&#xff0c;各地、各支系传承的居室建筑形式是多种多样的&#xff0c;并与当地的居住习俗有密切关联&#xff0c;从村寨的聚落到住宅的地址&#xff1b;从房间的分置到什物的堆放&#xff1b;从建筑结构到民居信仰和禁忌&#xff0c;都表现出…

Day 24 回溯算法 1

77. 组合 代码随想录 1. 思路 典型的回溯算法&#xff0c;分为以下几步&#xff1a; &#xff08;1&#xff09;确定递归函数 这里递归函数就是每一层的遍历&#xff0c;起名为backtrace。这里遍历需要用for循环的起始终止位置&#xff0c;因此参数为n和k &#xff08;2&am…

Linux知识(未完成)

一、Linux 1.1 Linux 的应用领域 1.1.1 个人桌面领域的应用 此领域是 Linux 比较薄弱的环节但是随着发展&#xff0c;近几年 linux 在个人桌面领域的占有率在逐渐提高 1.1.2 服务器领域 linux 在服务器领域的应用是最高的 linux 免费、稳定、高效等特点在这里得到了很好的…

2024年1月15日

1、桌面应用用到系统本身api 1. 文件系统&#xff08;File System&#xff09;&#xff1a; 使用 Node.js 的 fs 模块来进行文件系统操作&#xff0c;读写文件&#xff0c;创建文件夹等。 2. 操作系统信息&#xff08;Operating System Information&#xff09;&#xff1a; 使…

探寻爬虫世界01:HTML页面结构

文章目录 一、引言&#xff08;一&#xff09;背景介绍&#xff1a;选择爬取51job网站数据的原因&#xff08;二&#xff09;目标与需求明确&#xff1a;爬取51job网站数据的目的与用户需求 二、网页结构探索&#xff08;一&#xff09;51job网页结构分析1、页面组成&#xff1…

【Nuxt3】nuxt3目录文件详情描述:.nuxt、.output、assets、public、utils(一)

简言 nuxt3的中文网站 上次简单介绍了nuxt3创建项目的方法和目录文件大概用处。 这次详细说下.nuxt、.output、assets、public、utils五个文件夹的用处。 正文 .nuxt Nuxt在开发中使用.nuxt/目录来生成你的Vue应用程序。 为了避免将开发构建的输出推送到你的代码仓库中&…

如何在原型中实现继承和多态

在JavaScript中&#xff0c;我们可以通过原型链来实现继承。以下是如何在原型中实现继承的例子&#xff1a; // 定义一个动物原型 var Animal function() {}; Animal.prototype.move function() { console.log(‘This animal can move.’); }; // 定义一个狗的原型&#xf…

PageHelper分页功能的简单实现

PageHelper是一个开源的Java分页插件&#xff0c;可以帮助开发者在MyBatis、Hibernate等持久层框架中实现分页功能。它提供了一系列的静态方法&#xff0c;可以简化分页查询的操作。 使用PageHelper进行分页&#xff0c;首先需要在项目中引入PageHelper的依赖&#xff0c;然后…

opencv的SIFT样例(CPP/python)

Python代码的实现&#xff1a; import cv2 import numpy as np import time import os def main():images os.listdir(./images/)pre_image cv2.imread(./images/1.jpg, 0)print("images:",images)# 初始化 SIFT 和 SURFsift cv2.xfeatures2d.SIFT_create()# sur…

博客摘录「 性能优化:__builtin_expect详解」2024年1月15日

性能优化&#xff1a;__builtin_expect详解___builtin_expect对性能的影响-CSDN博客https://blog.csdn.net/chudongfang2015/article/details/75710848 #define LIKELY(x) __builtin_expect(!!(x), 1) __builtin_expect宏定义中为何写成!!(x)&#xff1f; 首先__buildin_expec…