java值jsp语法笔记

devtools/2024/9/20 1:22:19/ 标签: web安全

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.ppmy.cn/devtools/49725.html

相关文章

数据库原理(概论)——(1)

数据库概述 一、数据库的四个基本概念 1.数据 描述事物的符号记录 2.数据库 数据库是长期存储在计算机内的、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储、具有较小的冗余度、较高的数据独立性和易扩展性&#xff0c;并可为各种用户共…

在npm发布自己的组件包

目录 前言 正文 npm和git的对比 Node环境的配置 具体发布步骤 ※※需要注意的是 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ni…

使用QT制作QQ登录界面

mywidget.cpp #include "mywidget.h"Mywidget::Mywidget(QWidget *parent): QWidget(parent) {/********制作一个QQ登录界面*********************/this->resize(535,415);//设置登录窗口大小this->setFixedSize(535,415);//固定窗口大小this->setWindowTi…

JavaScript快速入门系列-3(函数基础)

第三章:函数基础 3.1 函数定义与调用3.1.1 函数声明3.1.2 函数表达式3.2 参数与返回值3.3 匿名函数与立即执行函数表达式(IIFE)3.3.1 匿名函数3.3.2 立即执行函数表达式3.4 箭头函数3.4.1 箭头函数与this3.5 函数的高级话题3.5.1 闭包3.5.2 函数柯里化3.5.3 高阶函数小结在Jav…

操作系统复习

一、操作系统的定义 操作系统(OS&#xff0c;Operating System)是配置在计算机硬件上的第一层软件&#xff0c;是对硬件系统的首次扩充。它在计算机系统中占据了重要地位&#xff0c;汇编程序、编译程序、数据库管理系统等系统软件&#xff0c;都依赖于操作系统的支持&#xff…

centos7下安装redis

目录 一&#xff1a;软件版本 二&#xff1a;安装 一&#xff1a;软件版本 redis版本&#xff1a;redis-6.0.7 gcc版本&#xff1a;gcc-9.2.0 默认下centos7下gcc是4.8的需要升级&#xff0c;因为redis6.0需要gcc5.3以上 二&#xff1a;安装 1&#xff1a;安装gcc wget…

文心一言使用体验(彩色图例)

一、初识文心一言 在我日常生活和工作中&#xff0c;信息检索和处理一直是一个重要的环节。无论是学术研究、市场分析&#xff0c;还是个人兴趣探索&#xff0c;快速准确地获取信息都是至关重要的。然而&#xff0c;随着互联网信息的爆炸式增长&#xff0c;如何高效地从中筛选出…

PythonWeb项目-Django+vue宾馆管理系统功能介绍

本项目源码&#xff1a;基于Python的Django-vue宾馆管理系统源码-参考文档资源-CSDN文库 项目关键技术 开发工具&#xff1a;Pycharm 编程语言: Python 数据库: MySQL5.7 框架&#xff1a;Django、vue 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;Django、vue、MYSQL…

Python - 处理电子书的库

kindleunpack&#xff1a; 转换azw3为epub https://github.com/kevinhendricks/KindleUnpackkindlegen 转换epub为mobiOpenBookPublishers https://github.com/orgs/OpenBookPublishers/repositories?qsort%3Astarsepub2pdf : converting fixed-layout manga/comic files(epub…

【Spring Boot实现网页会话(Session )】

文章目录 前言什么是网页会话&#xff08;Session&#xff09;Spring Boot 中的 Session 管理Session 的创建与管理Session 的数据存储使用示例 前言 会话管理允许服务器在多次HTTP请求之间保持用户的状态信息&#xff0c;以便用户可以进行认证、保持登录状态等操作。 什么是…

Vue24-内置指令01:v-text指令

一、我们学过的指令 二、v-text v-text把所有的字符串当成文本去解析&#xff0c;所以不能解析html标签。 三、小结 所以&#xff0c;插值语法用的多&#xff01;灵活

欢乐钓鱼大师保姆级教程,云手机辅助攻略解析!

在这份攻略中&#xff0c;我们将为大家详细介绍如何在《欢乐钓鱼大师》中快速提升钓鱼技能和游戏进展&#xff0c;避免常见的新手误区和不必要的资源浪费。无论是钓鱼点的选择、装备的合理使用还是技能的优化&#xff0c;我们都会一一为您详细解析&#xff0c;帮助您成为一名优…

redis清空list

redis list清空 要清空Redis中的list&#xff0c;您可以使用LTRIM命令。Redis Ltrim 对一个列表进行修剪(trim)&#xff0c;就是说&#xff0c;让列表只保留指定区间内的元素&#xff0c;不在指定区间之内的元素都将被删除。 下标 0 表示列表的第一个元素&#xff0c;以 1 表示…

数据结构:顺序栈

目录 1.什么是顺序栈&#xff1f; 2.顺序栈的基本操作和应用 3.包含头文件 4.结点设计 5.接口函数定义 6.接口函数实现 什么是顺序栈&#xff1f; 顺序栈&#xff08;Sequential Stack&#xff09;是一种使用数组来实现的栈数据结构。栈是一种后进先出&#xff08;Last In Firs…

Git 基础操作(一)

Git 基础操作 配置Git 安装完Git后&#xff0c;首先要做的事情是设置你的 用户名 和 e-mail 地址。这样在你向仓库提交代码的时候&#xff0c;就知道是谁提交的&#xff0c;以及提交人的联系方式。 配置用户名和邮箱 使用git config [--global] user.name "你的名字&qu…

opencv实战小结-银行卡号识别

实战1-银行卡号识别 项目来源&#xff1a;opencv入门 项目目的&#xff1a;识别传入的银行卡照片中的卡号 难点&#xff1a;银行卡上会有一些干扰项&#xff0c;如何排除这些干扰项&#xff0c;并且打印正确的号码是一个问题 最终效果如上图 实现这样的功能需要以下几个步骤…

文字悬停效果

文字悬停效果 效果展示 CSS 知识点 CSS 变量使用回顾-webkit-text-stroke 属性的运用与回顾 页面整体结构实现 <ul><li style"--clr: #e6444f"><a href"#" class"text">First</a></li><li style"--cl…

Hexapod C-887使用手册 -- 4,5,6

4 - 拆包 小心拆包C-887 根据合同和发货注意比较发货范围的内容&#xff1a; 检查危险符号的内容。如果任何零件损坏或缺失&#xff0c;立即联系客服部门。 保存所有包装材料&#xff0c;以防产品需要返厂。 5 - 安装 本章中 安装一般注意 安装PC软件 确保通风 接地C-…

从零实现ChatGPT:第三章实现大型语言模型(1)

准备深入学习transformer&#xff0c;并参考一些资料和论文实现一个大语言模型&#xff0c;顺便做一个教程&#xff0c;今天是第三部分。 本系列禁止转载&#xff0c;主要是为了有不同见解的同学可以方便联系我&#xff0c;我的邮箱 fanzexuan135163.com 实现大型语言模型 这…

Python实现逻辑回归与判别分析--西瓜数据集

数据 数据data内容如下&#xff1a; 读取数据&#xff1a; import numpy as np import pandas as pd data pd.read_excel(D:/files/data.xlsx) 将汉字转化为01变量&#xff1a; label [] for i in data[好瓜]:l np.where(i 是,1,0)label.append(int(l)) data[label] lab…