Javaweb06-Jsp技术

Jsp技术

一.Jsp的运行原理

**概述:**JSP是Java服务器页面,既可以写静态页面代码,也可以写动态页面代码

**特点:**跨平台性,业务代码相分离,组件重用,预编译

运行原理:

image-20240523172655455
  • 客户端发生请求到Jsp文件

  • Jsp容器将Jsp文件转换为Java源文件

  • 通过编译将其转换为.class文件,它就是一个Servlet

  • jspInit()初始化(整个生命周期只会执行一次)

    -> jspService()处理请求(通过多线程方法处理,由于转换编译第一次请求慢,之后会成为常驻内存快

    ->处理完请求,响应对象由Jsp容器接收,并返回客户端

    ->Jsp对象销毁前调用jspDestroy()

二.Jsp的基本语法

**基本构成:**HTML + Java + Jsp tab

1.Jsp脚本元素

  • Jsp scriptlets

Jsp scriptlets是Jsp中存放Java代码的片段,格式:

<% 代码(变量, 程序控制语句,Jsp内置对象) %>
//存放在jspService()中的逻辑处理
  • 声明标识

声明标识用于在整个Jsp中定义全局变量和方法,格式:

<%! 定义变量和方法等 %>

解释:

1.在声明方法中定义的变量是全局变量,是因为这相当于是在.class文件转换为servlet中的全局变量和方法,是不可以进行输出。的在Jsp scriptlets代码片段中定义的变量是相当于在jspService()方法中定义的方法,因此不可以定义方法,定义的变量也是局部变量

2.通过声明标识创建的变量和方法在当前JSP页面中有效,它的生命周期是从创建开始到服务器结束;代码片段创建的变量或方法,也是在当前JSP页面有效,但它的生命周期是页面关闭后就会被销毁。

  • Jsp表达式

用于向页面输出表达式,该表达式的最终结果将会转换为字符串,格式:

<%= expression =>

2.JSP注释

  • 同Java注释一样
//   /**/  /** */
  • 隐藏注释
<%-- 注释 --%>

网页源代码只显示出了HTML注释,而没有显示JSP的注释信息。这是因为Tomcat编译JSP文件时,会将HTML注释当成普通文本发送到客户端,而JSP页面中格式为“<%-- 注释信息 --%>”的内容则会被忽略,不会发送到客户端。

  • 动态注释:将HTML代码和<% Java代码 %>结合

3.Jsp指令

  • page指令:用来对页面的某些特征进行描述
<%@ page 属性名1="" 属性名2="" %>
属性名称取值范围描述
import包名,类名指定在JSP页面翻译成的Servlet源文件中导入的包或类。 可以声明多次,一个import可以导多个包,用逗号隔开。 默认导包java.lang;javax.servlet.;javax.servlet.jsp.; javax.servlet.http.*
languagejava指定JSP页面所用的脚本语言
sessiontrue/falsetrue:该Jsp有session内置对象
isErrorPagetrue/false指定该页面是否为错误处理页面,如果为true,则该JSP内置有一个Exception对象的exception,默认情况为false
errorPageJsp相对路径指定一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面。
contentType指定当前JSP页面的MIME类型和字符编码
pageEncoding指定页面编码格式
  • include指令:在JSP页面中包含另一个JSP页面
<%@ include file="被包含文件的地址"%>

(1)被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素和JSP指令等普通JSP页面所具有的一切内容。

(2)除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。

(3)file属性的设置值必须使用相对路径,这里的file属性指定的相对路径是相对于文件,不是相对于页面,一般不以“/”开头

(4)在应用include指令进行文件包含时建议在被包含页面中将,等标签删除。

  • taglib指令:通过taglib指令标识该页面中所使用的标签库
<%@ taglib prefix="指定标签的前缀" uri="标签的uri"%>

4.Jsp动态元素

  • 包含文件元素

**作用:**用于向当前页面引入其他的文件,被引入的文件可以是动态文件,也可以是静态文件

<jsp:include page="URL" flush="true/false"/>
//page:相对路径
//flush:是否将当前页面内容刷新到客户端,默认情况为falsh(同include指令一样)

include指令和jsp:include动态元素的区别

1.include指令中的file属性不可以为表达式,<jsp:include>可以
2.include指令是将被包含的文件原封不动的插入包含页,编译为一个java文件,使用<jsp:include>动作元素包含文件时,当该元素被执行时,程序会将请求转发到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页,继续执行后面的代码。
3.include指令存在变量冲突的问题
  • 请求转发元素

**作用:**可以将当前请求转发到其他Web资源

<jsp:forward page="相对路径"/>
//注意:标签要闭合

5.Jsp隐式对象

名称类型描述
outjavax.servlet.jsp.JspWriter用于页面输出
requestjavax.servlet.http.HttpServletRequest得到用户请求信息
responsejavax.servlet.http.HttpServletResponse服务器向客户端的回应信息
configjavax.servlet.ServletConfig服务器配置,可以取得初始化参数
sessionjavax.servlet.http.HttpSession用来保存用户的信息
applicationjavax.servlet.ServletContext所有用户的共享信息
pagejava.lang.Object指当前页面转换后的Servlet类的实例
pageContextjavax.servlet.jsp.PageContextJSP的页面容器
exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用
  • out对象
image-20240616114618415

在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。如果想要通过out对象直接写入到Servlet可以使用page指令实现

<%@ page buffer="0kb" %>
  • pageContext对象

1.获得Jsp隐式对象

方法名功能描述
JspWriter getOut()用于获取out隐式对象
Object getPage()用于获取page隐式对象
ServletRequest getRequest()用于获取request隐式对象
ServletResponse getResponse()用于获取response隐式对象
HttpSession getSession()用于获取session隐式对象
Exception getException()用于获取exception隐式对象
ServletConfig getServletConfig()用于获取config隐式对象
ServletContext getServletContext()用于获取application隐式对象

2.域对象相关方法

方法名功能描述
void setAttribute(String name,Object value,int scope)用于设置pageContext对象的属性
Object getAttribute(String name,int scope)用于获取pageContext对象的属性
Object getAttribute(String name)用于获取scope范围为PAGE_SCOPE的属性
void removeAttribute(String name,int scope)用于删除指定范围内名称为name的属性
void removeAttribute(String name)用于删除所有范围内名称为name的属性
Object findAttribute(String name)用于从4个域对象中查找名称为name的属性(依次从page,request,session,application范围找,否则人返回null)
Enumeration getAttribute(int scope)获取某个范围的属性名
scope的作用范围:
pageContext.PAGE_SCOPE:表示页面范围。
pageContext.REQUEST_SCOPE:表示请求范围。
pageContext.SESSION_SCOPE:表示会话范围。
pageContext.APPLICATION_SCOPE:表示Web应用程序范围
  • exception对象

在JSP页面中,经常需要处理一些异常信息,处理异常信息可以通过exception对象实现。exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息。需要注意的是,exception对象只有在错误处理页面才可以使用,即page指令中指定了属性<%@ page isErrorPage=“true”%>的页面。

三.EL表达式

1.EL表达式基本概念

  • EL表达式语法格式
${表达式}

作用:EL表达式用来获取域对象的值,如果域对象的值不存在的时候会返回空字符串,不会出现空指针异常

  • EL表达式的特点
1EL可以与JavaScript语句结合使用。
(2EL可以自动进行类型转换。如果想通过EL获取两个字符串数值(如number1和number2)的和,可以直接通过“+”符号进行连接(如$ {number1+number2}),如果字符串不是数字的话,是不可以连接的会报错
(3EL不仅可以访问一般变量,还可以访问JavaBean中的属性、嵌套属性和集合对象。
(4)在EL中,可以执行算术运算、逻辑运算、关系运算和条件运算等。
(5)在EL中,可以获取pageContext对象,进而获取其他内置对象。
(6)在使用EL进行除法运算时,如果除数为0,则返回表示无穷大的Infinity,而不返回错误。
(7)在EL中,可以访问JSP的作用域(request、 session、 application 以及page)。
  • EL表达式中的变量就是域属性的名字
  • 点运算符:用来获取与属性的值
${user.name}
  • 方框运算符也可以获取域属性的值
${user["name"]}

注意下面情况只可以用方框运算符

1.如果属性名出现"-","?"等非字母和数字的符号
${user["My-name"]}    
2.如果要访问数组或集合中的元素
${user[index]}
  • empty运算符用于判断对象是否为null或为空
${empty empression}
  • 条件运算符
${A?B:C}
  • 在使用EL表达式时,没有数组下标越界,没有空指针异常,没有字符串拼接

2.EL隐式对象

  • pageContext对象

作用:获取JSP页面的隐式对象,可以使用EL中的pageContext隐式对象

隐式对象名称 返回值类型
pageContext对应于JSP页面中的pageContext对象pageContext
${pageContext.request.characterEncoding}
//相当于
pageContext.getRequest().getCharacterEncoding()
  • cookie对象

作用:获得客户端cookie信息

隐式对象名称 返回值类型
cookie用于获取使用者的cookie值,cookie的类型是MapMap<String, Cookie>
${cookie.cookie名字}<br/>
${cookie.cookie名字cookie名字.name}<br/>
${cookie.cookie名字.value}<br/>
  • initParam对象

作用:获得初始化参数的值

隐式对象名称 返回值类型
initParam表示一个保存了所有Web应用初始化参数的Map对象Map<String, String>
  • 四个域范围对象

作用:用来获取域属性和值

隐式对象名称 返回值类型
pageScope代表page域中用于保存属性的Map对象Map<String, Object>
requestScope代表request域中用于保存属性的Map对象Map<String, Object>
sessionScope代表session域中用于保存属性的Map对象Map<String, Object>
applicationScope代表application域中用于保存属性的Map对象Map<String, Object>
${pageScope.username}
${requestScope.username}
  • 获取参数对象
隐式对象名称 返回值类型
param表示一个保存了所有请求参数的Map对象Map<String, String>
paramValues表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个String类型数组Map<String, String[]>
name:${param.name}<br/>
hobby1:${paramValues.hobby[0]}<br/>
hobby2:${paramValues.hobby[1]}<br/>
  • 获取请求头字段对象
隐式对象名称 返回值类型
header表示一个保存了所有http请求头字段的Map对象Map<String, String>
headerValues表示一个保存了所有http请求头字段的Map对象,返回String类型数组Map<String, String[]>

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

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

相关文章

如何设计一个秒杀系统?

这篇分享源自之前购买的极客时间课程《如何设计一个秒杀系统》&#xff0c;以及书籍《亿级流量网站架构核心技术》。 这两个讲的都是关于高并发系统设计的&#xff0c;感觉收获颇多。 本篇内容对核心要点进行了摘录&#xff0c;也结合网上一些文章&#xff0c;希望能分享所得…

运算符及表达式+基本语句和函数使用的详细讲解

运算符及表达式 运算符及表达式 在C语言中&#xff0c;运算符是用于执行特定操作的符号&#xff0c;而表达式则是由运算符和操作数组成的式子。 1) 运算符 运算符的目数 单目运算符&#xff1a;只需要一个操作数&#xff0c;如 !&#xff08;逻辑非&#xff09;、&#xf…

简易开发一个app

即时设计网站 即时设计 - 可实时协作的专业 UI 设计工具 需要先设计好UI界面 上传到codefun 首次需要安装 自动生成代码 打开hb软件 新建项目 打开创建的项目 删除代码 复制代码过去 下载图片 将图片放到文件夹里 改为这种格式 index.vue 如果不需要uni-app导航栏可以修改 …

项目文件预览

在实际项目开发过程&#xff0c;项目使用数据存在多种形式&#xff0c;“文件”也是一种常见形式&#xff0c;因此&#xff0c;“文件预览”功能变成了常规需求。 kkFileView项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支…

以太网基础知识(二)—NRZ,PAM4调制技术

1&#xff1a;码元 了解调制技术需要引出“码元”的概念。 一个码元就是一个脉冲信号&#xff0c;即一个最小信号周期内的信号&#xff0c;我们都能够理解&#xff0c;最简单的电路&#xff0c;以高电平代表1&#xff0c;低电平代表0&#xff0c;一个代表1或者0的信号&#x…

分层解耦

三层架构 controller:控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据&#xff0c; service:业务逻辑层&#xff0c;处理具体的业务逻辑。 dao:数据访问层(Data Access Object)(持久层)&#xff0c;负责数据访问操作&#xff0c;包括数…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加&#xff0c;传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

元数据、数据元、数据字典、数据模型及元模型的区别详解

在数据管理和分析领域&#xff0c;有许多相似的概念&#xff0c;如元数据、数据元、数据字典、数据模型和元模型。这些概念的定义和应用往往容易混淆。 数据元 数据元是通过一系列属性描述的数据单元&#xff0c;包括定义、标识、表示以及允许值等。这些属性帮助我们理解和使用…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是&#xff1a; 由一个在栈上的引用数组变量指向一块堆内存&#xff1b;这块堆内存里存储的元素是引用&#xff0c;又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

Git/TortoiseGit ssh client 配置

1. Git ssh client 配置 Git 默认的 ssh client 是 <Git 安装目录>/usr/bin/ssh.exe 修改方法为打开 Git Bash 执行&#xff1a; git config --global core.sshCommand "/C/Program Files/TortoiseGit/bin/TortoiseGitPlink.exe" 注意&#xff1a;如果路径…

​单级高频谐振小放

目录 高频交流等效电路 质量指标 增益 通频带 选择性 高频交流等效电路 质量指标 增益 YL撇是怎么来的。 通频带 选择性

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

Git管理(Linux版本)

在Linux中我们如何把自己的代码上传到gitee中呢&#xff0c;本期将为大家讲解详细的步骤。 目录 查看Linux环境是否存在git工具 在gitee上创建代码仓库 复制仓库的HTTP路径到Linux中 代码上传 在仓库下创建文件或者将文件移动到仓库下 使用三板斧进行文件的上传 add …

Podman常用命令

Podman 是 Red Hat 的一个开源项目&#xff0c;可以免费下载。它是容器化领域的一个相对较新的人&#xff0c;1.0 版将于 2019 年发布。此后 Podman 取得了长足的进步&#xff0c;其崛起伴随着 Docker 的逐渐衰落&#xff0c;该项目在许多方面创造了我们今天所知的容器世界。 容…

使用 Oracle SQL Developer 导入数据

使用 Oracle SQL Developer 导入数据 1. 导入过程 1. 导入过程 选择要导入数据的表&#xff0c; 然后单击右键&#xff0c;选择"导入数据"&#xff0c; 浏览本地文件&#xff0c;选择正确的工作表&#xff0c; 按默认&#xff0c; 按默认&#xff0c; 根据情况修改&…

2. 机器学习概述

机器学习是对能通过经验自动改进的计算机算法的研究。 ---汤姆. 米切尔 1997 通俗来讲&#xff0c;机器学习就是让计算机从数据中进行自动学习&#xff0c;得到某种知识&#xff08;或规律&#xff09;。在早期的工程领域&#xff0c;机器学习也经常被称为模式识别&#xff08;…