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 自定义标签
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!