我是靠谱客的博主 迷你爆米花,最近开发中收集的这篇文章主要介绍JSP学习笔记(二)---JSP标签和EL表达式JSP标签EL表达式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JSP标签

sun原生提供的标签,直接在jsp页面中就可以使用。
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jSP页面难以维护。

  • <jsp:include>:实现请求,属于动态包含。
  • <jsp:forword>:实现请求转发。
  • <jsp:param>
    :配合上面两个标签使用,在请求包含和请求转发时用来在路径后拼接一些参数。用在上面两个标签的开始和结束之间。例如:
<jsp:forward page="/index.jsp">
        <jsp:param name="name" value="duanyu" />
</jsp:forward>

在index.jsp页面里添加如下代码

<%=request.getParameter("name") %>

就可以在网页上输出name属性的值了。

EL表达式

EL全名为Expression Language。其基本格式为:${EL表达式 }
EL表达式的出现最初是想要取代JSP页面中的JSP脚本表达式,但是随着它的发展,其功能已经不限于此了。它主要有以下功能:

获取数据

tips:
1,使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外。
2,在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用。如果用双引号则是常量,直接使用常量的值。
3,EL表达式可以用来获取数据,但是却不能设置和遍历数据。

获取常量

字符串/数字/布尔类型可以直接写在EL表达式中,EL会直接进行输出。

<h1>获取常量</h1><hr>
    ${"我是一个字符串常量" }
    ${65535 }
    ${true }

获取域中的变量

如果EL中写的是一个变量的名,则el会调用pageContextfindAttribute()方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,则什么都不输出。

<h1>获取域中的变量</h1><hr>
    <%
        String name = "木婉清";
        pageContext.setAttribute("name", name);
     %> 
    ${name }

获取数组中的数据

    <h1>获取数组中的数据</h1><hr>
    <%
        String[] names = {"乔峰", "段誉", "虚竹", "王语嫣"};
        pageContext.setAttribute("names", names);
     %>
    ${names[2] }

获取集合中的数据

    <h1>获取集合中的数据</h1><hr>
    <%
        List<String> list = new ArrayList<String>();
        list.add("乔峰");
        list.add("段誉");
        list.add("虚竹");
        list.add("王语嫣");

        pageContext.setAttribute("list", list);
     %>
     ${list[3] }

获取Map中的数据

    <h1>获取Map中的数据</h1><hr>
    <%
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "Eric");
        map.put("age", "24");
        map.put("gender", "male");
        map.put("addr", "smwhere");

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

获取JavaBean的属性

新建一个JavaBean,代码如下:

package me.zipstream.domain;

public class Person {

    public Person(){}

    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }   
}

利用EL获取JavaBean中属性的代码:

    <h1>获取JavaBean的属性</h1><hr>
    <%
        Person p = new Person();
        p.setName("天山童姥");
        p.setAge(129);

        pageContext.setAttribute("p", p);
     %>
     ${p.name }
     ${p.age }

这里注意:不要忘记导包。
<%@page import="me.zipstream.domain.Person"%>

其实这里的${p.name }${p.age }并不是去访问类中的属性,而是调用类中相应的get方法。所以在以后写路径的时候,可以利用这个原理。例如:

<img src="${pageContext.request.contextPath }/1.jpg" />

其实就是调用了各自的get方法。

执行运算

算术运算

    <h1>算术运算</h1><hr>
    ${1+4 }
    ${2-5 }
    ${3*6 }
    ${5/2 }<!-- 结果为2.5 -->
    ${1+"3" }<!-- 会把"3"转成数字再做运算 -->
    <%-- ${1+'a' } 会报异常--%>

比较运算

    <h1>比较运算</h1><hr>
    ${1==1 } ${1 eq 1 }
    ${1<4 } ${1 lt 4 }
    ${1<=2 } ${1 le 2 }
    ${1>3 } ${1 gt 3 }
    ${1>=2 } ${1 ge 2 }
    ${1!=1 } ${1 ne 1 }
    <%--
        == : eq
        <  : lt
        <= : le
        >  : gt
        >= : ge
        != : ne
     --%>

逻辑运算

    <h1>逻辑运算</h1><hr>
    ${not(3>1 and 6<=2 or 4==4) }
    <%--
        && : and
        || : or
        !  : not
     --%>

结果为false

三元运算

    <h1>三元运算</h1><hr>
    ${100 > 99 ? "yes" : "no" }

empty运算

用来判断一个字符串是否为空 or 一个对象是否为null or 一个集合内容是否为空 or 一个域中是否没有任何属性。

    <h1>empty运算</h1><hr>
    <%
        String str = "";
        List list = new ArrayList();

        pageContext.setAttribute("str", str);
        pageContext.setAttribute("list", list);
     %>
    ${empty str }
    ${empty list }
    ${empty requestScope }
    ${empty pageScope }

结果为:truetruetruefalse

获取常用开发对象

EL表达式中有11个内置对象,这些对象不需要提前定义就可以直接在EL中使用。

  1. pageContext – 有了它可以很方便的获取jsp页面中的9大隐式对象
  2. pageScope – page域中属性组成的Map<String, Object>
  3. requestScope – request域中属性组成的Map<String, Object>
  4. sessionScope – session域中属性组成的Map<String, Object>
  5. applicationScope –application域中属性组成的Map<String, Object>
  6. param – 所有请求参数组成的Map<String,String>
  7. paramValues – 所有请求参数组成的Map<String,String[]>
  8. header – 所有请求头组成的Map<String,String>
  9. headerValues – 所有请求头组成的Map<String,String[]>
  10. cookie – 所有cookie信息组成的Map<String,Cookie>
  11. initParam – 所有web应用的初始化参数组成Map<String, String>

tips:
测试headerValues时,如果头里面有- ,例Accept-Encoding,则要${headerValues[“Accept-Encoding”] }
测试cookie时,例${cookie.key }取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name }${cookie.key.value }

调用Java方法

EL自定义函数开发与应用包括以下三个步骤:
1,编写一个Java类的静态方法。
2,编写标签库描述符(tld)文件,在tld文件中描述自定义函数。注意这个tld文件要存放在WEB-INF目录下除了classeslib以外的位置。
3,在JSP页面中导入(tablib指令)和使用自定义函数。

例子:编写一个函数,对给定的URL进行URL编码。在JSP文件中引入并使用这个自定义函数。
写一个类ELFunc.java,代码如下:

package me.zipstream.util;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class ELFunc {

    public static String MyEncode(String str, String encode){
        try {
            return URLEncoder.encode(str, encode);
        } catch (UnsupportedEncodingException e) {          
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

WEB-INF目录下新建一个tld文件MyELFunc.tld。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>MyELFunc</short-name>
 <uri>http://zipstream.me/MyELFunc</uri>
 <function>
    <name>URLEnc</name>
    <function-class>me.zipstream.util.ELFunc</function-class>
    <function-signature>java.lang.String MyEncode(java.lang.String, java.lang.String)</function-signature>
 </function>
</taglib>

新建一个jsp文件,引入并使用这个自定义函数。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://zipstream.me/MyELFunc" prefix="MyELFunc" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    ${MyELFunc:URLEnc("张无忌", "utf-8") }
  </body>
</html>

浏览器访问这个jsp,显示结果为:%E5%BC%A0%E6%97%A0%E5%BF%8C

其实,在javaEE5.0版本以后,已经内置了JSTL标签库。可以直接在jsp文件中引入并使用这些标签。例如:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    ${fn:toUpperCase("asdfasdfKJKJKJdsagHIHidsfgGUGu") }
  </body>
</html>

浏览器输出结果:ASDFASDFKJKJKJDSAGHIHIDSFGGUGU

最后

以上就是迷你爆米花为你收集整理的JSP学习笔记(二)---JSP标签和EL表达式JSP标签EL表达式的全部内容,希望文章能够帮你解决JSP学习笔记(二)---JSP标签和EL表达式JSP标签EL表达式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部