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" %>

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!
时间: 2024-10-29 03:21:33

Servlet 之jsp(中)--EL的相关文章

JSP 中EL表达式用法

JSP 中EL表达式用法详解 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =u

jsp中el表达式遇见的问题

概述: 之前在jsp页面展示中就遇见过几次这样的问题,今天来说一下我遇到的 org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/list.jsp at line 58 异常: 首先这个错误出现在访问controller层的list.action方法: 在输入http://localhost:8080/Smil/list.action 后就出现了如下的错误: 错误原因是:

java基础 第十四章(Servlet声明周期、Servlet向jsp中提供数据、Servlet跳转jsp、jsp中书写java代码)

一.Servlet声明周期 1.Servlet的声明周期一般分为四步:加载.实例化.服务.销毁. 2.实例化在整个生命周期中只执行一次. 二.jsp 1.Servlet向jsp中提供数据 request.setAttribute( , ); 例:request.setAttribute("key" , "Hello"); 2.Servlet跳转jsp (1)同一请求方式:request.getRequestDispatcher("/路径").fo

JSP 中EL表达式用法详解

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );

用Servlet与JSP中实现分页查询

这个题目,总共分4个部分 1.查询总页数,把页码显示在页面上 2.把每页的内容显示在页面上 3.首页,尾页,上一页,下一页 4.下拉列表中的页数,(根据页数变动,选中第几页提交到第几页) 详解如下:(一部分代码在servlet中,一部分代码在JSP中) Servlet package com.lianxi; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException;

Jsp中EL表达式的使用

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka   1.什么是EL EL是JSP表达式语言,全称是ExpressionLanguage,使用EL的目的是简化在JSP中访问变量的方式,简单静态HTML与Java代码的耦合.下面来看看一个例子: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding=

Servlet,JSP 中的中文乱码问题以及解决方案

问题描述: 在Servlet,JSP 传递数据中,英文无影响,而中文有时候就会出现乱码. 解决方案: 相同的编码: 同一个项目中的每个文件应当设置和保存相同的编码方式,如: html中 <meta charset="utf-8"> 在jsp 或者Servlet处理程序中添加: void setCharacterEncoding(java.lang.String env) 设置请求消息体的字符编码 如: request. setCharacterEncoding("

JSP中EL表达式的应用以及常用的方法

EL表达式      1.EL简介 1)语法结构        ${expression} 2)[]与.运算符      EL 提供.和[]两种运算符来存取数据.      当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []. 例如:          ${user.My-Name}应当改为${user["My-Name"] }      如果要动态取值时,就可以用[]来做,而.无法做到动态取值.例如:          ${sessionScop

在jsp中 EL表达式不生效

1.在默认情况下,Servlet 2.3 / JSP 1.2是不支持EL表达式的,而Servlet 2.4 / JSP 2.0支持. servlets 2.4这个版本的isELIgnored默认设置为false.所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明.如何查看Servlet / JSP的版本?打开tomcat的common/lib 目录下,有两个JAR文件: jsp-api.jar servlet-api.jar .如果没有,那可能是你没有添加

Servlet、JSP中页面跳转的方式

一.Servlet:当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面.1)  redirect 方式response.sendRedirect("success.jsp");页面的路径是相对路径.sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:response.sendRedirect("http://www.ycul.com");跳转后浏览器地址栏变化.这种方式要传值出去的话,只能在url中带para