java值jsp语法笔记

1 JSP注释

1.1 显示注释

显示注释会出现在生成的HTML文档中,对用户可见。

<!-- 这是一个HTML显示注释 -->

1.2 隐式注释

隐式注释不会出现在生成的HTML文档中,对用户不可见。

<%-- 这是一个JSP隐式注释 --%>

2 JSP脚本元素

2.1 局部变量和语句

使用<% %>编写局部变量和语句。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>JSP脚本元素</title>
</head>
<body><%String message = "欢迎来到JSP世界!";%><h1><%= message %></h1>
</body>
</html>

2.2 全局变量、方法和类

使用<%! %>声明全局变量、方法和类。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>JSP脚本元素</title>
</head>
<body><%!public String getMessage() {return "欢迎来到JSP世界!";}%><h1><%= getMessage() %></h1>
</body>
</html>

2.3 表达式

使用<%= %>输出表达式的值。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>JSP脚本元素</title>
</head>
<body><h1>当前时间:<%= new java.util.Date() %></h1>
</body>
</html>

2.4 JSP Include

<jsp:include>动作用于动态包含另一个JSP页面的内容。这对于避免重复代码非常有用,例如在多个页面中包含相同的头部和尾部内容。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>JSP Include</title>
</head>
<body><jsp:include page="header.jsp" /><p>这是主页面的内容。</p><jsp:include page="footer.jsp" />
</body>
</html>

3 动态包含

动态包含是指在一个JSP页面中动态地包含另一个JSP页面的内容。这种包含方式是动态的,因为被包含的页面只有在请求到来时才会被加载。

3.1 特点

  • 包含与被包含的页面是独立的,它们各自有自己的生命周期和作用域。

  • 可以出现同名变量。由于每个页面都有自己的作用域,因此即使变量名相同,也不会发生冲突。

  • 动态包含可以传递参数,这使得被包含的页面可以根据传递的参数动态地生成内容。

3.2 示例

假设我们有两个JSP页面:main.jspincluded.jsp

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Dynamic Include Example</title>
</head>
<body><h1>Main Page</h1><jsp:include page="included.jsp" />
</body>
</html>

included.jsp

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

在这个例子中,当用户访问 main.jsp 时,服务器会动态地包含 included.jsp 的内容。

4 四大作用域

在JSP中,有四种不同类型的作用域,它们决定了变量的生命周期和可见性。

4.1 Page作用域

  • 生命周期:仅限于当前页面。

  • 可见性:只在当前页面内可见。

  • 当页面跳转时,Page作用域内的变量将失效。

4.2 Request作用域

  • 生命周期:一次HTTP请求。

  • 可见性:在整个请求处理过程中可见,包括转发和包含操作。

  • 超链接跳转后,Request作用域内的变量仍然有效。

4.3 Session作用域

  • 生命周期:一次用户会话。

  • 可见性:在整个用户会话期间可见。

  • 当用户关闭浏览器或会话超时后,Session作用域内的变量将失效。

4.4 Application作用域

  • 生命周期:整个Web应用程序的生命周期。

  • 可见性:在整个Web应用程序中可见。

  • 只有在应用程序重启后,Application作用域内的变量才会失效。

4.5 示例代码

使用不同作用域的变量

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scope Example</title>
</head>
<body><% // Page作用域的变量String pageVar = "This is a page scope variable.";// Request作用域的变量request.setAttribute("requestVar", "This is a request scope variable.");// Session作用域的变量session.setAttribute("sessionVar", "This is a session scope variable.");// Application作用域的变量application.setAttribute("applicationVar", "This is an application scope variable.");%><h1>Page Scope Variable:</h1><%= pageVar %><h1>Request Scope Variable:</h1><%= request.getAttribute("requestVar") %><h1>Session Scope Variable:</h1><%= session.getAttribute("sessionVar") %><h1>Application Scope Variable:</h1><%= application.getAttribute("applicationVar") %>
</body>
</html>
​

5 案例代码

5.1 编写代码

5.1.1 后端验证

创建一个简单的用户类User.java

public class User {private String username;private String password;
​public User(String username, String password) {this.username = username;this.password = password;}
​public String getUsername() {return username;}
​public String getPassword() {return password;}
}

创建一个ServletLoginServlet.java来处理登录请求:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
​
public class LoginServlet extends HttpServlet {private User user = new User("admin", "password"); // 模拟用户数据
​protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");
​if (user.getUsername().equals(username) && user.getPassword().equals(password)) {HttpSession session = request.getSession();session.setAttribute("user", username);response.sendRedirect("index.jsp");} else {response.sendRedirect("login.jsp?error=true");}}
}

5.1.2 前端登录页面

创建一个HTML文件login.html作为登录页面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title>
</head>
<body><h1>Login</h1><form action="LoginServlet" method="post"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><input type="submit" value="Login"></form><% if (request.getParameter("error") != null) { %><p style="color: red;">Invalid username or password.</p><% } %>
</body>
</html>

5.1.3 首页显示用户名

创建一个JSP文件index.jsp作为首页:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Index</title>
</head>
<body><h1>Welcome to the Index Page</h1><% if (session.getAttribute("user") != null) { %><p>Hello, <%= session.getAttribute("user") %>!</p><% } else { %><p>Please login first.</p><% } %><a href="login.html">Login</a>
</body>
</html>

5.1.4 配置Web应用程序

  1. web.xml文件中配置LoginServlet

<web-app><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping>
</web-app>
  1. login.htmlindex.jspUser.javaLoginServlet.java文件放置在正确的目录下。

6 EL表达式(Expression Language)

EL表达式是JSP的一部分,用于简化数据访问和操作。它允许开发者在JSP页面中直接访问JavaBean属性、集合元素以及请求作用域属性。

6.1 EL表达式的基本用法

  • 使用${}来包裹要访问的变量或属性。

  • EL表达式默认从pageScope开始查找属性,如果没有找到,会继续查找requestScopesessionScopeapplicationScope

  • 如果找不到对应的属性,EL表达式会返回空字符串(而不是抛出异常)。

6.2 EL表达式获取值

  • List:通过索引访问列表元素,如${list[0]}。也可以使用${list.size()}来获取列表的大小(但注意这不是EL标准用法,应使用JSTL的<c:forEach>配合varStatus属性)。

  • Map:通过键访问映射元素,如${map.key}

  • JavaBean:通过属性名访问JavaBean属性,如${bean.propertyName}

7 JSTL(JavaServer Pages Standard Tag Library)

JSTL是一组标准的JSP标签库,用于简化JSP页面的开发。

7.1 核心标签库

  • 条件判断<c:if>标签用于条件判断,但没有else部分。

  • 循环<c:forEach>标签用于遍历集合。

7.2 格式化标签库

  • 格式化日期<fmt:formatDate>标签用于格式化日期。

7.3 使用taglib引入标签库

  • 使用<%@ taglib %>指令引入标签库,并通过prefix属性指定前缀。

7.4 案例代码

7.4.1 EL表达式示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>EL Expression Example</title>
</head>
<body><%// 设置作用域属性pageContext.setAttribute("name", "Alice");request.setAttribute("city", "New York");session.setAttribute("country", "USA");application.setAttribute("hobby", "Reading");%><p>Name: ${name}</p><p>City: ${city}</p><p>Country: ${country}</p><p>Hobby: ${hobby}</p>
</body>
</html>

7.4.2 JSTL核心标签库示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head><title>JSTL Core Tags Example</title>
</head>
<body><%// 设置作用域属性request.setAttribute("numbers", Arrays.asList(1, 2, 3, 4, 5));%><c:if test="${not empty numbers}"><ul><c:forEach items="${numbers}" var="num"><li>${num}</li></c:forEach></ul></c:if>
</body>
</html>

7.4.3 JSTL格式化标签库示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head><title>JSTL Format Tags Example</title>
</head>
<body><%Date now = new Date();pageContext.setAttribute("now", now);%><fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
</body>
</html>

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

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

相关文章

手机在网状态-手机在网状态查询-手机在网站状态接口

查询手机号在网状态&#xff0c;返回正常使用、停机、未启用/在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态 直连三大运营商&#xff0c;实时更新&#xff0c;可查询实时在网状态 高准确率-实时更新&#xff0c;准确率99.99% 接口地址&…

54.Python-web框架-Django-免费模板django-datta-able

1.Datta Able Django介绍 Detta Able Djiango是什么 Datta Able Django 是一个由AppSeed提供的开源Django管理面板&#xff0c;基于现代设计&#xff0c;为开发者提供了一流的功能和优雅的界面。它源自CodedThemes的高风格化Bootstrap 4模板——Datta Able Bootstrap Lite&…

python-基础篇-文件和异常

文章目录 文件和异常读写文本文件读写二进制文件读写JSON文件 文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#…

什么是快乐?

什么是快乐&#xff1f; What is Happiness? 1. 快乐不是追求外在的物质&#xff0c;而是内心的平静与满足。当我们学会感恩&#xff0c;懂得珍惜眼前的一切&#xff0c;心中自然会充满喜悦。快乐并非来自拥有更多&#xff0c;而是感受到已经拥有的足够。每一天都怀抱感激之情…

雅思阅读阅读技巧建议

同桌雅思网站&#xff1a; https://ielts2.itongzhuo.com/business/ielts/student/jumpIeltsQuestionList.do?sSubjects10&typeundefined 雅思阅读三步走&#xff08;up:charlie有好好学习&#xff09; 第一步&#xff1a;预读题目并画出关键词 做题顺序 顺序题&#xff…

使用dockerfile能力构建制品并打包容器

以常见的vue项目为例&#xff0c;使用如下Dockerfile # 第一阶段&#xff1a;构建应用 FROM node:18.18.1 AS builder WORKDIR /app # 复制package.json和package-lock.json到容器中&#xff08;如果需要&#xff09; COPY package*.json ./ # 安装依赖 RUN npm install # 复制…

Spark 面试题(十)

1. 简述Spark参数&#xff08;性能&#xff09;调优 &#xff1f; Spark性能调优涉及多个方面&#xff0c;包括资源分配、任务并行度、内存管理、存储策略等。以下是一些关键的Spark性能调优参数&#xff1a; spark.executor.memory&#xff1a;设置Executor的内存大小。这是最…

qt如何在linux平台上设置编译生成windows程序文件,跨平台?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「qt的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;QT本来目标就是跨平台&#xf…

Commons-Collections篇-CC4链分析

前言 因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 继承 Serializable&#xff0c;导致该方法无法序列化。 同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口&#xff0c;而CommonsCollections 3里是没有的&#xf…

hrm人力管理系统源码(从招聘到薪酬的全过程人力管控系统)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

Stringboot

一、概述 springboot是spring家族中的一个全新框架&#xff0c;用来简化spring程序的创建和开发过程。在以往我们通过SpringMVCSpringMybatis框架进行开发的时候&#xff0c;我们需要配置web.xml&#xff0c;spring配置&#xff0c;mybatis配置&#xff0c;然后整合在一起&…

django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.33).

django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.33). 一、原因分析 在新版的Django默认需要MySQL 8或更高版本&#xff0c;才能运行。 二、解决办法 1、升级mysql数据库版本 只需要将mysql版本升级到8.0&#xff0c;即可解决&#xff0c;当然这…

yum方式更新Jenkins

目的 使用yum方式更新Jenkins。 步骤 查看最新可用版本 $ yum list jenkins Last metadata expiration check: 0:03:44 ago on Fri Jun 14 06:10:01 2024. Installed Packages jenkins.noarch 2.452.1-1.1 jenkins Available Pa…

基于esp8266_点灯blinker_智能家居

文章目录 一 实现思路1 项目简介2 项目构成3 代码实现4 外壳部分 二 效果展示UI图片 一 实现思路 摘要&#xff1a;esp8266&#xff0c;mixly&#xff0c;点灯blinker&#xff0c;物联网&#xff0c;智能家居&#xff0c;3donecut 1 项目简介 1 项目效果 通过手机blinker app…

宝藏速成秘籍(3)选择排序法

一、前言 1.1、概念 选择排序法&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的基本思想是&#xff1a;每次从待排序的数组中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放在已排序部分的末尾&#xff0c;直到所有元素都排序完毕。…

Unet心电信号分割方法(Pytorch)

心血管疾病是一种常见病&#xff0c;严重影响人们的健康及日常生活。 近年来随着人们生活习惯的不断变化&#xff0c;心血管疾病对人们影响愈加明显&#xff0c;发病率呈现出逐年攀升的趋势&#xff0c;心血管疾病是中国城乡居民死亡的首要原因。心电图ECG已被广泛用于研究心跳…

光学雨量监测站:科技赋能,精准监测降水过程

TH-YJ3随着科技的不断进步&#xff0c;光学雨量监测站作为一种先进的降水监测设备&#xff0c;正逐渐在气象、水文、农业等领域发挥重要作用。光学雨量监测站以其高精度、高可靠性、实时性强的特点&#xff0c;为降水数据的收集和分析提供了强有力的支持&#xff0c;为相关领域…

Nginx负载均衡之长连接负载均衡

当客户端通过浏览器访问 HTTP 服务器时&#xff0c;HTTP 请求会通过 TCP 协议与 HTTP 服务器建立一条访问通道&#xff0c;当本次访问数据传输完毕后&#xff0c;该 TCP 连接会立即被断开&#xff0c;由于这个连接存在的时间很短&#xff0c;所以 HTTP 连接也被称为短连接。 …

Maven:The container ‘Maven Dependencies‘ references non existing library

我们在使用maven过程中&#xff0c;会遇到 “The container Maven Dependencies references non existing library”那我们如何解决呢&#xff1f; 解决方法&#xff1a;将eclipse中maven插件中“resolve dependencies from workspace projects”的选项取消 默认的本地库更改…

Lua实现自定义函数面向对象编程

本文目录 1、引言2、原理3、实例4、层析验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;已经成为一种广泛使用的编程范式…