JSP学习笔记(总结)

简介

jsp生命周期:首次访问jsp,1 转成的servlet源代码, 2 编译,3 加载,4 执行jsp的init方法, 5 执行jsp的service方法, 6 处理完毕执行jsp的distroy方法。

1 基本标签

1.1 基本元素

(1) HTML元素

(2) CSS元素

(3) JS元素

注释:html,css,js代码会原样输出到前端浏览器

1.2 注释

(1) JSP注释:<%-- 注释 --%>  // 只在Jsp文件内可见

(2) Java注释:<% // 注释/* 注释 */ | /** 注释 */ %> // 与java代码的注释完全一样

(3) Html注释 :<!-- 注释 --> // 会出力到前端浏览器,可以通过右键网页“查看网页源代码”看见

2 JSP脚本

2.1 JSP声明

(1) 声明变量:<%!  int i = 0;  %> // 相当于类的全局变量,与JSP文件中的位置无关。不能使用request,session等对象。重点:同servlet全局一样,多个session共用一个对象。

(2) 声明函数:<%! public void getTest(){ ... } %>

2.2 JSP脚本

(1) JSP脚本:<% if(...){ ...} else {...} %> // 内部就是java代码

2.3 JSP表达式

(1) JSP表达式:<%=i %>  // jsp声明定义全局变量i 或者jsp脚本定义的局部变量i,可以在HTML中直接输出,表达式可放到jsp动作的属性中,不可放到指令<%@的属性中。(<%= 与变量之间可以有空格)

3 指令

3.1 page指令

(1) 编程语言:<%@ page language="java" %> // 默认就是java语言,无用代码

(2) 文本格式:<%@ page contentType="text/html; charset=UTF-8" %> // 指定生成内容及字符集,相当于 response.setContentType(...);

(3) 编码格式:<%@ page pageEncoding="UTF-8" %> //不设定则默认用 contentType的编码

(4) 导入Java类:<%@ page import="java.util.*" %> 

(5) 开启Session:<%@ page session="true" %> // 指定是否启用session

(6) 忽视EL表达式: <%@ page isELIgnored="true" %> // true关闭el,false开启el

(7) 线程安全:<%@ page isThreadSafe="true" %> // 表示最终生成的servlet是否具有线程安全性。

(8) 错误跳转页面:<%@ page errorPage="xx.jsp" %> // 出异常跳转到指定页面

(9) 异常处理页面:<%@ page isErrorPage="false" %> // TRUE表示当前文件是一个错误提示页面。可使用exception.getMessage();

(10) 继承:<%@ page extends="xx.servlet" %> // 定制jsp的servlet,很少使用

(11) 缓存:<%@ page buffer="32kb" %> // 最小8kb存页面内容,直接发数据给客户端不用缓存。

(12) 自动刷新:<%@ page autoFlush="false" %> // 缓存满了是否自动发送给用户,默认true, 设置false满了出异常

(13) 页面信息:<%@ page info="xxx" %> // 可获通过<%= getServletInfo() %>取到值

注释:多个属性可以空格或换行分割 

3.2 include指令

(1) 静态包含:<%@ include file="xxx.jsp" %> // file以/开头代表应用根目录,不以/开头代表jsp同级目录文件,file不能传参数。子页面声明不能与主页面声明重名,因为相当于是同一个类文件

3.3 taglib指令

(1) 引入标签库:<%@ taglib prefix="c" uri="..." %> // 等号与值之间不能有空格

核心标签:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

格式化标签:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

SQL标签:(与关系型数据库(Oracle,MySQL,SQL Server)进行交互的标签

函数标签 :<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

自定义标签:<%@ taglib prefix="diy" uri="/diytaglib" %>

4 四大作用域

4.1 pageContext

4.2 request

4.3 session

4.4 application 

5 EL表达式

jsp2.0加入,用来代替 <% %> 和 <%= %>,若jsp不识别el表达式原文输出,是因为Servlet是3.0关闭了el表达式的识别。

5.1 开启EL配置

(1) web.xml:true关闭,false开启 // 测试切换配置未能变更效果,原因未知。

    <jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><el-ignored>true</el-ignored></jsp-property-group></jsp-config>

(2) JSP命令: <%@ page isELIgnored="false" %> // true关闭,false开启

5.2 EL使用场景

(1) HTML文本:<div> ${name} </div>

(2) HTML属性:<input type="text" value="${name}" />

(3) JSP动作属性:<jsp:include page="${xxx}"/> // 不用于jsp指令<%@中

(4) 自定义标签属性:<c:out value="${xxx}" />

5.3 隐含变量

四个作用域对象,不指定域名则取最小作用域的值。优先page>request>session>application

(1) 页面域:pageScope 

(2) 请求域:requestScope

(3) 会话域:sessionScope

(4) 应用域:applicationScope

(5) cookie:cookie // ${ cookie.cookieKey.value }

(6) 页面对象:pageContext // 可取 request, response, servletContext等对象

(7) 应用上下文参数:initParam // 获取servletContet 的参数名与值

(8) 请求参数:param // param.xx 相当于req.getParameter("xx")

(9) 请求参数数组:paramValues // paramValues.xx[0]相当于req.getParameterValues("xx")[0]

(10) 请求头:header 

(11) 请求头数组:headerValues

5.4 取值

(1) 取String:${作用域key} // ${name} = request.getAttribute("name")

(2) 取List :${作用域key[下标]} // ${list[0]} = ((List)request.getAttribute("list")).get(0)

(3) 取Map:${作用域key.mapKey} | ${作用域key["mapKey"]} // ${maps.key2} | ${maps["key3"]}

(4) 取对象:${作用域key.对象属性} | ${作用域key["对象属性"]} // ${user.name} ${user["age"]}

注释:对象与map的key的单双引号效果一样。el表达式无属性访问,不抛出异常,返回空字符串。el可访问嵌套属性 ${a.b.c} // jsp:useBean无法实现。

5.5 算术运算符

加 + : ${6 + (-2)}

减 - :${6 - 1},

乘 *:${2 * 3},

除 / :${4/2}  // = 2

余 % 或 mod:${20%6}  ${20 mod 6} // = 2

5.6 比较运算符

等于:${3 == 5} ${ 3 eq 5}

不等于:${3 != 5} ${a ne b} // ne不能比较数字

大于:${ 3 > 5}  ${3 gt 5}

小于:${ 3 < 5}  ${ 3 lt 5}

大于等于:${3 >= 5} ${ 3 ge 5}

小于等于:${3 <= 5} ${ 3 le 5 }

注释:两个字符串值相等判断,返回true

5.7 逻辑运算符

(1) 与:&& , and  // ${ (9>=4)&&(3<2) } ${ (9>=4)and(3<2) } 

(2) 或:|| , or  // ${ (9>=4)||(3<2) } ${ (9>=4)or(3<2) } 

(3) 非:!  , not  // ${ ! (5>=6) } ${ not (5>=6) }  非后面表达式必须加括号

(4) 三元运算:表达式 ? 满足值 : 不满足值  // ${ 5*5>2 ? 1 : 0}, ${2+5=3 ? "xx" : "yy"}

5.8 判空

(1) 为空:${empty param0

(2) 非空:${!empty param0}

注释:可 判空字符串,空数组,空集合,空map,null

6 JSTL(核心标签)

6.1 下载与配置

(1) JAR下载地址:https://tomcat.apache.org/taglibs/standard/

(2) JSP配置: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

6.2 分歧判断

(1) c:if :<c:if test="表达式" var="作用域key" scope="作用域"> // <c:if test="${!empty name1}" var="key" scope="request"> ${key} </c:if> 如果name1不为空 将表达式结果 以var定义的key存在request作用域中,输出if标签内的内容。作用域(page默认,request,session.application)

(2) c:choose:<c:choose> <c:when test="${el}">内容</c:when><c:otherwise>内容</c:otherwise> </c:choose>  // choose没有属性,when可定义多个满足则输出内容,都不满足输出otherwise内容

6.3 循环

(1) 固定循环:<c:forEach begin="0" end="5" step="1" var="i">${i}</c:forEach> // 循环输出0到5,每次递增1

(2) list循环:

<c:forEach items="${存list的作用域key}" var="item" varStatus="con">

  ${item} // 取对象

  ${con.index} // 取下标

  ${con.count} // 取总数

  ${con.first} // 返回当前对象是否为第一个的boolean类型

  ${con.last} // 返回当前对象是否为最后一个对象

</c:forEach>

(3) map循环:

<c:forEach items="${存map的作用域key}" var="item" >

  ${item.key} // 取map的key

  ${item.value} // 取map的value

</c:forEach>

(4) 对象循环:

<c:forEach items="${存object的作用域key}" var="item" >

  ${item.name} // 取对象的name属性值

</c:forEach>

6.4 设置值

(1) 设置作用域:<c:set var="作用域key" value="" [scope="作用域"] /> // 将值以指定的key存在作用域中,作为新规或修改处理

(2) 设置作用域: <c:set var="作用域key" [scope="作用域"]></c:set> // 将值以指定的key存在作用域中,作为新规或修改处理

(3) 设置作用域Map:<c:set target="${作用域key}" property="map的key" value="" /> // 需要有作用域的map对象才能设置,作为改值处理

(3) 设置作用域Map:<c:set target="${作用域key}" property="map的key"></c:set>// 需要有作用域的map对象才能设置,作为改值处理

6.5 其它

(1) 删除:<c:remove var="作用域Key" scope="作用域" /> // 删除作用域下指定的key

(2) 输出:<c:out value="${作用域key}" /> // 输出指定的作用域的Key对应的值

(3) 异常处理:<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来

(4) 导入:<c:import> // 导入一个绝对或相对url,到页面

(5) 分割内容:<c:forTokens> // 根据指定的分隔符来分隔内容并迭代输出

(6) 参数:<c:param> // 用来给包含或重定向的页面传递参数

(7) 重定向:<c:redirect > // 重定向至一个新的URL.<c:redirect url="xx"> <c:param name="xx" value="xx"></c:param> </c:..>

7 JSP内置对象

7.1 request(JSP四大作用域之请求域)

(1) 获取页面域对象:request.getAttribute("key")

(2) 设置页面域对象:request.setAttribute("key", value)

(3) 删除页面域对象:request.removeAttribute("key", value)

注释:request对象当前请求生效适用于请求转发后的jsp或servlet,适用于页面跳转携带数据到新页面。同servelt的request一样使用。

7.2 response

7.3 session(JSP四大作用域之会话域)

(1) 获取会话域对象:session.getAttribute("key")

(2) 设置会话域对象:session.setAttribute("key", value)

(3) 删除会话域对象:session.removeAttribute("key", value)

注释: session在整个会话阶段生效,关闭浏览器或会话超时失效,适用于保留用户登录信息。同servelt的session一样使用。

7.4 application(JSP四大作用域之应用域)

(1) 获取应用域对象:application.getAttribute("key")

(2) 设置应用域对象:application.setAttribute("key", value)

(3) 删除应用域对象:application.removeAttribute("key", value)

注释: application在整个应用启动阶段生效,服务器停止后失效,适用于保存服务器共有信息。同ServletContext一样使用。

7.5 out

7.6 pageContext(JSP四大作用域之页面域)

(1) 获取页面域对象:pageContext.getAttribute("key")

(2) 设置页面域对象:pageContext.setAttribute("key", value)

(3) 删除页面域对象:pageContext.removeAttribute("key", value)

注释:pageContext对象只在当前jsp生效。还可以获取到request,response,servletContext等对象

7.7 config

7.8 page

7.9 exception

8 JSP动作

9 自定义标签

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

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

相关文章

Git中stash的使用

Git中stash的使用 stash命令1. stash保存当前修改2. 重新使用缓存3. 查看stash3. 删除 使用场景 stash命令 1. stash保存当前修改 git stash 会把所有未提交的修改&#xff08;包括暂存的和非暂存的&#xff09;都保存起来. git stashgit stash save 注释2. 重新使用缓存 #…

SoC中跨时钟域的信号同步设计(单比特同步设计)

一、 亚稳态 在数字电路中&#xff0c;触发器是一种很常用的器件。对于任意一个触发器&#xff0c;都由其参数库文件规定了能正常使用的“建立时间”&#xff08;Setup time&#xff09;和“保持时间”&#xff08;Hold time &#xff09;两个参数。“建立时间”是指在时钟…

向华为学习:基于BLM模型的战略规划研讨会实操的详细说明,含研讨表单(一)

前面&#xff0c;华研荟用了三篇文章介绍华为战略规划的时候使用的其中一个工具&#xff1a;五看三定。一句话来说&#xff0c;五看三定是通过“五看”来知己知彼&#xff0c;然后设计业务&#xff0c;在选定的业务领域&#xff08;方向&#xff09;确定战略控制点&#xff0c;…

JedisCluster 通过 Pipeline 实现两套数据轮换更新

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、整体流程 1.1 大致流程 1.2 流程代码解释 二、从数据库里查数据 2.1 SQL语句 三、更新当前前缀 3.1 设置前缀常量 3.2 初…

设计模式——原型模式(创建型)

引言 原型模式是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象&#xff0c; 并希望生成与其完全相同的一个复制品&#xff0c; 你该如何实现呢&#xff1f; 首先&#xff0c; 你必须新建一个属于…

overleaf 加载pdf格式的矢量图时,visio 图片保存为pdf格式,如何确保pdf页面大小和图片一致

Overleaf支持多种矢量图形格式&#xff0c;其中一些常见的包括&#xff1a; PDF&#xff08;Portable Document Format&#xff09;&#xff1a; PDF是一种常见的矢量图形格式&#xff0c;Overleaf可以直接加载和显示PDF文件。许多绘图工具和LaTeX生成的图形都可以导出为PDF格式…

vue中哪些数组的方法可以做到响应式

Vue2 中为什么直接通过数组的索引修改元素是不会触发视图更新 vue2 为什么不直接监听数组 Vue2 对于数组提供了一些变异方法 重写数组方法源码分析 定义拦截器将拦截器挂载到数组上面收集依赖 扩展&#xff1a;理解Vue2如何解决数组和对象的响应式问题 对复杂对象的处理 复杂对…

【ThemeStudio】安装报错A Javascript error occurred in the main process

报错内容: 问题原因&#xff1a;系统环境缺少microsoft visual c插件 解决方法&#xff1a; 下载 微软VC 地址

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…

爬虫akamai案例:DHL国际物流

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、Akamai简介 Akamai是一家提供内容传递网络&#xff08;CDN&#xff09;和云服务的公司。CDN通过将内容分发到全球各地的服…

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…

call 和 apply:改变对象行为的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…