分享

jsp中禁用el表达式

 真爱图书 2012-07-02

jsp中禁用el表达式,是使用了isELIgnore="true"这样一条jsp指令(directive),请注意大小写。
<%@ page isELIgnored="true" %>
<%
    pageContext.setAttribute("hello", "Hello World");
%>
${hello}
     
还有一种批量禁用el的方法,我们可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java./xml/ns/j2ee"
    xmlns:xsi="http://www./2001/XMLSchema-instance"
    xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>true</el-ignored>
        </jsp-property-group>
    </jsp-config>
</web-app>

这样就会禁用所有以.jsp后缀的请求中的el表达式,使用这种方式需要注意两点。
jsp-property-group标签是jsp-2.0中新增功能,如果你使用低版本的web.xml(2.3或以下)就不能使用这个标签了。
设置jsp-config会影响jsp生成servlet的过程,如果程序修改时已经有jsp转换成servlet并缓存在work目录下,那么修改后需要先清除缓存,才能看到效果。
实际上还有第三种方法可以禁用掉所有jsp中的el表达式,那就是把web.xml定义为2.3版。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java./dtd/web-app_2_3.dtd">
<web-app>
</web-app>
web.xml定义了web-app的版本号是2.3,这样一来所有的jsp都无法使用el表达式了,因为el表达式是2.4版才开始支持的功能。
注意
说了以上三种禁用el表达式的方法,不是希望大家抛弃el表达式,相反是希望大家在自己编写el时出现问题时,先去考虑是否有人在这三个地方做了设置造成el表达式的失效。建议大家多多使用el表达式,少用一些jsp中的scriptlet代码。

作用域
使用el的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。
jsp中禁用el表达式

如果我们有${username}这样一个正则表达式,它回去依次调用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一个不为空的值就立刻返回。
这样的确方便我们的操作,但是随之也出现了另外一个问题,如果pageContext和request中有同名变量,但是我想取得request中的变量该如何是好呢?这就需要为el表达式引入作用域的概念了。
${pageScope.username}
${requestScope.username}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多