无脚本jsp的必要?
在实际开发中web设计人员很可能不太懂Java语言,而在jsp中Java作为脚本使用,这样就造成不便。我们应该使用一些web设计人员容易接受的"脚本",javaweb2.0就出现了EL,JSTE来替换java脚本(srciptlet,声明等)。
1 jsp动作元素
(1) <jsp:useBean id="p" type="person" class="person" scope="request"/>
id:属性名;type:id类型 ; class:bean对象类型; scope:属性作用域
这个标准动作转换成servlet是什么样子的?
person p=null;//person是type属性对应的类型。 p是 id p= (person)request.getAttribute("p");//判断这个id存不存在,(person)->type类型 if(p==null){ //为空的话,设置一个id对应的属性 p=request.setAttribute("p",new person());//new person()是class对应类型 }
结论:id就是一个实例的引用(bean),通过id可获取性质(成员变量),要知道bean有getXX(),setXX();
(2) <jsp:setProperty name="p" property="username" vlaues="xiaoming"/>//设置属性值,name是useBean的id;
(3)<jsp:getProperty name="p" property="uername"/>//获取username属性值xiaoming
这几个有什么用?
接收servlet中的bean,在jsp中获取bean对象的性质(成员变量),比较遗憾的是:bean对象的性质这可以是String或者基本数据类型,username性质假设是一个Object,会显示什么?地址值
那么我们应该怎么办?
--------------------------------------------------------------------------------------------------------------------------------------------------
2 EL(expression language)表达式语言
语法${//content}
(1)EL的出现,个人以为可以不再使用前面几个动作, 我们可以这样替换servlet中:
person user=new person();user.setName("xiaoming"); request.setAttribute("p",user);
request.setAttribute("xx","hello EL");
jsp中接收:
${p.username} //username是person的性质
${xx}//hello EL,简单吧!
(2)属性(Javabean实例)中性质也是对象怎么办
假设上面username是一个对象(有个a性质 a="xin"),那么${p.username.a}//得到xin
从上面可以看出,EL随随便便搞定啊
3 EL中的二个重要的操作符
(1).操作符
. 有二种格式(没有第三种)
map.key
javabean.property
说明:右边必须是合法的标识符(和定义变量同理),比如:map集合中有一个key="1",map.1是错误的,不合法。
使用:jsp接受的一般都是javabean数据或者“数据包”(集合,数组)。“.”可以处理的是Javabean和map,但list集合和一般的数组他是处理不了。后面还有一个[]操作符,功能更加多。由于jsp处理的数据map和Javabean较多,“.”简单实用,所以EL中用的频率很高
(2)[]操作符
"."可以做的事情,[]都可以完成。"."比较简便,可以使用"."尽量使用(个人喜好)。[]操作符处理下面几种“.”没完成的操作
key不是合法标识符;${map["1"]}没问题
list和数组集合,${arrayList["name"] }
注意:[]里面获取要使用" "符号,也不要使用";"符号结束
4 内置对象
(1)有哪些对象
第一类: requestScope,pageScope,sessionScope,applicationScrope -- 作用域属性的map
第二类:param,paramVlaues -- 请求参数的map
第三类:cookie --cookie的map
第四类:initParam-- 上下文初始化参数的map
第五类:pageContext --Javabean对象的一个引用。
简单说一下: 所谓"请求参数的map",就是把所有的请求参数保存在这个map集合中。
(2)一个例子:
在servlet中:
request.setAttibute("attri","12");
在jsp中 ${attri}就直接拿到值12;
你会不会这么想?session,servletContext的属性这么获取?
执行${attri}时,按顺序在 pageScope,requestScope,sessionScope,applicationScrope属性中找。 意思就是: session,servletContent(application)中的属性也一样获取。在这里${attri}效果等价于${requestScope.attri}
(3)获取session,servletContext属性
${sessionScope.property} ${applicationScrope.proterty}
(4)现在仔细看看前面内置对象的介绍,你就会使用了。
5 EL函数---省略
--------------------------------------------------------------------------------------------------------------------------------------
EL自然不止这些,不过上面介绍的是常用的。发现没,EL主要用来获取数据的。Java中if,while,for怎么办?答案就jstl中