jsp el表达式 是取attribute 还是Parameter?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp el表达式 是取attribute 还是Parameter?相关的知识,希望对你有一定的参考价值。

如果2个都取那优先级如何?
能否对它做出限制比如只能取有限的几个参数,不能所有的参数都访问得到

EL存取变量数据的方法很简单,例如:$username。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 $requestScope.objectName 访问一个 JSP 请求范围的对象,还可以使用 $requestScope.objectName.attributeName 访问对象的属性。
< %=request.getParameter(“username”)% > 等价于 $ param.username
所以是attribute,parameter需要显式地用param调用追问

追答

因为你的action里面定义了usename这个变量,struts是会自动调用set方法将传过来的参数放入,并将全局变量中有get方法的放入request当中,也就是attribute方式,而不是传参,你可以试一下,不定义username这个全局变量,而是通过request.getParameter("usernae");来获得参数(PS:记得实现HttpServletRequest方法,不知道有没有写错!^_^);这样你在页面就应该看不到username的值了

参考技术A 取attribute是在传值之前有setAttribute,一般通过表单和链接传递的参数使用getParameter。至于优先级,应该不存在的吧?Java新手,坐等大神回答,共同学习哈。追问

注意是 el表达式

追答

不是这样的么?

追问

$username

百度一下el表达式就知道啦

追答

学习了。三克油

参考技术B 取得当然是attribute,没办法取得parameter,那是servlet取值用的 参考技术C 是取attribute 还是Parameter 没有明白的意思。
我举个例子给你。
public tclass
int id = 5;
String name;
加各自的set 和get方法;
如果没有GET方法,EL是不能取得对象的值。

jsp
$tclass.id
这里就会显示 5追问

也许是我理解错了,页面间跳转要用setattribute,而目标页面是否把"私有成员变量"和传入的attribute一起提供给el表达式调用了呢?

A.jsp

setattribute("abc",123);
forward("B.jsp")

B.jsp

$abc $cde是否都能显示 123 234

追答

request.setAttribute("abc"."123");
request.getRequestDispatcher("在这里加你的跳转的页面").forward(request, response);
在跳转的页面上,可以取到你之前定义的值。

$abc
至于$cde 我在jsp页面上,很久没有写过代码,不能确定,应该是可以。

EL表达式

一、EL表达式
EL:Expression Language的缩写,表达式语言。
基本语法形式:${EL表达式}
1、作用:替换掉JSP中的java表达式<%=%>
2、功能:EL表达式不支持字符串连接操作
a、从域中获取数据,并把数据显示在页面上。不会出现控制指针异常。
${p.name}:
Java:
Person p = pageContext.findAttribute("p");
out.write(p.getName());

.运算符:调用getter方法

[]运算符:
.运算符能做的,它都能做。${p.name}=${p[‘name‘]}=${p["name"]}
.运算符不能做的,它也能做(能做不符合java命名规范的数值的获取)。 ${list[0]} ${header[‘Accept-Encoding‘]}


b、进行简单的数学和逻辑运算
${5/3}===>1
${5%3}===>2
**empty:能判断表达式是否是null或者""字符串(不会忽略首尾空格)。是的话返回true
能判断一个集合中有没有元素。

c、获取web中开发中的常用对象(11大隐式对象)
pageContext:代表javax.servlet.jsp.PageContext对象本身
其余10个都是代表Map类型
pageScope:代表的是一个Map。页面范围的域对象中的Map
requestScope:
sessionScope:
applicationScope:

param:
paramValues:

header:
headerValues:

cookie

initParam:


d、调用普通java类中的静态方法(自定义EL函数)
编写步骤:(自定义标签的步骤相同)
1、编写一个类:定义一个静态方法。
package com.itheima.functions;

public class StringUtil {
public static String toUpperCase(String str){
return str.toUpperCase();
}
public static String connect(String s1,String s2){
return s1+s2;
}
}
2、在WEB-INF目录下建立一个扩展名为tld(Tag Libary Defination)的xml文件。(EL函数与具体类的方法进行一个映射)
(参考Tomcat中的例子)
<?xml version="1.0" encoding="UTF-8"?>
<taglib 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"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.itheima.com/jsp/functions</uri>
<function>
<description>Converts the string to uppercase</description>
<name>toUpperCase</name>
<function-class>com.itheima.functions.StringUtil</function-class>
<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
</function>
<function>
<name>connect</name>
<function-class>com.itheima.functions.StringUtil</function-class>
<function-signature>java.lang.String connect( java.lang.String,java.lang.String )</function-signature>
</function>
</taglib>
3、在web.xml中将tld的实际存放路径与tld中的uri进行绑定(可选的:前提是你把tld文件放到了WEB-INF目录下)
<jsp-config>
<taglib>
<taglib-uri>http://www.itheima.com/jsp/functions</taglib-uri>
<taglib-location>/WEB-INF/myfn.tld</taglib-location>
</taglib>
</jsp-config>
4、在JSP中使用自定义的函数
使用前:通过taglib指令,引入
Tip:
SUN提供的标准的EL函数。全都是与String有关
属于JSTL的一部分:(Java Standard Tag Libary)
core:核心
fmt:格式化
xml:操作xml
sql:操作数据库
functions:EL函数

前提:使用JSTL,导入jar包:jstl.jar standard.jar


二、JSTL中的Core标签:c:if c:forEach
1、c:if:如同java中的if
属性:
test:必须的。要求返回值是boolean的表达式(EL或Java表达式)。如果为true,则主体内容显示
var:存放结果的变量名
scope:存放结果的域范围。默认是page。
2、c:forEach:循环遍历(重复执行主体内容)
属性:
items:要遍历的对象。数组、List、Set、Map、Enumeration等
begin:遍历的items如果有的话,代表索开始引号
end:遍历的items如果有的话,代表索结束引号
var:存放结果的变量名
step:步长
varStatus:指定一个变量,该变量引用一个对象
该对象有以下方法:
getIndex():返回当前遍历的元素的索引
getCount():返回当前遍历的元素的索引+1
isFirst():返回当前遍历的元素是不是第一个
isLast():返回当前遍历的元素是不是最后一个

以上是关于jsp el表达式 是取attribute 还是Parameter?的主要内容,如果未能解决你的问题,请参考以下文章

JSP中EL不起作用,显示为String

JSP中el表达式的取值过程是怎样的?

jsp里面有个很像EL表达式的# ,是啥表达式?

html支持el表达式吗

在jstl表达式中嵌入el表达式

jsp 中获取自定义变量