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>

原文地址:https://www.cnblogs.com/adventurer/p/5491383.html