6.JSP & EL & JSTL

JSP & EL & JSTL

JSP

Java Server Page

  • 什么是jsp

从用户的角度讲,就是一个网页,从程序员的角度看待,她继承了servlet,所以可以直接说servlet是一个Servlet

  • 为什么会有jsp

html多数情况下用来显示静态内容,但是有时候我们需要在网页上显示一些动态数据,比如:查询所有的学生信息,根据姓名去查询具体某个学生。
这些动作都需要去查询数据库,然后再网页上显示,html是不支持写java代码的,但是jsp里面可以写java代码。

怎么用JSP

JSP指令

指令格式
  <%@ 指令名称 %>
3个指令
  • page指令

    • language

    表明jsp页面中可以写java代码

    • contentType

    表明文件类型,告诉浏览器是什么类型的能美容,以及用的什么解码

        contentType="text/html; charset=UTF-8"
        text/html   MIMEType 这是一个文本文件,html网页
        audio/mpeg  这是一个MP3音频文件
        video/mp4   这是一个MP4视频文件
        ... ...
        查看%tomcatHOME%/conf/web.xml
    
    • pageEncoding

    jsp内容编码

    • extends

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

    • import

    导入包使用

    • session

    可选值有true & false
    用于控制这个jsp页面里面,能够直接使用sessio对象
    具体的区别是,翻译后的Java文件中,如果值是true,那么代码里面会有getSession()的调用,如果是false,那么不会有该方法,即无法使用session。

    • errorPage

    指的是错误的页面,值需要给出错误时跳转的页面路径

    • isErrorPage

    声明某一页面是否是发生错误后跳转到的页面

  • include指令

包含另外一个jsp的内容进来,几把另一个页面的所有标签全部包含进来

    <%@ include file="index02.jsp" %>
  • taglib指令
    <%@ taglib prefix="" uri="" %>
    uri:标签路径
    prefix:标签库的别名

jsp动作标签

  • jsp:include

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

包含指定的页面,这里是动态包含,即不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。

  • jsp:forward

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

前往哪一个页面,相当于请求转发

    <% request.getRequestDispatcher("index02.jsp").forward(request, response);%>
  • jsp:param

    <jsp:param value="" name=""/>

    在包含某个页面的时候,后者再跳转某一个页面的时候,加入这个参数

    • 在index.jsp中发布参数
            <jsp:forward page="index02.jsp">
                <jsp:param value="beijing" name="address"/>
            </jsp:forward>
      
    • 在index02.jsp中获取参数
             <%= request.getParameter("adress") %>
      

jsp内置对象

所谓内置对象,就是我们可以直接在jsp页面中使用这些对象,不用创建

  1. pageContext
  2. request
  3. session
  4. application

    以上四个是作用域
  • 作用域

表示这些对象可以存值,但取值范围有限 setAttribute 和 getAttribute

    <!-- 使用作用域来存储数据 -->
       <%
           pageContext.setAttribute("name", "pageContext");
           request.setAttribute("name", "request");
           session.setAttribute("name", "session");
           application.setAttribute("name", "application");
       %>
    <!-- 取出四个数据域的值 -->
      <%= pageContext.getAttribute("name") %>
      <%= request.getAttribute("name") %>
      <%= session.getAttribute("name") %>
      <%= application.getAttribute("name") %>
  • 四个作用域的区别
    • pageContext 【PageContext】

    作用域仅限于当前页面

    • request 【HttpServletRequest】

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

    • session 【HttpSession】

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

    • application 【ServletContext】

    整个工程中都可以访问,服务关闭后就不能访问

  • 其他对象
    • exception 【Throwable】

    在页面配置为<%@ isErrorPage="true" %>时才能使用

    • page 【object】

    就是这个jsp翻译成的java类的实例对象

    • config 【ServletCoonfig】
    • out 【JspWriter】
    • response 【HttpServletResponse】
    • 在这里插入图片描述

EL表达式

取值方法

  • 普通取值方法
      !-- 使用作用域来存储数据 -->
      <%
		     pageContext.setAttribute("name", "pageContext");
		     request.setAttribute("name", "request");
		     session.setAttribute("name", "session");
		     application.setAttribute("name", "application");
      %>
      <!-- 取出四个数据域的值 -->
      <%= pageContext.getAttribute("name") %>
      <%= request.getAttribute("name") %>
      <%= session.getAttribute("name") %>
      <%= application.getAttribute("name") %>
  • 使用EL表达式取作用域中的值
      ${pageScope.name }
      ${requestScope.name }
      ${sessionScope.name }
      ${applicationScope.name }
  • 使用EL表达式取数组中的值
      <%
        String [] a = {"aa","bb","cc"};
        pageContext.setAttribute("array", a);
      %>

      ${array[0] } ${array[1] } ${array[2] }
  • 使用EL表达式取集合中的值
      <%
        List list = new ArrayList();
        list.add("11");
        list.add("22");
        list.add("33");
        pageContext.setAttribute("list", list);
      %>

      ${list[0] } ${list[1] } ${list[2] } ${list[3] }
  • 使用EL表达式取Map中的值
      <%
         Map map = new HashMap();
         map.put("name", "张三")	;
         map.put("age", 18)	;
         map.put("addrss", "beijing");
         pageContext.setAttribute("map", "map");
      %>

      ${map.name } ${map.age } ${map.address }

取值细节

  • 1.如果值是有下标的,那么直接使用[]
      <%
        String [] a = {"aa","bb","cc"};
        pageContext.setAttribute("array", a);
      %>
      
      ${array[0] } --->这里的array是arribute里面的name
  • 2.如果没有下标,直接用 . 的方式去取
     <%
     	User user = new User("zhangsan",18);
	session.setAttribute("u",user);
      %>
      
      ${ u.name } ${ u.age }

EL表达式的11个内置对象

  • JSP 相关
    • pageContext

    对应于当前页面的chuli

  • 作用域 相关
    • pageScope

    与页面作用域属性的名称和值相关联的Map类

    • requestScope

    与请求作用域属性的名称和值相关联的Map类

    • sessionScope

    与会话作用域属性的名称和值相关联的Map类

    • applicationScope

    与应用程序作用域属性的名称和值相关联的Map类

  • 请求参数 相关
    • param

    按名称存储请求餐宿的主要指的Map类

    • paramvalue

    间请求参数的所有值作为String数组存储的Map类

  • 请求头 相关
    • header

    按名称存储请求头主要参数的Map类

    • headerValue

    将请求头的所有值作为String数组存储的Map类

  • Cookie 相关
    • ookie

    按名称存储请求附带的Cookie的Map类

  • 初始化参数 相关
    • initParam

    按名称存储Web应用程序上下文初始化参数的Map类

JSTL

全称 : JSP Standard tag Library
讲话jsp的代码编写,使用taglib指令来引入标签库

JSTL的使用

  1. 导入jar文件到工程的WebContent/Web-Inf/lib
  • jstl.jar
  • standar.jar

2.在jsp页面上,使用taglib指令

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

常用标签

<c:set></c:set>

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

<c:forEach></c:forEach>

  • c:set
	<!-- 	声明一个对象name,对象的值为zhangsan -->
	<!-- 对象默认存储到page,这里我们指定为session -->
	<c:set var="naem" value="zhangsan" scope="Session"></c:set>

	 ${ sessionScope.name };
  • c:if

判断test里的表达式是否满足,如果满足,就执行c:if标签中的输出

	 <c:set var="age" value="18"></c:set>
	 <c:if test="${ age > 16 }">
	     年龄大于16 
	  </c:if>
	  
	  <!-- 定义一个变量名,去接收前面表达式的值,存在session域中,并打印 --> 
	  <c:set var="age" value="18"></c:set> 
	  <c:if test="${age > 16 }" var="flag" scope="session"> 
		${ sessionScope.flag } 
	
	  </c:if> 
  • c:forEach
	<!--  从1开始遍历到10,得到的结果,赋值给i,并且存储到page域中,增幅(step)为2 -->
	<c:forEach begin="1" end="10" var="i" step="2" >
	    ${ i }
	</c:forEach>
	<%     
		List list = new ArrayList();
		list.add(new User("zhangsan",18));
		list.add(new User("lisi",16));
		list.add(new User("wangwu",17));

		pageContext.setAttribute("list",list);     			      
	%>

	<!-- items : 表示遍历哪一个对象,这里必须写EL表达式 -->
	<!-- value : 便利出来的每一个元素用user去接收 -->
		<c:forEach var="user" items="${list }">
			姓名 : ${user.name }
			年龄 : ${user.age }
		</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值