JSP

文章目录

  • JSP
    • 1. 快速入门
    • 2. page 指令
    • 3. 三种常用脚本
      • 声明脚本
      • 表达式脚本
      • 代码脚本
    • 4. 注释
    • 5. 内置对象
    • 6. 域对象
    • 7. 请求转发标签
    • 8. EL 表达式
      • 快速入门
      • EL运算操作
      • EL的11个隐含对象
      • 四个特定域变量
    • 9. JSTL
      • 快速入门
      • <c:set />
      • <c:if />
      • \<c:choose> \<c:when> \<c:otherwise>
      • <c:forEach />

JSP

JSP 全称是 Java Server Pages,Java 的服务器页面,JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML。

相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,为用户提供动态数据。

相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态数据的同时,也很容易对数据进行排版。

1. 快速入门

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>hello, jsp</title></head><body><h1>JSP, 计算器</h1><%int i = 20;int j = 70;int res = i + j;out.println(i + " + " + j + " = " + res); %></body>
</html>

jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问jsp 页面。

jsp 页面本质是一个 Servlet 程序, 其性能是和 java 关联的。

第 1 次访问 jsp 页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。并 且 对 它 进 行 编 译 成 为 .class 字 节 码 程 序 。

2. page 指令

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

1)language 表示 jsp 翻译后是什么语言文件, 只支持 java

2)contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值

3)pageEncoding 属性 表示当前 jsp 页面文件本身的字符集

4)import 属性 跟 java 源代码中一样。用于导包,导类

3. 三种常用脚本

声明脚本

声明脚本的格式是: <%! 声明 java 代码 %>

作用:定义 jsp 的需要属性、方法、静态代码块和内部类等

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body>
<%!private String name = "tom";private int age = 19;private static String company;static{company = "csdn";}public String getName(){return name;}
%>
</body>
</html>

表达式脚本

表达式脚本的格式是:<%=表达式%>

表达式脚本的作用是:在 jsp 页面上输出数据

表达式脚本中的表达式不能以分号结束

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body>
<%!private String name = "tom";private int age = 19;private static String company;static{company = "csdn";}public String getName(){return name;}
%>
name = <%=name%><br/>
age = <%=age%>
</body>
</html>

代码脚本

代码脚本的语法是:<% java 代码%>

代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )

可以由多个代码脚本块组合完成一个完整的 java 语句

代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

public class Monster {private Integer id;private String name;private String skill;public Monster(Integer id, String name, String skill) {this.id = id;this.name = name;this.skill = skill;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSkill() {return skill;}public void setSkill(String skill) {this.skill = skill;}
}
<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body>
<%ArrayList<Monster> list = new ArrayList<>();list.add(new Monster(1, "牛魔王", "芭蕉扇"));list.add(new Monster(2, "蜘蛛精", "吐口水"));
%>
<table bgcolor="#f0f8ff" border="1px" width="500px"><tr><td>id</td><td>name</td><td>skill</td></tr><%for (int i = 0; i < list.size(); i++) {Monster monster = list.get(i);%><tr><td><%=monster.getId()%></td><td><%=monster.getName()%></td><td><%=monster.getSkill()%></td></tr><%}%>
</table>
</body>
</html>

4. 注释

<%--这是一行注释--%>

5. 内置对象

JSP 内置对象(已经创建好的对象, 可以直接使用),是指 Tomcat 在翻译 jsp 页面成为Servlet 后,内部提供的九大对象,叫内置对象

在JSP中,有9大内置对象可以在页面中直接使用,它们分别是:

1)request:代表客户端的请求,可以通过它获取请求参数、请求头信息等。

2)response:代表服务器对客户端的响应,可以通过它设置响应头、写入响应内容等。

3)pageContext:代表JSP页面的上下文,可以通过它获取其他内置对象、页面作用域中的属性等。

4)session:代表用户的会话,可以通过它在不同页面之间共享数据。

5)application:代表整个应用程序的上下文,可以通过它在不同用户之间共享数据。

6)out:代表输出流,可以通过它向客户端输出内容。

7)config:代表当前JSP页面的配置信息,可以通过它获取初始化参数等。

8)page:代表当前JSP页面本身,可以通过它调用页面的方法。

9)exception:代表在JSP页面中发生的异常,可以通过它获取异常信息。

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>hello, jsp</title></head><body><%//jsp 中可以使用的内置对象:不用创建,直接使用out.println("out 对象..");String age = request.getParameter("age");//response.sendRedirect("http://www.baidu.com");session.setAttribute("name", "jack");//application 等价 servlet 的 servletContextapplication.setAttribute("company", "csdn");//本页面有效pageContext.setAttribute("num1", 900);//pageout.println("page= " + page);//使用 configString pwd = config.getInitParameter("pwd");%></body>
</html>

6. 域对象

在JSP中,有四大域对象,它们分别是:page、request、session和application域。这些域对象可以用来在不同作用域中存储和共享数据,以便在整个应用程序中传递数据。

1)page域对象:page域对象是指当前JSP页面的作用域,即当前页面有效。在page域中存储的数据只能在当前页面中访问,其他页面无法访问。可以使用pageContext对象的setAttribute()和getAttribute()方法来存储和获取数据。

2)request域对象:request域对象是指客户端发起的请求的作用域,即在同一个请求周期内有效。在request域中存储的数据可以在同一个请求中的不同页面中共享和访问。可以使用request对象的setAttribute()和getAttribute()方法来存储和获取数据。

3)session域对象:session域对象是指用户会话的作用域,即在用户会话期间有效。在session域中存储的数据可以在同一个用户的不同请求中共享和访问。可以使用session对象的setAttribute()和getAttribute()方法来存储和获取数据。

4)application域对象:application域对象是指整个应用程序的作用域,即在整个应用程序生命周期内有效。在application域中存储的数据可以在整个应用程序中共享和访问。可以使用application对象的setAttribute()和getAttribute()方法来存储和获取数据。

请添加图片描述

域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存储范围

存储范围(作用域范围) pageContext < request < session < application

7. 请求转发标签

在JSP中,可以使用请求转发标签 <jsp:forward> 来将请求转发到另一个资源,比如另一个JSP页面、Servlet等。请求转发是在服务器端完成的,客户端浏览器不知道请求被转发到了另一个资源。

index.jsp 页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>首页</title>
</head>
<body><h1>这是首页</h1><jsp:forward page="target.jsp"/>
</body>
</html>

target.jsp 页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>目标页面</title>
</head>
<body><h1>这是目标页面</h1>
</body>
</html>

8. EL 表达式

EL 表达式全称:Expression Language,是表达式语言,主要用于代替 jsp 页面的表达式脚本<%=request.getAttribute(“xx”)%>

EL 表达式基本语法: ·${key1}

快速入门

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><%request.setAttribute("key", "value");
%>
key = ${key}
</body>
</html>

EL 表达式在输出 null 时,输出的是 “”

jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串

获取对象信息:

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><%Monster monster = new Monster(1, "牛魔王", "芭蕉扇");pageContext.setAttribute("monster", monster);
%>
monster = ${monster}
id = ${monster.id}
name = ${monster.name}
skill = ${monster.skill}
</body>
</html>

EL运算操作

基本语法语法:${ 运算表达式 }

关系运算:

请添加图片描述

逻辑运算:

请添加图片描述

算术运算:

请添加图片描述

empty运算:empty 运算可以判断一个数据是否为空,如果为空,返回 true,否则返回 false

以下几种情况为空:

  • 值为 null
  • 值为空串的时
  • 值是 Object 类型数组,长度为零
  • list 集合,元素个数为零
  • map 集合,元素个数为零

三元运算:表达式 1?表达式 2: 表达式 3(与java相同)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><%request.setAttribute("k1", null);request.setAttribute("k2", "");request.setAttribute("k3", new Object[]{});request.setAttribute("k4", new ArrayList<String>());request.setAttribute("k5", new HashMap<String, Object>());
%>
k1 是否为空= ${empty k1}<br/>
k2 是否为空= ${empty k2}<br/>
k3 是否为空= ${empty k3}<br/>
k4 是否为空= ${empty k4}<br/>
k5 是否为空= ${empty k5}<br/>
<%request.setAttribute("score", 90);
%>
你的成绩为: ${score >= 60 ? "及格": "不及格"}
</body>
</html>

EL的11个隐含对象

请添加图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><h1>pageContext 对象的使用</h1>
<%--
//通过 request 对象来获取和 HTTP 协议相关的数据
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或 POST)
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识
--%>
<hr/>
协议: ${ pageContext.request.scheme }<br>
服务器 ip:${ pageContext.request.serverName }<br>
服务器端口:${ pageContext.request.serverPort }<br>
工程路径:${ pageContext.request.contextPath }<br>
请求方法:${ pageContext.request.method }<br>
客户端 ip 地址:${ pageContext.request.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
<h1>使用 jsp 表达式脚本获取如上信息</h1>
ip 地址: <%=request.getRemoteHost() %> <br>
<h1>使用 el 表达式形式获取信息</h1>
<%pageContext.setAttribute("req", request);
%>
ip 地址: ${req.remoteHost} <br>
获取请求方法: ${req.method} <br>
</body>
</html>

四个特定域变量

请添加图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><h1>EL 获取四个特定域中的属性</h1>
<%pageContext.setAttribute("key1", "pageContext_key1 的值");pageContext.setAttribute("key2", "pageContext_key2 的值");request.setAttribute("key1", "request_key1 的值");session.setAttribute("key1", "session_key1 的值");application.setAttribute("key1", "application_key1 的值");
%>
<hr/>
application 的 key1: ${applicationScope.key1 }<br/>
pageContext 的 key1: ${pageScope.key1 }<br/>
session 的 key1: ${sessionScope.key1 }<br/>
request 的 key1: ${requestScope.key1 }<br/>
</body>
</html>

9. JSTL

JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库

EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面变得更佳简洁

快速入门

相关依赖:

<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>hello, jsp</title>
</head>
<body><h1>JSTL 快速入门</h1>
<c:if test="${ 10 > 2 }"><h1>10 > 2 为真</h1>
</c:if>
</body>
</html>

<c:set />

<c:set> 标签用于在JSP中设置一个变量或属性的值。它可以用来创建新的变量、重写现有变量或者设置作用域范围内的变量。等价 域对象.setAttribute(key,value);

scope 属性设置保存到哪个域

  • page 表示 PageContext 域(默认值)
  • request 表示 Request 域
  • session 表示 Session 域
  • application 表示 ServletContext 域

var 属性设置 key 是什么,value 属性设置值

<c:set scope="request" var="username" value="lxg"/>

<c:if />

<c:if />用来做 if 判断

test 属性表示判断的条件(用 EL 表达式输出)

<c:if test="${ 10 > 2 }"><h1>10 > 2 为真</h1>
</c:if>

<c:choose> <c:when> <c:otherwise>

多路判断。跟 switch … case … default 非常接近

<% request.setAttribute("money", 1000); %>
<c:choose><c:when test="${ requestScope.money > 20000 }">有钱人</c:when><c:when test="${ requestScope.money > 10000 }">比较有钱</c:when><c:when test="${ requestScope.money > 5000 }">没啥钱</c:when><c:otherwise>吃了饭,没钱租房了</c:otherwise>
</c:choose>

<c:forEach />

c:forEach 标签 用来遍历输出, 主要有 4 种形式:

  • 普通遍历输出 i 到 j

  • 遍历数组

  • 遍历 Map

  • 遍历 List

<%@ page import="com.lhs.Monster" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>hello, jsp</title>
</head>
<body><h1>c:forEach 标签</h1>
<hr/>
<h1>第 1 种遍历方式从 i 到 j</h1>
<c:forEach var="num" begin="1" end="10">${num}
</c:forEach>
<hr/><h1>第 2 种遍历方式:遍历数组</h1>
<%request.setAttribute("sports", new String[]{"打篮球", "乒乓球"});
%>
<c:forEach var="element" items="${sports}">${element}
</c:forEach>
<hr/><h1>第 3 种遍历方式:遍历 Map</h1>
<%Map<String, Object> map = new HashMap<>();map.put("key1", "北京");map.put("key2", "上海");map.put("key3", "天津");request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${requestScope.map}">Key: ${entry.key}, Value: ${entry.value}
</c:forEach>
<hr/><h1>第 4 种遍历方式:遍历 List</h1>
<%List<Monster> monsters = new ArrayList<>();monsters.add(new Monster(100, "小妖怪", "巡山的"));monsters.add(new Monster(200, "大妖怪", "做饭的"));monsters.add(new Monster(300, "老妖怪", "打扫位置的"));request.setAttribute("monsters", monsters);
%>
<c:forEach var="monster" items="${requestScope.monsters}">ID: ${monster.id}, Name: ${monster.name}, Skill: ${monster.skill}
</c:forEach>
</body>
</html>
</body>
</html>

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

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

相关文章

解决:CloudCompare中display选择Full screen后无法恢复且无法关闭

问题 在CloudCompare中display选择Full screen进行全屏显示时&#xff0c;软件各按钮失效且软件无法关闭 解决 按下F9键退出全屏模式&#xff0c;笔记本电脑可能需要FnF9同时按下。

Python语言元素之变量

程序是指令的集合&#xff0c;写程序就是用指令控制计算机做我们想让它做的事情。那么&#xff0c;为什么要用Python语言来写程序呢&#xff1f;因为Python语言简单优雅&#xff0c;相比C、C、Java这样的编程语言&#xff0c;Python对初学者更加友好。 一、一些计算机常识 在…

【人工智能】安全帽检测实验

一、项目实践步骤 图 1 构建模型和完成训练的程序图 二、实验背景 2.1数据集介绍 我们使用安全帽检测数据集。安全帽检测数据集包含数据集共包括40000张训练图像和1000张测试图像&#xff0c;每张训练图像对应 xml标注文件&#xff1a; 图 2 安全帽 数据集图像示例 业务难点…

代码随想录阅读笔记-二叉树【二叉搜索树中的搜索】

题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。 例如&#xff0c; 在上述示例中&#xff0c;如果要找的值是 5&#xff0c;但因为没有节点…

将图像转换为ASCII艺术形式

将图像转换为ASCII艺术形式 在本文中&#xff0c;我们将介绍一个使用OpenCV库将图像转换为ASCII艺术形式的简单程序。ASCII艺术是一种使用字符来表现图像的艺术形式&#xff0c;通过在终端或文本文件中显示字符的不同密度和颜色来模拟图像。这种技术已经存在了几十年&#xff…

RPA自动化小红书自动化写文以及发文!

1、视频演示 RPA自动化小红书自动写作发文 2、核心功能点 采集笔记&#xff1a;采集小红书上点赞量大于1000的爆款笔记 下载素材&#xff1a;下载爆款笔记的主图 爆款改写&#xff1a;根据爆款笔记的标题仿写新的标题以及新的文案 自动发布&#xff1a;将爆款笔记发布到小红…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变&#xff0c;近年来我国网民已突破十亿人口&#xff0c; 而且在后疫 情时代&#xff0c; 经历了疫情时期的一系列线上活动&#xff0c; 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…

Java | Leetcode Java题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isMatch(String s, String p) {int m s.length();int n p.length();boolean[][] f new boolean[m 1][n 1];f[0][0] true;for (int i 0; i < m; i) {for (int j 1; j < n; j) {if (p.charAt(j…

Servlet 的基本理解

Servlet 是JavaEE规范的一种&#xff0c;主要是为了扩展Java作为Web服务的功能&#xff0c;统一接口。由其他内部厂商如tomcat&#xff0c;jetty内部实现web的功能。如一个http请求到来&#xff1a;容器将请求封装为servlet中的HttpServletRequest对象&#xff0c;调用init()&a…

算法沉淀 —— 动态规划(子序列问题(上))

算法沉淀 —— 动态规划&#xff08;子序列问题&#xff08;上&#xff09;&#xff09; 前言一、最长递增子序列二、摆动序列三、 最长递增子序列的个数四、最长数对链 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都将基于此 1.、状态表示…

flink源码编译-job提交

1、启动standalone集群的taskmanager standalone集群中的taskmanager启动类为 TaskManagerRunner 2 打开master启动类 通过 ctrln快捷键&#xff0c;找到、并打开类&#xff1a; org.apache.flink.runtime.taskexecutor.TaskManagerRunner 3 修改运⾏配置 基本完全按照mas…

高强度专攻Promise

1. Promise介绍和基本应用 1.1 Promise是什么 1.1.1 理解 抽象表达1. 新的技术&#xff0c;ES6规范2. JS进行异步编程的新解决方案&#xff08;旧方案是单纯使用回调函数&#xff09; 具体表达 1. 语法&#xff1a;Promise是一个构造函数 2. 功能&#xff1a;promise对象用来…