JSP学习笔记(总结)

2023-12-16 10:36:59

简介

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 自定义标签

文章来源:https://blog.csdn.net/m0_65939803/article/details/134937670
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。