zoukankan      html  css  js  c++  java
  • javaweb-jsp基本属性与功能+jstl标签库

    1jsp

    本页面会用到的Jar(jstl.jar,standard.jar)

      这一块概念性比较强,代码容易理解,重在记忆与使用,部分指令属性截取自网络

      1.1 jsp是什么 java server page java服务端页面,本质上是一个servlet

      1.2 :既然本质上是servlet,那么什么时候会被编译成servlet?

          答:在被访问的时候会被编译成servlet,存放在tomcatwork目录(只有被访问之后才会生成,访问项目其它文件并不会生成)

      1.3 它的组成:一切能写在html中的代码(css,javascript)+java代码+jsp自身的属性方法

      1.4 重点:jsp嵌入java代码的方式

          (1)<%! %>:主要是用来定义成员变量,对应servlet中的类中方法外

          (2)<%= %>:用来向页面输出内容(servlet最大的不同之处,它可以很方便的向页面输出内容)对应servlet中所处的位置是service方法内

          (3)<%  %>:主要用来写java代码,servlet中的位置service方法中

           问:jsp中能否定义类,或者方法?

      1.5 特有注释:<%-- --%>(只存在源码阶段)

          html的注释<!-- --%>(浏览器查看源代码能看到的注释)

          java注释:写在嵌入java代码的地方,servlet中能看到(html也可以看到)

    2,jsp的指令

      2.1 三个指令 写法:<%@ 指令名称 属性="属性值"%>

      2.2 page指令

        2.2.1 用处:设置jsp页面信息

        2.2.2 写法:  <%@ page 属性="属性值"%>

        2.2.3 主要属性:

      (这里考虑用表格更加清晰)

    language:支持的语言类型(目前只支持java)

    extends:编译成servlet后继承的类,默认继承的是HttpJspBase

    session:是否可以直接使用session对象,默认值为true(配置之后,可以直接使用session,不用通过request获取)

    import:jsp中的java代码进行导包(可以写多行,也可以用,号隔开)

    buffer:设置jsp对客户端输出的缓冲区的大小(默认为8kb)

    autoFlush:如果对客户端输出的内容超出缓冲区能否正确输出(默认为true)

    errorPage:jsp页面出现异常,设置跳转的错误页面(这个很重要,写在可能出现异常的页面,当服务器宕机之类的情况下可以为客户提供解释说明)

    isErrorPage:在错误页面中是否显示错误信息

    java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

    if (exception != null) {

    response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    }

    (也可以自定义异常类输出信息,给予提示)

    使用exception对象 <%=exception.getMessage() %>     

            contentType:设置浏览器的编码

    pageEncoding:编译成servlet使用的编码,权限大于contentType

    isELIgnored:是否忽略el表达式,默认不忽略为false,忽略之后会作为普通文本

       其实开发中用的最多的就是import,session,errorPage,pageEncoding,其它的一般情况下要不就不用,要不就默认即可

     2.3 include(包含)指令

       2.3.1 用处:在一个页面中包含其它页面的内容,减少代码量,提高页面复用性(,就跟java的方法封装一样)

       2.3.2 静态包含,最终会编译成一个servlet

       2.3.3 注意事项:

     ①:在被包含的页面中,直接写内容(其它代码也会被包含,meta标签之类,但是没有意义,故而只写内容)

     ②:在被包含的页面不能使用变量传递(变量无意义)

       ③:被包含的页面路径后面不能加参数(不能传递信息)

     2.4 taglib指令

       2.4.1 用处:引用标签库

       2.4.2 写法:<%@ taglib uri="jstl标签库的路径" prefix="jstl标签库的别名";

       

     Taglib标签库

     jstl标签库

    1. 简介:

    1.1 JavaServerPages(javaweb页面) Standed(标准) Tag(标签) Library()

    1.2  使用jstl标签库,可以和jsp指令taglib一起使用,替代页面中的<% %>

    1.2.1 jstl版本 1.0,1.1,1.2

    1.3  使用方法:本身是第三方的jar,需要导包  (jstl.jar,standard.jar)

    1.3.1 jstl使用在jsp页面中,需要在jsp页面中引入标签库(jar包放到WEB-INF/lib下自动加载)

    <%@taglib uri="标签库路径" prefix="short-name" %>

    标签库路径:项目下Web_App_Librariesstandard.jar(变成奶瓶加载成功了)/META-INF/c.tld

    找到下面两行,复制到taglib的属性中

     <short-name>c</short-name>

       <uri>http://java.sun.com/jsp/jstl/core</uri>//可以快捷生成,注意路径别用错

       1.3.2写法

           <c:标签库名称 属性="属性值">

       1.4  入门案例

       <%--使用jstl标签库,java代码换成jstl表示出来 --%>

     <!-- 通过jstl定义变量 set,向域对象里面设置一个值-->

     <c:set var="d" value="30"></c:set>

     <!-- 条件判断  if标签-->

      <c:if test="${d==10}"> <!--注意el表达式"}"后面不要有空格-->

      <h2>d等于10</h2>

      </c:if>

      <c:if test="${d!=10}">

      <h2>d不等于10</h2>

     </c:if>

      2, jstlif标签

       2.1进行条件判断的标签

       2.2写法<c:if test="判断条件">

       2.3jstl没有<c:else>标签

       2.4用法

        <!-- 条件判断  if标签-->

      <c:if test="${d==10}"> <!--注意el表达式"}"后面不要有空格-->

      <h2>d等于10</h2>

      </c:if>

      <c:if test="${d!=10}">

      <h2>d不等于10</h2>

     </c:if>

      3, jstlforEach标签

      3.1  遍历的操作标签

      3.2 用处:获取域对象里面的数组,集合(list,set,map),多个对象的属性值

      3.3 写法<c:forEach var="每次遍历的值" items="域对象值的名称${名称}">

      3.4 使用forEach获取域对象数组的值

      <%--使用jstlforEach标签获取域对象里面的值 --%>

    <%

    //创建一个数组

    String arr[]={"张三","李四","王五"};

    pageContext.setAttribute("arr", arr);

     %>

     <%--使用El表达式获取 --%>

     ${arr[0] }

     <hr/>

     <%--使用forEach标签来获取 --%>

     <%--a类似增强for循环中的变量名 ,${}表示要遍历的内容--%>

     <c:forEach var="a" items="${arr }">

      ${a }

     </c:forEach>

     3.5 使用jstl标签获取域对象中集合的值

      3.5.1 获取域对象里面list集合的值

      <%--使用jstlforEach标签获取域对象里list集合的值 --%>

    <%

    List<String> li = new ArrayList();

      li.add("aaa");

      li.add("bbb");

      li.add("ccc");

      application.setAttribute("li", li);

     %>

     <%--el表达式获取 --%>

    ${li[0] }

    <hr/>

    <%--使用forEach标签获取list集合中的值 --%>

    <c:forEach var="b" items="${li} ">

     ${b } <hr/> <!--这里的结果带了个[]样式,待解决-->

    </c:forEach>  

      3.5.2 获取域对象里面set集合的值

      <%--使用jstlforEach标签遍历set集合 --%>

     <%

      Set<String> s1 =new HashSet();

      s1.add("123");

      s1.add("456");

      s1.add("789");

      pageContext.setAttribute("s1", s1);

       %>

        <!-- el获取不了 -->

        <c:forEach var="s" items="${s1 }">

       ${s }

       </c:forEach>

      3.5.3获取域对象里面map集合的值

        <%--获取域对象中Map集合的值 --%>

      <%

       Map<String,Integer> m1 =new HashMap();

       m1.put("a", 1);

       m1.put("b", 2);

       m1.put("c", 3);

       application.setAttribute("m1", m1);

       %>

      <!-- 使用el表达式获取值 -->

      ${m1.a }

      <hr/>

      <%--使用forEach标签获取 --%>

      <c:forEach var="m" items="${m1 }">

       ${m.key },${m.value }<br/>

      </c:forEach>

      

      3.6 使用forEach获取多个对象中的值

       <%--这里做jstlforEach获取多个对象的属性 --%>

    <%

    //因为使用forEach需要把对象放到域对象中,故而先把所有对象放到集合里

    //然后通过forEach依次获取每一个对象即可

    User u1 =new User("张三",23);

    User u2 =new User("李四",24);

    User u3 =new User("王五",25);

    User u4 =new User("赵六",26);

    //放到集合里

    List<User> li =new ArrayList();

    li.add(u1);

    li.add(u2);

    li.add(u3);

    li.add(u4);

    //把集合放到域对象中

    request.setAttribute("li", li);

     %>

     <%--通过forEach获取 --%>

     <c:forEach var="u" items="${li}">

      <p>${u.name }:${u.age }</p>

     </c:forEach>

  • 相关阅读:
    git指令累计
    vue里函数相互调用,包括watch监听事件调用methods里面的函数
    FPGA实战操作(2) -- PCIe总线(例程设计分析)
    FPGA实战操作(2) -- PCIe总线(协议简述)
    干掉Vivado幺蛾子(2)-- 快速替换debug probes
    FPGA基础学习(9) -- 复位设计
    UltraFast设计法实践(1) -- 初始设计检查
    《UltraFast设计法实践》系列目录
    干掉Vivado幺蛾子(1)-- Xilinx Tcl Store
    FPGA基础学习(8) --内部结构之存储单元
  • 原文地址:https://www.cnblogs.com/adventurer/p/5491383.html
Copyright © 2011-2022 走看看