一文带你掌握JSP基础知识

news2024/11/16 21:35:30

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:一文带你掌握JSP基础知识
更多内容点击👇
       IDEA创建Java Web项目

文章目录

      • 脚本程序
      • JSP程序注释
      • JSP表达式
      • JSP声明
      • JSP指令
      • JSP行为
      • JSP隐含对象

在上一篇中,我们学了用IDEA工具创建JAVA Web项目,创建后,生成了一个jsp文件,那么本文就根据以IDEA集成了Tomcat服务的基础来讲解JSP基础知识。
在这里插入图片描述

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

脚本程序的语法格式:

<% 代码片段 %>

或者,您也可以编写与其等价的XML语句,就像下面这样:

<jsp:scriptlet>
   代码片段
</jsp:scriptlet>

任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

下面给出一个示例:

<html>
	<head><title>Hello World</title></head>
	<body>
		Hello World!<br/>
		<%
			out.println("Your IP address is " + request.getRemoteAddr());
		%>
	</body>
</html>

注意:请确保Apache Tomcat已经成功部署到IDEA软件中,具体的部署方法可以参看前面一篇博文:IDEA创建Java Web项目

在这里插入图片描述

点击上图中的三角形运行按钮后得到以下结果:

在这里插入图片描述

JSP程序注释

项目开发中必须对代码的功能进行详细的说明,说明往往需要通过注释结构来进行。在JSP程序开发中,由于需要在HTML代码中嵌入Java代码,因此可以直接使用Java中的注释与HTML注释进行说明。其中Java的注释内容属于隐式注释,不会发送到客户端浏览器;而HTML注释属于显式注释,会发送到客户端浏览器。
除了以上的两种注释以外,在JSP中又提供了另外一种隐式注释,结构为“<%-- 注释内容 --%>”,此注释需要定义在Scriptlet代码之外。

程序示例:JSP程序注释定义

<html>
<head>
    <title>$Title$</title>
</head>
<body>
Hello World!<br/>
<%--此为JSP中才可以使用的注释,为隐式注释,不会发送到客户端浏览器中--%>
<%
    out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>

不同情况下使用注释的语法规则:

语法描述
<%-- 注释 --%>JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<!-- 注释 -->HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<%代表静态 <%常量
%>代表静态 %> 常量
\’在属性中使用的单引号
\"在属性中使用的双引号

JSP表达式

计算Java表达式的值,Java表达式由数据和运算符组成的式子,就是Java表达式,JSP表达式得到的结果转换成字符串,并在jsp页面中表达式的位置进行显示。

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

jsp表达式语法结构:

<%=Java表达式 %>

同样,您也可以编写与之等价的XML语句:

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

jsp表达式注意事项:

  • 1)<%=和%>是一个完整的符号,中间不能有空格
  • 2)表达式必须能求出值

程序示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JSP</title>
	</head>
	<body>
		<p>
		   今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
		</p>
	</body> 
</html> 

运行结果:

今天的日期是: 2022-12-5 18:40:07

JSP声明

就是在jsp页面中声明Java方法或者Java变量。一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。

语法结构:

<%! Java代码 %>

或者,您也可以编写与其等价的XML语句,就像下面这样:

<jsp:declaration>
   代码片段
</jsp:declaration>

注意:
  1)<%!和%>是一个完整的符号,符号中间不能有空格
  2)声明的语法和在Java语言中声明变量和方法是一样的
  3)在页面中声明的变量和方法,在整个页面内都有效

程序示例:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

jsp声明变量个scriptlet变量的区别:

  • jsp声明的变量是全局变量,会被多线程共享。
  • scriptlet申明的变量是局部变量,只在当前页面中有效果,不会被多线程共享。

JSP指令

在编译期间的命令,用来设置与整个jsp页面相关的属性,不会直接产生任何可见的输出
可以通过page指令设置jsp的脚本语言、设置jsp的编码格式、在jsp中引入其它的java类或者包
可以通过include指令引入其它的java代码等

jsp指令主要有3种:page指令、include指令、taglib指令

指令描述
<%@ page … %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %>包含其他文件
<%@ taglib … %>引入标签库的定义,可以是自定义标签

jsp指令的语法结构:

写法一:
   <%@ 指令名称 属性1=“属性值1” 属性2=“属性值2” … 属性n=“属性值n” %>

写法二:
  <%@ 指令名称 属性1=“属性值1” %>
   <%@ 指令名称 属性2=“属性值2” %>
   …
   <%@ 指令名称 属性n=“属性值n” %>

page指令:页面指令,用来定义整个jsp页面的一些属性和这些属性的值
page指令的属性可以定义文件类型、定义需要导入的包、定义错误页面的指定、定义页面编码、定义脚本语言
page指定的作用对整个JSP页面有效,跟书写位置无关,可以在页面中的任意位置存在,一般写在页面鹅最前面
page指令中除了import属性可以出现多次,其它的属性都只能出现一次
page指令的每一个属性完成的功能不同,指令属性对大小写敏感

include指令:在jsp页面静态插入一个文件,被插入的文件可以是jsp页面、HTML页面、文本文件或者一段Java代码。

include指令语法结构

<%@ include file = "文件名" %>

注意:include执行不能传递参数

Taglib指令:JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

等价的XML语法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

JSP行为

JSP行为标签使用XML语法结构来控制servlet引擎。它能够动态插入一个文件,重用JavaBean组件,引导用户去另一个页面,为Java插件产生相关的HTML等等。

行为标签只有一种语法格式,它严格遵守XML标准:

<jsp:action_name attribute="value" />

行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:

语法描述
jsp:include用于在当前页面中包含静态或动态资源
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值
jsp:getProperty将 JavaBean组件的值插入到 output中
jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象
jsp:element动态创建一个XML元素
jsp:attribute定义动态创建的XML元素的属性
jsp:body定义动态创建的XML元素的主体
jsp:text用于封装模板数据

JSP隐含对象

JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表:

对象描述
requestHttpServletRequest类的实例
responseHttpServletResponse类的实例
outPrintWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page类似于Java类中的this关键字
exceptionexception类的对象,代表发生错误的 JSP 页面中对应的异常对象

request对象

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false’属性来轻松关闭缓存。

JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。

下表列出了我们将会用来输出boolean,char,int,double,String,object等类型数据的重要方法:

方法描述
out.print(dataType dt)输出Type类型的值
out.println(dataType dt)输出Type类型的值然后换行
out.flush()刷新输出流

session对象

session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

session对象用来跟踪在各个客户端请求间的会话。

application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

以下是config对象的使用方法,不是很重要,所以不常用:

config.getServletName();
它返回包含在元素中的servlet名字,注意,元素在 WEB-INF\web.xml 文件中定义。

pageContext 对象

pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。

PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。

其中一个重要的方法就是 removeAttribute(),它可接受一个或两个参数。比如,pageContext.removeAttribute(“attrName”) 移除四个scope中相关属性,但是下面这种方法只移除特定 scope 中的相关属性:

pageContext.removeAttribute(“attrName”, PAGE_SCOPE);

page 对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

exception 对象

exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

赋能建筑建材企业物流网络内外联通,B2B交易管理系统打造行业智慧供应链

数据显示&#xff0c;在疫情和行业转型升级的双重压力下&#xff0c;行业中竞争力不强、商业模式老套的建筑建材企业在疫情中产值下降甚至被淘汰出局。随着数字经济的兴起&#xff0c;传统建筑建材产业的发展也带来了巨大的变革。 据有关数据分析指出&#xff0c;数字化已经成…

数据之道读书笔记-08打造“清洁数据”的质量综合管理能力

数据之道读书笔记-08打造“清洁数据”的质量综合管理能力 越来越多的企业应用和服务都基于数据而建&#xff0c;数据质量是数据价值得以发挥的前提。例如企业运营效率主要依赖于数据获取的准确性和及时性&#xff0c;企业客户关系管理系统中的错误或不完整数据将导致客户沟通不…

安卓讲课笔记6.1 共享参数

文章目录零、本讲学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;数据存储&#xff08;二&#xff09;共享参数1、共享参数概述2、利用共享参数读写文件步骤&#xff08;三&#xff09;案例演示&#xff1a;多窗口共享数据1、创建安卓应用2、准备图片素材3、主界面…

【LeetCode每日一题】——141.环形链表

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 链表 二【题目难度】 简单 三【题目编号】 141.环形链表 四【题目描述】 给…

【gbase8a】docker搭建gbase8a,详细【图文】

docker搭建gbase8a安装docker安装GBase 8a查询安装的版本拉取镜像启动进入容器创建用户dbever测试安装docker 其中具有docker的搭建 搭建docker&#xff0c;docker搭建达梦数据库&#xff0c;详细【图文】 https://blog.csdn.net/weixin_44385419/article/details/127738868 d…

Spark 数据倾斜调优10策

一、数据倾斜概述 1.1 什么是数据倾斜 对Hadoop、Spark、Flink这样的大数据系统来讲&#xff0c;数据量大并不可怕&#xff0c;可怕的是数据倾斜。 何谓数据倾斜&#xff1f;数据倾斜指的是&#xff0c;并行处理的数据集中&#xff0c;某一部分&#xff08;如Spark或Kafka的…

@SpringBootApplication中的注解

Target(ElementType.TYPE)&#xff1a;指示适用注释类型的上下文&#xff08;即注解的作用目标&#xff09;这里是接口、类、枚举、注解 Retention(RetentionPolicy.RUNTIME)&#xff1a;指示具有注释类型的注释要保留多长时间&#xff0c;这里注解是将被JVM保 留,所以在运行…

无法安装64位版本的office,因为在您的PC上找到以下32位程序

无法安装64位版本的office,因为在您的PC上找到以下32位程序: 请卸载所有32位office程序&#xff0c;然后重试安装64位office。如果想要安装32位office&#xff0c;请运行32位安装程序。 那为什么会出现这种情况呢&#xff1f; 首先&#xff0c;我们要知道我们的电脑是32位的还…

9个发展您的B2B业务的LinkedIn营销策略

没有比在 LinkedIn 上与其他公司建立联系更好的地方了。您可以与数以百万计的品牌和专业人士建立联系并发展您的业务。 您可以尝试多种不同的 B2B LinkedIn营销策略&#xff0c;以便与您的受众建立联系并将他们转变为您的客户。 事实上&#xff0c;根据公司自己的研究&#x…

Vue3.2中的setup语法糖(易懂)

简介 在vue3中删除了vue2中的data函数&#xff0c;因此&#xff0c;vue3.0要在template中使用某些变量就必须在最后return出来&#xff0c;多次声明变量&#xff0c;不太方便。而在vue3.2版本之后&#xff0c;新增了setup语法糖。 直接在script标签中添加setup属性就可以直接使…

Arduino开发实例-DIY电能表

DIY电能表 在本文中,将展示如何制作一个基于 Arduino 的功率和电能表。应用使用 INA219 电流传感器测量电流、功率和能耗,并将其显示在 OLED 显示屏上。 可以在 OLED 显示屏上查看您的电压、电流、功率和能量数据。 1、INA219介绍 INA219 电流传感器是一款支持 I2C 的基于…

Unity手机游戏发热发烫优化指南与技巧

Unity手机游戏发热发烫优化指南与技巧 很多小伙伴做完游戏后&#xff0c;发布到Android,运行&#xff0c;游戏很流畅&#xff0c;也不卡顿&#xff0c;但是跑一会游戏,手机就发热,发烫。客户提出需求&#xff0c;能否让它不发烫? 本文从以下3方面来分析手机发烫的问题&#x…

如何用一颗芯片实现5V转正负12V

有时在一些运算放大电路中我们需要同时有正电源和负电源&#xff0c; 但是我们输入一般只有一个正电源&#xff0c;比如我们输入的电源是5V&#xff0c;但是需要将5V转换成正负12V 5V转12V的话我们可以用BOOST电路进行升压&#xff0c;电路图如下 而5V转-12V的话一般有负压电荷…

osgEarth示例分析——osgearth_tracks

前言 osgearth_tracks示例&#xff0c;演示了所有图标沿着路径进行移动(路径是不可见的)。 执行效果 执行命令&#xff1a;osgearth_tracksd.exe earth_image\world.earth 右下角的控制面板功能&#xff1a; Declutter 是否开启 【清理器】 功能。 即当两个图标靠近时&…

HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

今日财富杂志今日财富杂志社今日财富编辑部2022年第21期目录

经济纵横 资产证券化税收政策的国际比较与启示 李依莎; 1-3 中小企业知识产权保护的困境 程诗鸿; 4-6 县级政府在优化营商环境中的作用 李晓春; 7-9《今日财富》投稿&#xff1a;cnqikantg126.com 地域文化背景下论房地产经济发展的区域差异 周莹; 10-12 国…

这把联网智能门锁体验感A+

如果来一次古人与今人的谈话&#xff0c;那一定离不开的话题就是“智能设备”。智能手机、智能电脑、智能手表更新换代如此之快&#xff0c;联网智能门锁亦是如此。对于用户而言&#xff0c;使用智能设备最重要的就是“体验感”了&#xff0c;小编为大家强势推荐中科易安QY-170…

开源多波束前视声呐目标识别数据集

鉴于水下实验的高成本&#xff0c;高专业性&#xff0c;高复杂度的情况&#xff0c;开源水下数据集一直较为稀少。拥有数据的研究机构基本上也只限于自身使用。虎鲸开源计划致力于构建一个开放的实验平台&#xff0c;实验场地、硬件、软件、数据均在开源开放的范畴内。虎鲸开源…

Spring Cloud(十四):微服务灰度发布 --- Discovery

灰度发布微服务全链路灰度全链路灰度设计思路 标签路由节点打标流量染色分布式链路追踪 ThreadLocal流量治理平台 Nacos 配置中心 全链路灰度实现Discovery使用 一、父pom引入Discovery二、Gateway 引入 — 网关 discovery-plugin-strategy-starter-gateway三、微服务 引入 — …

[附源码]JAVA毕业设计论文管理系统(系统+LW)

[附源码]JAVA毕业设计论文管理系统&#xff08;系统LW&#xff09; 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…