zoukankan      html  css  js  c++  java
  • Servlet 之jsp(中)--EL

      JSP页面中很多时候,脚本都可以用el表达式来代替。在各种引用地址中,由于简便灵活,所以el被广泛应用。el使用时一般需要配合标签jstl,标签的版本各容器不同也有差异,使用时需要考虑到。

    ...
    <link rel="stylesheet"
        href="${pageContext.request.contextPath}/static/bower/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet"
        href="${pageContext.request.contextPath}/static/bower/bootstrap-datepicker/css/bootstrap-datepicker.min.css">
    <link rel="stylesheet"
        href="${pageContext.request.contextPath}/static/css/content.css" />
    ...

    基本的格式就是${表达式},要注意的是,如果想用表达式表达自定义的数据,那么该数据必须存放于域中,el表达式规定了4个作用域,pageScope, requestScope, sessionScope以及applicationScope,另外el规定了pageContext,相当于jsp中的PageContext对象。

      还有几个el的内置对象为:

      param 一个请求参数 ${param.username} request.getParameter("username");
      paramValues 一组 ${paramValues.loves} request.getParameterValues("loves");
      header 一个头 ${header.referer} request.getHeader("referer");
      headerValues 一组头 ${header.cookie} request.getHeaders("cookie");
      cookie 获得cookie对象
      initParam WEB项目初始化参数, servletContext.getInitParameter("xxx");

    共11个el的内置对象,所以页面取值也比较灵活,常用取值表达式如下:

    ${pageContext.request.queryString} 取得请求的参数字符串
    ${pageContext.request.requestURL} 取得请求的URL,但不包含请求参数字符串
    ${pageContext.request.contextPath} 取得服务的web application的名称
    ${pageContext.request.method} 取得HTTP的方法(GET、POST)
    ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
    ${pageContext.request.remoteUser} 取得用户名称
    ${pageContext.request.remoteAddr} 取得用户的IP地址
    ${pageContext.session.new} 判断session是否为新的。所谓新的session,表示刚由server产生而client 尚未使用
    ${pageContext.session.id} 取得session的ID
    ${pageContext.servletContext.serverInfo} 取得主机端的服务信息

    需要注意的是,如果请求头中有"-",那么需要用headerValues["Accept-Encoding"],另外测试cookie时,${cookie.key}指代的是cookie对象,如果要里面的名字与内容就直接表示为:${cookie.key.name}与${cookie.key.value}.

      ['']与.都是el中的运算符,大多时候二者可以等价使用,也可以混合使用,

        例如:${sessionScope.book.title} 获得book对象的title值
        等价 ${sessionScope.book["title"]}

        又如:${sessionScope.bookList[0]["title"]},

      如果属性值中包含了一些特殊字符,则我们也需要用['']运算符来对它进行取值。注意[]里要加引号,单双无所谓,但必须加。

    =========================================================>

      算术运算符:+ - * /(或div) %(或mod)

      关系运算符:== != >= <= > < (或:eq ne ge le gt lt) && || !(或and or not) 结果为true或者false

      empty运算符在判断是否为null "" 以及集合数组没有内容是很好用,返回true/false

      二元表达式

     =========================================================>

      引用el函数

      首先就是引用规范中提供用于处理输出内容的函数,需要在页面中加上:

    <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    <%@ page isELIgnored="false"%>

    el输出显示到页面的内容都是字符串,fn就是对字符串进行操作的函数库。

    ...
    <body>
        <hr>
        ${fn:contains("abc","a") }
        <br> ${empty str }
        <br> ${fn:escapeXml("<br/>") }<%--转义 --%>
        <br> ${fn:indexOf("changjiang.chen","i") }
    ...

     =========================================================>

      建立自己的el函数库:

      1 确定实现类(自定义,方法必须是static)
      2 编写配置文件(描述文件),通知tomcat实现类位置,tld文件标签描述文件
      3 jsp 使用自己函数库

    首先是定义一个static方法,

    public class MyElFunction {
        public static String myFunc(String str) {
            if (!str.equals("")) {
                return str + " success!";
            } else {
                return "kong";
            }
        }
    }

    在WEB-INF下任意位置建立一个tld文件,

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
        <tlib-version>1.1</tlib-version>
        <short-name>myfn</short-name>
        <uri>http://www.changhong.com</uri>
        <function>
            <name>myFunc</name>
            <function-class>com.test.el4t.MyElFunction</function-class>
            <function-signature>java.lang.String myFunc(java.lang.String)</function-signature>
        </function>
    </taglib>

    最后是在自己的jsp页面中进行引用:

    <%@taglib uri="http://www.changhong.com" prefix="myfn"%>
    <%@ page isELIgnored="false"%>
    
    ...
        <br> ${myfn:myFunc("This is a test my el function!") }
    </body>
    ...

    即可在页面中显示

    This is a test my el function! success!
  • 相关阅读:
    MySQL binlog中 format_desc event格式解析
    位bit和字节Byte
    MySQL利用mysqlbinlog模拟增量恢复
    mysqldump参数 --master-data详解
    开启MySQL二进制日志
    设置花里胡哨的Xshell字体与背景颜色(超全)
    Python操作MySQL数据库
    给定一个由括号([{)]}其中之一或多个组成的字符串判断是否符合左右括号成对标准,不同括号可任意嵌套
    给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
    不使用局部变量和for循环或其它循环打印出如m=19,n=2結果为2 4 8 16 16 8 4 2形式的串
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/5900794.html
Copyright © 2011-2022 走看看