【web基础】JSP进阶

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LoveHYZH/article/details/79337759

1.JSP页面自动刷新

  • 利用response对象的setIntHeader()方法
public void setIntHeader(String header, int headerValue)

这里header就写Refresh,其他怎么写我也不太清楚,待学习

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>HelloWorld</title>
  </head>
  <body>
  <%!int i = 0; %>
    <%
      response.setIntHeader("Refresh", 5);
    %>
  <%=i++ %>
  </body>
</html>
  • 由上面示例探讨一下JSP声明的作用范围
    • 作用域是当前JSP页面,毋庸置疑
    • 只要服务器没初期,任何人访问当前页面或者访问后又刷新都会经过过滤器Filter,变量i都会自增1,直到服务器关闭才重新回到初始的0

2.EL表达式

  • EL内置对象
    pageScope 获取page域属性组成的Map
    requestScope 获取reqeust域属性组成的Map
    sessionScope 获取session域属性组成的Map
    applicationScope 获取application域属性组成的Map
    pageContext 获取jsp的9大隐式对象, 如 ${pageContext.request}
    initParam 获取在web.xml配置的WEB应用参数
    param 请求参数Map<String,String>, 如:${param.userName}
    paramValues 请求参数Map<String,String[]>, 如: ${paramValues.userName[1]}
    header 请求头Map<String,String[]>, 如: ${header[“Accept-Language”] }
    headerValues 请求头Map<String,String[]>
    cookie 获取cookie对象, 如 ${cookie.JSESSIONID.name} ${cookie.JSESSIONID.value}
  • EL语法
    • 常量(直接输出到HTML)
      ${“字符串”},${123},${true}
    • 变量(在四大域搜寻)
      ${userName} 在依次四大域搜寻变量名的值,不存在则返回 “” (相当于 <%= pageContext.findAttribute(“userName”) %>)
      ${pageScope.userName}
      ${requestScope.userName}
      ${sessionScope.userName}
      ${applicationScope.userName}
    • 搜寻数组/集合对象
      ${myList[0]}
    • 搜寻map对象
      ${myMap.key} 如存在键值对bread和价格,${price.bread}就得到价格
      ${myMap[“key-first.last”]} key名是数字或特殊符(.-),必须用[]
    • 搜寻javaBean对象
      ${user.getName()} 相当于 <%=user.getName()%>
      ${user.name}
      ${user[“name”]
      不能这样写:${user[name]}
    • 简单运算
      • 算术运算(+、-、*、/、%)
        ①除法不是整除
        ②“+”不能拼接,只能做加法
        ③如果字符串可以转化成数字则可以做运算
        ④两端空格不影响,但是在数字字符串之间有空格则报错
      • 关系运算(>、<、>=、<=、==、!=)
      • 逻辑运算(&&、||、!)
      • 三元表达式
        ${3==3 ? “Y” : “N”}
        El表达式不能嵌套,当比较的部分是从之前传过来值时,要想别的办法
      • 域中指定的属性是否空(empt、not empty)
        ${empty person.name},${not empty person.name}
        empty运算在以下四种情况下,返回true
        • 根据绑定名未找到绑定值
        • 绑定值是 “”
        • 绑定值是null
        • 集合的长度为0
表达式
${1 + 1} 2
${5 * 5} 25
${40 / 8} 5.0
${5 / 3} 1.6666666666666667
${6 - 9} -3
${10 % 3} 1
${1 + “2”} 3
${“1” + “2”} 3
${1 + “2s”} 报错:500
${3==3 ? “Y” : “N”} Y
${not empty person.name} true

3.JSTL标签

  • 下载JSTL标签库

一般使用JSTL1.1以上版本,现在最新版是JSTL1.2.5
在Apache Tomcat官网下载JSTL标签库(Taglibs)
下载地址: http://tomcat.apache.org/download-taglibs.cgi
下载页面有4个jar包:
     Impl:    taglibs-standard-impl-1.2.5.jar JSTL实现类库
    Spec:    taglibs-standard-spec-1.2.5.jar JSTL标准接口
    EL:    taglibs-standard-jstlel-1.2.5.jar JSTL1.0标签-EL相关
    Compat:    taglibs-standard-compat-1.2.5.jar 兼容版本
从README得知:
如果不使用JSTL1.0标签,可以忽略taglibs-standard-jstlel 包,
README没有介绍taglibs-standard-compat包,估计应该是兼容以前版本标签库,
所以一般只需要 taglibs-standard-impl 和 taglibs-standard-spec 两个jar包
Maven依赖配置如下:

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
</dependency>

把上述两个jar包加到项目,或者复制到Tomcat/lib(所有项目都可以共用,一劳永逸)

  • 核心标签库
  • 常用标签
  • <c:if>
<!--name取自转发前的request-->
<c:if test="${name == 'jack'}" var="name1" scope="page">
    name is jack!
</c:if>
<br/>
<!--name1存储上面test的结果,是true或者false,可以用EL表达式继续取值-->
<!--若是var是name,那么实际上是重新赋值,name不是jack而是true-->
<c:if test="${name1 != 'jack'}" var="name" scope="page">
    name1 is not jack!
</c:if>
<!--此处没有else标签-->
属性 描述
test 条件(必填属性)
var 用于存储条件结果的变量
scope var属性的作用域(默认page)
  • <c:choose>、<c:when>、<c:otherwise>
    用这个可能比<c:if>要好一些
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:choose>
    <c:when test="${salary == 4000}">
        true,your salary is ${salary}
    </c:when>
    <c:otherwise>
        false,your salary is ${salary}
    </c:otherwise>
</c:choose>
  • <c:foreach>
属性 描述 是否必要 默认值
items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称

varStatus的属性
current:当前这次迭代的(集合中的)项
index:当前这次迭代从 0 开始的迭代计数(第几个)
count:当前这次迭代从 1 开始的迭代计数(第几个)
first:用来表明当前这轮迭代是否为第一次迭代的标志,返回true/false
last:用来表明当前这轮迭代是否为最后一次迭代的标志,返回true/false

<!--循环列表-->
<c:forEach items="${list}" var="it"  varStatus="st">
    ${it}----迭代变量,表示list中每一项,等价于${st.current}
    ${st.index}----当前索引
</c:forEach>

<!--循环Map-->
<c:forEach items="${map}" var="it" varStatus="st">
     ${it.key}:${it.value}
     ${st.current}--格式为:key=value
 </c:forEach>

<!--循环计数,类似for循环-->
<c:forEach var="i" begin="1" end="10" step="2" varStatus="st">
    ${i}
</c:forEach>
  • <c:forTokens>
    标签与标签有相似的属性,不过还有另一个属性:
属性 描述 是否必要 默认值
delims 分隔符
<!--把字符串按分隔符分开成数组,result代表数组的每一项-->
<c:forTokens items="sdfa,fsad,fds" delims="," var="result">
    ${result}<br>
</c:forTokens>


  • fmt标签库

<f:mt:formatDate>属性
<f:mt:formatNumber>属性

<!--格式化日期-->
<!--var属性是必须的-->
<f:formatDate value="<%=new Date()%>" pattern="yyyy年MM月dd日 HH:mm:ss" var="date" scope="request" />
<!--上面是转换日期到字符串,并存储在date变量中,要用还得EL取-->
${requestScope.date}
<!--格式化数字-->
<!--这里var不是必须的,没有则直接显示值,有则不显示,把值存在var变量中-->
<f:formatNumber type="percent"  minFractionDigits="10" value="${balance}"/>

猜你喜欢

转载自blog.csdn.net/LoveHYZH/article/details/79337759