JSP_EL_JSTL概述

JSP:(Java Server Page)
  1、什么是jsp:

    用于角度来说就是一个网页页面。实际上时一个继承了Servlet的java类。

  2、为什么需要jsp:

    HTML通常显示的内容都是一成不变的静态页面,但是实际情况中我们所需要的数据都应该是动态生成的,所以需要jsp生成动态页面

  3、jsp三大指令介绍:格式:<%@ 指令名字 %>

    1)<%@page %>属性介绍:

      language:表示jsp页面可以写入什么样的代码,比如java代码

      contentType:说明这个文件是什么类型,以及内容是什么样的编码方式

      pageEncoding:jsp内容编码

      extends:用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改(Servlet)

      import: 导包使用的,一般不用手写

      session:true/false,用于说明当前页面是否可以直接使用session对象。

        底层实现:true,调用getSession()创建内置的session对象;false,不创建session所以用不了    

      errorPage: 指的是错误的页面, 值需要给错误的页面路径  

      isErrorPage:上面的errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。

    2)<%@include %>:包含另外一个jsp的内容进来

      <%@ include file="xxxx.jsp"%>

      背后实现:将另一个jsp页面的所有内容拿过来一起输出。

    3)<%@taglib %>:

      <%@ taglib prefix=""  uri=""%>:uri: 标签库路径  prefix : 标签库的别名

  4、jsp动作标签:

    1)<jsp:include page=""></jsp:include>

      包含指定的页面,这里是动态包含。

      背后实现:不是把另一个jsp页面所有内容拿过来,而是把另一个jsp页面运行后的结果拿过来
    2)<jsp:param value="" name=""/>

      包含在某个页面或者跳转到某个页面时候,加入这个参数

  <jsp:forward page="xxx.jsp">
        <jsp:param value="beijing" name="address"/>
    </jsp:forward>
  <%= request.getParameter("address")%>

    3)<jsp:forward page=""></jsp:forward>

      跳转到另外的一个页面,类似于<% request.getRequestDispatcher("XXX.jsp").forward(request, response);%>

  5、jsp九大内置对象:(pageContext、request、session、application,page、response、out、exception、config)

    1)四大作用域对象:(pageContext,request,session,application)

      这些对象可以存取值,表示它们由一定的范围限定。

      a:存值,取值

    使用作用域来存储数据<br>
        <%
            pageContext.setAttribute("name", "page");
            request.setAttribute("name", "request");
            session.setAttribute("name", "session");
            application.setAttribute("name", "application");
        %>
        
        取出四个作用域中的值<br>
        <%=pageContext.getAttribute("name")%>
        <%=request.getAttribute("name")%>
        <%=session.getAttribute("name")%>
        <%=application.getAttribute("name")%>

      b:四大作用域对象的区别:        

        * pageContext 【PageContext】

        > 作用域仅限于当前的页面。

        > 还可以获取到其他八个内置对象。

        * request 【HttpServletRequest】

        > 作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。

        * session 【HttpSession】

        > 作用域限于一次会话(多次请求与响应) 当中。

        * application 【ServletContext】

        > 整个工程都可以访问, 服务器关闭后就不能访问了。

    2)其他内置对象:    

      exception 【Throwable】
      page 【Object】 ---就是这个jsp翻译成的java类的实例对象
      config 【ServletConfig】

      out 【JspWriter】
      response 【HttpServletResponse】

EL表达式:${表达式 }

  1、作用:

    是为了简化jsp页面中的那些java代码的书写

  2、默认的取值顺序

    如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。  一直把四个作用域取完都没有, 就没有显示。

  3、使用:

    取出作用域普通的值

    <%
            pageContext.setAttribute("name", "page");
            request.setAttribute("name", "request");
            session.setAttribute("name", "session");
            application.setAttribute("name", "application");
        %>
        
        按普通手段取值<br>
        <%= pageContext.getAttribute("name")%>
        <%= request.getAttribute("name")%>
        <%= session.getAttribute("name")%>
        <%= application.getAttribute("name")%>
        
        <br>使用EL表达式取出作用域中的值<br>
        ${ pageScope.name }
        ${ requestScope.name }
        ${ sessionScope.name }
        ${ applicationScope.name }

    作用域存储的是数组

    <%
         String [] a = {"aa","bb","cc","dd"};
         pageContext.setAttribute("array", a);
       %>
           
       使用EL表达式取出作用域中数组的值<br> 
       ${array[0] } , ${array[1] },${array[2] },${array[3] }

    作用域存储的集合

    <%
        List list = new ArrayList();
        pageContext.setAttribute("li", list);
       %>
    ${li[0] } , ${li[1] },${li[2] },${li[3] }
    <%
           Map map = new HashMap();
           map.put("name", "zhangsna");
           map.put("age",18);
           map.put("address","北京..");
           
           map.put("address.aa","深圳..");


           pageContext.setAttribute("map", map);
       %>
       使用EL表达式取出作用域中Map的值<br>
       
       ${map.name } , ${map.age } , ${map.address }  , ${map["address.aa"] }

  4、取值:注意如果取值可以用下标的时候,就用下标。不可以则用.的方式

    ${ array[1] }  ${ u.name }

  5、使用场景

    一般使用EL表达式比较多的地方,是从一个对象中取值

  6、EL表达式的11个内置对象

    1)作用域相关内置对象

      pageScope、requestScope、sessionScope、applicationScope

    2)头信息相关对象

      header、headerValues

    3)参数相关对象

      param、paramValues

    4)其他

      pageContext、cookie、initParam(全局初始化参数)

JSTL:

  JSP Standard Tag Library  jsp标准标签库

  1、作用:

    简化jsp代码编写,替换<%%>写法,一般与EL表达式一起使用

  2、使用步骤:

    导入jar包;在jsp的taglib中引入标签库;

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

    注意:如果想支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式。

  3、常用标签:   

    1)<c:set></c:set> 

     <!-- 声明一个对象name, 对象的值 zhangsan , 存储到了page(默认) , 指定是session -->
        <c:set var="name" value="zhangsan" scope="session"></c:set>
        
        ${sessionScope.name }

    2)<c:if test=""></c:if>

判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出 , c:if 是没有else的。 注意:test里面要使用EL表达式

        <c:set var="age" value="18" ></c:set>
        <c:if test="${ age > 26 }">
            年龄大于了26岁...
        </c:if>
        
        <c:if test="${ age <= 26 }">
            年龄小于了26岁...
        </c:if>


        定义一个变量名 flag  去接收前面表达式的值,然后存在session域中

        <c:if test="${ age > 26 }" var="flag" scope="session">
            年龄大于了26岁...
        </c:if>

    3)<c:forEach></c:forEach>

从1 开始遍历到10 ,得到的结果 ,赋值给 i ,并且会存储到page域中, step , 增幅为2, 
        <c:forEach begin="1" end="10" var="i" step="2">
            ${i }
        </c:forEach>


        -----------------------------------------------

        <!-- items : 表示遍历哪一个对象,注意,这里必须写EL表达式。 
        var: 遍历出来的每一个元素用user 去接收。 -->
        <c:forEach var="user" items="${list }">
            ${user.name } ----${user.age }
        </c:forEach>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

posted @ 2022-02-22 15:48  CGGirl  阅读(38)  评论(0编辑  收藏  举报