【JavaEE笔记】JSP学习

讨论命令include和jsp-include的区别

例如:<%@ include file=”B” %>和<jps:include page= “C” >
  • 带@的是jsp命令,静态包含:

    A、B放在一起 --> 翻译 --> 编译 --> 执行 --> 生成HTML
    
  • 带jsp的,动态包含:

    A编译 –-> C编译 --> C、A分别执行 -->C结果加入到A结果 –-> 生成HTML
    

动态包含意味着执行jsp的时候,都需要对两个文件分别进行编译、执行,然后将两个计算的结果进行合并,比较耗时;静态包含是把代码进行合并,一起编译,执行。

JSP的配置

配置分为两种

  1. 在JSP的文件头中加入page命令标签(<%@page%>)
  2. 在部署描述符(即web.xml文件)中进行配置。

在page命令标签中配置,仅对当前文档生效;在web.xml配置,对所有匹配的jsp文件生效。

在部署描述符中定义(web.xml)

在web.xml中,每个标签的顺序不能颠倒。<include-prelude>是静态包含在文件的头,<include-coda>是静态包含在文件尾。

<jsp-config>
    <jsp-property-group>
       <url-pattern>*.jsp</url-pattern><!--只有匹配到的jsp会使用下面的配置,按照精度最高进行匹配-->
       <page-encoding>utf-8</page-encoding><!--jsp页面的编码格式-->
       <scripting-invalid>false</scripting-invalid><!--支持script脚本标签(<%%>这样的标签)-->
       <include-prelude>/WEB-INF/jsp/base.jspf</include-prelude><!--在所匹配的jsp头部添加代码-->
       <include-coda>/WEB-INF/jsp/footer.jspf</include-coda><!--在所匹配的jsp尾部添加代码-->
       <trim-directive-whitespaces>true</trim-directive-whitespaces><!--去掉jsp编译成html后的空白-->
       <default-content-type>text/html</default-content-type><!--默认的content-type-->
    </jsp-property-group>
</jsp-config>

EL表达式

EL表达式用来替换JSP中的java代码,如果把它看做有返回值的函数的话,它的返回值永远是字符串,因此可以将EL表达式用于css中的value中。

EL表达式的基本形式

  1. EL表达式具体的格式:${expr}
  2. expr是一个返回字面值类型的表达式,该表达式的形式可以为如下:

    • EL内置的运算:比较运算、逻辑运算、普通运算、empty、unary,其中==equals()方法等同
    • EL内置的函数

      例如:${fn:join({“tom”, “jarry”, “garry”}, “,”)}的结果为: “tom,jarry,garry
      • ${fn:contains(String, String)}:测试第一个参数是否包含一个或者多个第二个参数。
      • ${fn:length(Object)}:获得Object的
      • ${fn:trim(String)}
      • ${fn:escapeXml(String)}:避开那些特殊的字符,如>替换为&lg;&替换为&amp;
      • ${fn:join(String[] src,String delimit)}:将src变成字符串,用delimit进行链接。

在JSP中引入标签库:<%@ taglib prefix= “fn” uri= http://java.sun.com/jsp/jstl/functions %>才能使用内置函数。

  1. EL调用对象中的方法${user[“name”]}
  2. EL中字符串的拼接${“hello” += “Word”},使用“+=”符号进行字符串的拼接。

EL表达式使用作用域对象

  1. pageContext:表示本页面的对象,可以通过它获得ServletRequest对象、HttpSession对象等许多对象,这些对象不同于Scope,这些对象含有一些自身的属性和方法。
  2. Scope对象:这类对象是一个Map容器,Map拥有的操作可以在Scope中使用。下列中的Scope是按照作用域进行排序的:
    • pageScope:作用域最小,仅能用于当前的页面,局部变量
    • requestScope:request范围的变量
    • sessionScope
    • applicationScope:作用域最大
  3. 如果四个作用域变量都有一个a属性,${a}优先调用离自己最近的变量(pageScope离它最近,applicationScope离它最远)
    JSTL标签
  4. <c:out value= "..." escapeXml="false"/>:escapeXml属性默认为true,就是说会对value中的值进行${fn:escapeXml(String)}处理。

JSTL标签中总是:非自闭合的时候,html为其默认值;自闭合的时候,default属性设置默认值。

  1. <c:url value= “..” />、<c:redirect url= “” />等包含url的JSTL标签中:

    • 都有一个属性context用于指定应用的路径,默认为当前应用。因此该标签会自动添加应用
    • 非自闭合的时候,可以拥有<c:param name= “” value= “” />子标签
  2. 循环
    <c:forEach var= “i” begin= “0” end= “100” step= “1”varStatus= “status”>
        ...
    </c:forEach>
    /// 等同于:
    for(int i=0; i<=100/*注意:循环次数是101次*/;i+=1){
        ...
    }

    <c:forEach items= “users” var= “user” varStatus= “status”>
        ${useer[“name”]}
    </c:forEach>
    /// 等同于:
    for(User user : users) {
        System.out.println(user.getName());
    }

    <c:forEach items= “map” var= “entry” varStatus= “status”>
        ${entry.getValue()}
        ${entry.getKey()}
    </c:forEach>
    等同于
    Set<Map.Entry<String,String>> entries = map.entrySet();
    for(Map.Entry entry : entries) {
        System.out.prinln(entry.getValue());
        System.out.prinln(entry.getKey());
    }

其中,step默认值是1,是每次循环的步长。status是内置的一个拥有循环信息的变量,例如:

${status.begin}:循环开始的index
${status.index}:当前index处的值

items表示数据集变量的名字。当items为map时,会自动将items转变为Map.Entry的集合,即调用Map.entrySet(),然后对该集合进行遍历。
6. <c:forTokens items= “This,is,a,nice,tag” delims= “,”></c:forTokens>:该标签会分离字符串,分离的依据是delims,所有的items中的值都会被当作字符串处理。
7. <c:import>用来请求其他页面的内容,镶嵌到本页面中
8. <c:choose>中必须至少含有一句<c:when>标签;<c:when>标签必须在<c:choose>中。第二句<c:when>开始,等同于else if,并非是if

    <c:choose>
        <c:when test="${i}>50">...</c:when>
        <c:when test="${i}>5">...</c:when>
        <c:otherwise>...</c:otherwise>
    </c:choose>
    //等同于
    if(i > 50) {...}
    else if (i > 5) {...}
    else {...}
  1. 操作作用域变量
<c:remove var= "a" scope="request"/> // 如果没有指定scope时,所有的作用域变量的a属性均会被删除
<c:set var="myVariable" value="hello world" /> // 中的scope默认是pageScope,而不是匹配全部scope
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值