无脚本的jsp(动作,EL)

   无脚本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中

 

posted @ 2017-03-18 21:56  ANDY1995  阅读(287)  评论(0编辑  收藏  举报