jsp基础知识

news/2024/12/1 18:48:24/

JSP

1, JSP 的生命周期 理解 JSP 底层功能的关键就是去理解它们所遵守的生命周期。

JSP 生命周期就是从创建到销毁的整个过程,类似于 servlet 生命周期,区别在于 JSP 生命周期还包括将 JSP 文件编译成servlet。

以下是JSP生命周期中所走过的几个阶段:

1,编译阶段:

servlet容器编译servlet源文件,生成servlet类

当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

编译的过程包括三个步骤:

1,解析 JSP 文件。

2,将 JSP 文件转为 servlet。

3,编译 servlet。

2,初始化阶段:

加载与 JSP 对应的 servlet 类,创建其实例,并调用它的初始化方法

容器载入 JSP 文件后,它会在为请求提供任何服务前调用 jspInit() 方法。如果您需要执行自定义的 JSP 初始化任务,复写 jspInit() 方法就行了,就像下面这样:

public void jspInit(){

  // 初始化代码

}

一般来讲程序只初始化一次, servlet 也是如此。通常情况下您可以在 jspInit() 方法中初始化数据库连接、打开文件和创建查询表。

3,执行阶段:

调用与 JSP 对应的 servlet 实例的服务方法

这一阶段描述了 JSP 生命周期中一切与请求相关的交互行为,直到被销毁。

当 JSP 网页完成初始化后,JSP 引擎将会调用 _jspService() 方法。

_jspService() 方法需要一个 HttpServletRequest 对象和一个 HttpServletResponse 对象作为它的参数,就像下面这样:

void _jspService(HttpServletRequest request,

                 HttpServletResponse response){

   //服务端处理代码}

_jspService() 方法在每个 request 中被调用一次并且负责产生与之相对应的 response,并且它还负责产生所有7个HTTP 方法的回应,比如 GET、POST、DELETE 等等。

4,销毁阶段:

调用与 JSP 对应的 servlet 实例的销毁方法,然后销毁 servlet 实例

JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

jspDestroy()方法的格式如下:

public void jspDestroy(){

   //清理代码

}

import com.alibaba.fastjson.JSON;

很明显,JSP生命周期的四个主要阶段和servlet生命周期非常相似,下面给出图示:

2,JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

JSP指令语法格式:

<%@ directiveattribute="value" %>

指令

描述

<%@ page ... %>

定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ include ... %>

包含其他文件

<%@ taglib ... %>

引入标签库的定义,可以是自定义标签

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址"%>

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

等价的XML语法:

<jsp:directive.include file="文件相对 url 地址"/>

Taglib指令

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

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

Taglib指令的语法:

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

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

等价的XML语法:

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

3,JSP行为

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

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

<jsp:action_nameattribute="value" />

语法

描述

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

用于封装模板数据

4,JSP隐含对象

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

request

HttpServletRequest类的实例

response

HttpServletResponse类的实例

out

PrintWriter类的实例,用于把结果输出至网页上

session

HttpSession类的实例

application

ServletContext类的实例,与应用上下文有关

config

ServletConfig类的实例

pageContext

PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

page

类似于Java类中的this关键字

Exception

Exception类的对象,代表发生错误的JSP页面中对应的异常对象

JSTL表达式

核心标签是最常用的JSTL标签。引用核心标签库的语法如下:

<%@ taglib prefix="c"

          uri="http://java.sun.com/jsp/jstl/core" %>

标签

描述

<c:out>

用于在JSP中显示数据,就像<%= ... >

<c:set>

用于保存数据

<c:remove>

用于删除数据

<c:catch>

用来处理产生错误的异常状况,并且将错误信息储存起来

<c:if>

与我们在一般程序中用的if一样

<c:choose>

本身只当做<c:when>和<c:otherwise>的父标签

<c:when>

<c:choose>的子标签,用来判断条件是否成立

<c:otherwise>

<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行

<c:import>

检索一个绝对或相对 URL,然后将其内容暴露给页面

<c:forEach>

基础迭代标签,接受多种集合类型

<c:forTokens>

根据指定的分隔符来分隔内容并迭代输出

<c:param>

用来给包含或重定向的页面传递参数

<c:redirect>

重定向至一个新的URL.

<c:url>

使用可选的查询参数来创造一个URL

<c:choose>, <c:when>, <c:otherwise> 标签

<c:choose>

   <c:when test="<boolean>"/>

       ...

    </c:when>

   <c:when test="<boolean>"/>

       ...

   </c:when>

   ...

   ...

   <c:otherwise>

       ...

   </c:otherwise>

</c:choose>

例子:

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

pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>

<head><title>c:choose标签实例</title></head>

<body>

<c:setvar="salary" scope="session"value="${2000*2}"/><p>你的工资为 : <c:outvalue="${salary}"/></p><c:choose>

   <c:when test="${salary <= 0}">

      太惨了。

    </c:when>

   <c:when test="${salary > 1000}">

      不错的薪水,还能生活。

   </c:when>

   <c:otherwise>

       什么都没有。

</c:otherwise></c:choose>

</body>

</html>

<c:if> 标签

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

复制

    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:if 标签实例</title></head><body><c:setvar="salary"scope="session"value="${2000*2}"/><c:iftest="${salary > 2000}">

复制

   <p>我的工资为: <c:outvalue="${salary}"/><p></c:if></body></html>

复制

<c:forEach>, <c:forTokens> 标签

<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。

<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

属性

描述

是否必要

默认值

items

要被循环的信息

begin

开始的元素(0=第一个元素,1=第二个元素)

0

end

最后一个元素(0=第一个元素,1=第二个元素)

Last element

step

每一次迭代的步长

1

var

代表当前条目的变量名称

varStatus

代表循环状态的变量名称

forEach 语法格式

<c:forEach

   items="<object>"

   begin="<int>"

   end="<int>"

   step="<int>"

   var="<string>"

   varStatus="<string>">

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

复制

    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:forEach 标签实例</title></head><body><c:forEachvar="i"begin="1"end="5">

复制

   Item <c:outvalue="${i}"/><p></c:forEach></body></html>

复制

forTokens 语法格式

<c:forTokens

   items="<string>"

   delims="<string>"

   begin="<int>"

   end="<int>"

   step="<int>"

   var="<string>"

   varStatus="<string>">

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

复制

    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:forTokens 标签实例</title></head><body><c:forTokensitems="google,baidu,taobao"delims=","var="name">

复制

   <c:outvalue="${name}"/><p></c:forTokens></body></html>

复制

<c:url> 标签 <c:param> 标签

<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。

在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。

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

   pageEncoding="UTF-8"%>

<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>

<head>

<title>c:forTokens 标签实例</title>

</head>

<body>

       <h1>&lt;c:param&gt;实例</h1>

       <c:urlvar="myURL" value="main.jsp">

              <c:paramname="name" value="baidu"/>

              <c:paramname="url" value="www.baidu.com"/>

       </c:url>

     <a href="/<c:out value="${myURL}"/>">

 使用&lt;c:param&gt; 为指定URL发送两个参数。</a>

</body>

</html>

格式化标签JSTL格式化标签用来格式化并输出文本、日期、时间、数字。

导入库

<%@ taglib prefix="fmt"

复制

           uri="http://java.sun.com/jsp/jstl/fmt" %>

复制

标签

描述

<fmt:formatNumber>

使用指定的格式或精度格式化数字

<fmt:parseNumber>

解析一个代表着数字,货币或百分比的字符串

<fmt:formatDate>

使用指定的风格或模式格式化日期和时间

<fmt:parseDate>

解析一个代表着日期或时间的字符串

<fmt:bundle>

绑定资源

<fmt:setLocale>

指定地区

<fmt:setBundle>

绑定资源

<fmt:timeZone>

指定时区

<fmt:setTimeZone>

指定时区

<fmt:message>

显示资源配置文件信息

<fmt:requestEncoding>

设置request的字符编码

<fmt:formatNumber>标签

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

复制

    pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

复制

<html><head>

复制

  <title>JSTL fmt:formatNumber 标签</title></head><body><h3>数字格式化:</h3><c:setvar="balance"value="120000.2309"/><p>格式化数字 (1): <fmt:formatNumbervalue="${balance}"

复制

            type="currency"/></p><p>格式化数字 (2): <fmt:formatNumbertype="number"

复制

            maxIntegerDigits="3"value="${balance}"/></p><p>格式化数字 (3): <fmt:formatNumbertype="number"

复制

            maxFractionDigits="3"value="${balance}"/></p><p>格式化数字 (4): <fmt:formatNumbertype="number"

复制

            groupingUsed="false"value="${balance}"/></p><p>格式化数字 (5): <fmt:formatNumbertype="percent"

复制

            maxIntegerDigits="3"value="${balance}"/></p><p>格式化数字 (6): <fmt:formatNumbertype="percent"

复制

            minFractionDigits="10"value="${balance}"/></p><p>格式化数字 (7): <fmt:formatNumbertype="percent"

复制

            maxIntegerDigits="3"value="${balance}"/></p><p>格式化数字 (8): <fmt:formatNumbertype="number"

复制

            pattern="###.###E0"value="${balance}"/></p><p>美元 :<fmt:setLocalevalue="en_US"/><fmt:formatNumbervalue="${balance}"type="currency"/></p></body></html>

复制

属性

描述

是否必要

默认值

value

要显示的数字

type

NUMBER,CURRENCY,或 PERCENT类型

Number

pattern

指定一个自定义的格式化模式用与输出

currencyCode

货币码(当type="currency"时)

取决于默认区域

currencySymbol

货币符号 (当 type="currency"时)

取决于默认区域

groupingUsed

是否对数字分组 (TRUE 或 FALSE)

true

maxIntegerDigits

整型数最大的位数

minIntegerDigits

整型数最小的位数

maxFractionDigits

小数点后最大的位数

minFractionDigits

小数点后最小的位数

var

存储格式化数字的变量

Print to page

scope

var属性的作用域

page

Pattern属性:

符号

描述

0

代表一位数字

E

使用指数格式

#

代表一位数字,若没有则显示0

.

小数点

,

数字分组分隔符

;

分隔格式

-

使用默认负数前缀

%

百分数

?

千分数

¤

货币符号,使用实际的货币符号代替

X

指定可以作为前缀或后缀的字符

'

在前缀或后缀中引用特殊字符

JSP十一个用于EL表达式的隐含(内置)对象:

Implicit Objects for EL Expressions 用于EL表达式的隐含对象

Type 类型

Description 具体说明

pageContext

javax.servlet.jsp.PageContext

The context for the JSP page. Provides access to various objects, including servletContext, session, request, and response.

pageScope

java.util.Map

Maps page-scoped variable names to their values.

requestScope

java.util.Map

Maps request-scoped variable names to their values.

sessionScope

java.util.Map

Maps session-scoped variable names to their values.

applicationScope

java.util.Map

Maps application-scoped variable names to their values.

param

java.util.Map

Maps a request parameter to a single String parameter value (obtained by calling ServletReqwuest.getParameter(String name)).

paramValues

java.util.Map

Maps a request parameter name to an array of String values for that parameter name (obtained by calling ServletRequest.getParameterValues(String name)).

header

java.util.Map

Maps a request header name to a single String header value (obtained by calling ServletRequest.getHeader(String name)).

headerValues

java.util.Map

Maps a request header name to an array of String values for that header (obtained by calling ServletRequest.getHeaders(String)).

coookie

java.util.Map

Maps a cookie name to a single Cookie object. Cookies are retrieved according to the semantics of HttpServletRequest.getCookies(). If the same name is shared by multiple cookies, an implementation must use the first one encountered in the array of Cookie objects returned by the getCookies() method. However, the ordering of cookies is currently unsspecified in the Servlet specification.

initParam

java.util.Map

Maps a context initialization parameter name to a String parameter value (obtained by calling ServletContext.getInitparameter(String name)).


http://www.ppmy.cn/news/118469.html

相关文章

【Python】FastAPI 配置日志即 logging 模块使用

目录 1. 日志 2. FastAPI 示例 1. 日志 日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用&#xff0c;借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述&#xff08;比如&#xff1a;每个事件发生时的数据都是不同的…

ACL 2022:Graph Pre-training for AMR Parsing and Generation

Graph Pre-training for AMR Parsing and Generation 论文&#xff1a;https://aclanthology.org/2022.acl-long.415/ 代码&#xff1a;https://github.com/goodbai-nlp/AMRBART 期刊/会议&#xff1a;ACL 2022 摘要 抽象语义表示&#xff08;AMR&#xff09;以图形结构突出…

‌static函数中可以使用this?

在 Java 中&#xff0c;static 方法是属于类而不是实例的方法。因此&#xff0c;static 方法中不能使用关键字 this。 关键字 this 用于引用当前对象的实例&#xff0c;它只能在非静态方法中使用。在静态方法中&#xff0c;没有实例对象的引用&#xff0c;因此无法使用 this 关…

10. 数据结构之树

前言 之前介绍了顺序表的数据结构&#xff0c;包含队列&#xff0c;栈等&#xff0c;这种结构都是一对一的&#xff0c;但是现实生活中&#xff0c;经常会遇见一对多的数据结构&#xff0c;比如族谱&#xff0c;部门机构等&#xff0c;此时我们需要一个更复杂的数据结构来表示…

Fiddler抓包常用功能介绍,有图有视频不怕看不懂

目录 一. 停止抓包 二. 清空会话窗 三. 过滤请求 只显示目标请求 只抓取目标端的请求 四. 解码 五. 设置断点 伪造客户端请求 伪造服务器响应 注意事项 六. 总结 Fiddler中常用的功能如下&#xff1a; 停止抓包清空会话窗内容过滤请求解码设置断点 一. 停止抓包 fid…

浅析如何造数据

有关造数据&#xff0c; 显然是为了对拍或者出题而生。 数据类型 0 随机数1 整数1.1 i n t int int 范围内任意整数1.2 范围 [ a , b ] [a,b] [a,b] 2 小数2.1 任意小数2.2 范围 [ a , b ] [a,b] [a,b] 自行解决 3 序列 0 随机数 本文选择使用 c S T L c\ \ STL c STL …

暮光壁纸(安卓)

首先&#xff0c;在主页面这里就能看见各种功能的列表&#xff0c;头像大全&#xff0c;i主题&#xff0c;壁纸大全&#xff0c;高清壁纸&#xff0c;高清图集&#xff0c;哔哩哔哩解析&#xff0c;还有聚合收图和分类大全等等&#xff0c;在壁纸大全里面将不同类型的壁纸进行了…

透明壁纸android,主题透明壁纸软件下载-主题透明壁纸 安卓版v1.0-PC6安卓网

主题透明壁纸app是一款图库资源丰富高清无水印的桌面美化手机软件&#xff0c;主题透明壁纸app汇聚了各种各样时尚好看的高清壁纸和主题模板&#xff0c;用户可随时进入主题透明壁纸软件平台进行更换设置。 软件介绍 主题透明壁纸软件&#xff0c;支持用户上传超清创意特效的卡…