JSP、EL、JSTL

一、JSP

1、什么是JSP

从用户角度来看,就是一个网页,从程序员角度看待,其实是一个Java类,它继承了servlet,所以可以直接说jsp就是一个servlet

2、为什么有JSP

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

3、怎么用JSP

  3.1、三个指令

   指令写法:  <%@ 指令名字 %>

   1、page指令:

    *language:表示JSP可以写Java代码

    *contentType:说明文件是什么类型,告诉浏览器是什么内容类型以及用什么编码    

      contentType="text/html;charset=UTF-8"

      text/html MIMEType 这是一个文本,html网页

    *pageEncoding JSP内容编码

    *extends用于指定JSP翻译成Java文件后,继承的父类是谁,一般不用该

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

    *session

      可选值有true or false

      用于控制在这个JSP页面里面,能够直接用session对象

      具体的区别是:查看翻译后的Java文件,如果该值是true,那么在代码里面会有getSession()的调用,

      如果是false:那么就不会有该方法的调用,也就是没有session对象。在页面上自然就不能使用session了。

    *errorPage

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

    *isErrorPage

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

   2、include指令:

      包含另外一个JSP的内容进来:<%@ include file="other.jsp"%>把另外一个页面的内容拿过来,所有元素标签都包含进来

   3、taglib指令:

      <%@ taglib prefix="" uri=""%>       uri:标签库路径,prefix:标签库的别名(固定搭配)

  3.2、三个动作标签

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

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

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

  jsp:include

    包含指定的页面,这里是动态包含,也就是把包含的页面所有元素标签全部

  jsp:forword

    前往哪一个页面。

   和<% request.getRequestDispatcher("").forward(request,response); %>效果相同

  jsp:param

    意思是:在包含某个页面的时候,或者在跳转到某个页面的时候,加入这个参数。

    

    <jsp:forward page="03.jsp">
        <jsp:param value="address" name="beijing"/>
    </jsp:forward>

  <%= request.getParameter("address")%>//在03.jsp中获取传入的值

  3.3、九个内置对象

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

    - pageContent

    - request

    -session

    -application

    以上是四个作用域对象(作用域:表示这些对象可以存值,我们的取值范围有限定。setAttribute和getAttribute)

        使用作用域来存储数据<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")%>                

    作用域范围大小:pageContext(作用域仅限于当前页面,还可以获取到其他八个内置对象) -- request(作用域仅限于一次请求,

    只要服务器对该请求做出了响应。这个值域中存的值就没了) -- session(作用域仅限于一次会话(多次请求与响应)当中) 。

    -- application(整个工程都可以访问,服务器关闭后就不能访问了)

    -out

    -response

    -exception

    -page

    -config

二、EL表达式

  是为了简化JSP代码,具体一点就是为了简化在JSP里面写的那些Java代码。

  *写法格式:${表达式}

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

1、如何使用  

  1.1、取出四个作用域中存放的值

<%
    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 }
<br>

  1.2、如果域中所存的是数组

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

  1.3、如果如果域中锁存的是集合

<%
    Map map=new HashMap();
    map.put("name", "zhangsan");
    map.put("age", 18);
    map.put("address", "北京..");

    map.put("address.aa", "深圳..");

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

  1.4、取出Map集合的值

<br>--------------Map数据--------------<br>
<%
    Map map=new HashMap();
    map.put("name", "zhangsan");
    map.put("age", 18);
    map.put("address", "北京..");

    map.put("address.aa", "深圳..");

    pageContext.setAttribute("map", map);
%>
${ map.name },${ map.age },${ map.address },${ map["address.aa"] }

2、取值细节    

  2.1、从域中取值。得先存值

<%
    session.setAttribute("name", "张三");
%>

<b>通过pageScorpe查找的结果为:</b>
${pageScorpe.name}<!-- 直接指定去pageScropename作用域找name -->
<br>

<b>直接查找结果为:</b>
${ name }<!-- 从page里找,如果没有去request中找,如果没有去session找,如果还没有去application中找 -->
<br>

<b>通过sessionScorpe查找的结果为:</b>
${ sessionScope.name }

  2.2、取值方式

  如果这份值是有下标的,那么直接使用[],如果没有下标,直接使用.的方式去取。

<%
    String[] array = {"aa","bb","cc","dd"};
    session.setAttribute("array", array);
%>
<%
    User user = new User("zhangsan",18);
    session.setAttribute("u", user);
%>

<b>这是用下标取到的内容:</b>
${ array[0] },${ array[1] },${ array[2] },${ array[3] }
<br>

<b>这是没有下标的情况</b>
${ u.name },${ u.age }

  以上代码运行效果如下:

  一般使用EL表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某个学生的姓名

3、EL表达式11个内置对象  

${对象名.成员}

-pageContext

作用域相关的对象

-pageScope

-requestScope

-sessionScope

-applicationScope

头信息相关对象

-header

-headerValues

参数相关对象

-param

-paramValues

-cookie

全局初始化参数

-initParam

三、JSTL

全称:JSP Standard Tag Library(JSP标签标准库)

简化JSP的代码编写。替换了<% %>写法。一般与EL表达式配合

1、怎么使用

1.1、导入jar文件到工程的WebContent/Web-Inf/bin jstl.jar standard.jar

1.2、在JSP页面上使用taglib指令来引入标签库

2、常用标签

<c:set></c:set>

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

<c:forEach></c:forEach>

*c:set

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

${sessionScope.name}

*c:if

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

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

*c:forEach

<!-- 从1开始遍历到10,步长为2,得到的结果赋值给i,存储到page区域 -->
<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",28));
	list.add(new User("wangwu",38));
	list.add(new User("maliu",48));
	pageContext.setAttribute("list", list);
%>
<!-- var:遍历出来的每个元素用user去接收。item:表示遍历哪一个对象,注意,这里写的必须是EL表达式 -->
<c:forEach var="user" items="${list }">
	${user.name }--------${user.age }<br>

原文地址:https://www.cnblogs.com/wangbobobobo/p/9854411.html

时间: 2024-10-18 14:10:49

JSP、EL、JSTL的相关文章

Taglib、EL、OGNL

Taglib.EL.OGNL 阅读目录 1. Taglib(tag library) 标签库 2. EL(Expression Language) 表达式 3. OGNL(Object-Graph Navigation Language) 对象图航语言 本篇主要是自己对 JavaWeb中 EL.OGNL.Taglib 个人理解. 因为以上内容都是在 JSP 的基础下产生的概念, 首先得说说我眼中的 JSP. 她自由的.奔放的,就像辽阔的大海,跨越任何服务器屏障.运行在各种平台. 她能容纳下各种形

Jsp应用EL和JSTL实例对比。

普通方式: register.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

jsp与El,jstl知识点总结归纳

jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: <%@ page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util

第75节:Java的中的JSP,EL和JSTL

第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转发请求1次,只能对当前项目跳转,重定向请求2次.重定向是无法传递的,重定向对跳转范围没有限制. Cookie是服务器发送给客户端,存储在客户端的小数据.发送cookie: Cookie cookie = new Cookie("key", value"); response.ad

[Java] JSP笔记 - EL、JSTL 常用标签

一. 什么是 EL 语言 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言. 二.EL 语言的作用 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法.它是一种简单的语言,基于可用的命名空间(PageContext 属性).嵌套属性和对集合.操作符(算术型.关系型和逻辑型)的访问符.映射到 Java 类中静态方法的可扩展函数以及一组隐式对象. 三.使用 EL 语言前的配置

JSTL、EL、ONGL、Struts标签的区别与使用

 一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以使用定制标签库,Jstl使JSP开发开发者可以减少对脚本元素的需求,甚至可以不需要它们. 定义 JSTL(JSP StandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持JSP1.2和Ser

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务器端执行的,不同的是JSP先由服务器编译部署成Servlet执行. JSP技术的企业最佳实践(生成HTML内容) 新的JSP2.0规范版本包括新的功能(EL表达式,新增的Simple Tag和Tag

杂谈 Taglib、EL、OGNL

本篇主要是自己对 JavaWeb中 EL.OGNL.Taglib 个人理解. 因为以上内容都是在 JSP 的基础下产生的概念, 来聊聊我眼中的 JSP. 她自由的.奔放的,就像辽阔的大海,跨越任何服务器屏障.运行在各种平台. 她能容纳下各种形式的代码和标签库,Java 原生代码.JSTL 表达式.Struts Taglib .JSF Taglib .Webwork Taglib ....任何人自定义的各种标签. Web 视图层的基本思想已被 JSP 阐述的淋漓尽致,但 IT 领域人们不喜欢阳关积

Java实战之01Struts2-05contextMAP、EL、OGNL

十五.contextMap 1.动作类的生命周期 明确:动作类是多例的,每次动作访问,动作类都会实例化.所以是线程安全的.与Struts1的区别是,struts1的动作类是单例的. 2.请求动作的数据存放 问题: 每次请求时,都会产生一些请求数据,这些数据存放到哪里去了?  明确: 在每次动作执行前,核心控制器StrutsPrepareAndExecuteFilter都会创建一个ActionContext和ValueStack对象.且每次动作访问都会创建. 这两个对象存储了整个动作访问期间用到的