javaweb-jsp内置对象和动作标签+el

Jsp的内置对象(这一部分的概念性东西比较多,就不贴代码了,随便敲两下就能看到效果)

(本文需要的Jar:commons-beanutils-1.8.3.jar

commons-logging-1.1.1.jar)

   1.不要在jsp页面中创建,可以直接使用的对象

   

对象名

主要作用

备注

Request(域对象)

获取请求信息

相当于Servlet中的HttpServletrequest

Response

获取相应信息

相当于Servlet中的HttpServletResponse

Session(域对象)

获取Session

相当于Servlet中的HttpSession

pageContext(域对象)

当前页面

jsp特有的域对象

application(域对象)

获取Web中的文件

相当于Servlet中的ServletContext

config

获取servlet名称,初始化参数

相当于Servlet中的ServletConfig

page

当前对象

out

输出对象

向页面输出内容

exception

错误对象

需要配置指令isErrorPage

 2开发中用的比较多的对象:

2.1 Out对象:

2.1.1需要注意的是,这个对象和response.getWriter()使用的不是一个对象

 out使用的是JspWriter

 response.getWriter()使用的是PrintWriter

2.1.2 输出机制

 使用Out对象输出,会产生两个缓冲区,Out缓冲区和response缓冲区

 在代码中如果同时用这两个对象进行页面内容的输出,会发现response输出内容在Out输出之前,这是因为Out缓冲区不能直接输出内容,会把内容先放到response缓冲区中,再通过该缓冲区输出内容,故而它的内容在response.getWriter()输出的内容之后

2.2 PageContext对象:是一个域对象

      2.2.1注意事项:只能在jsp中使用,范围是当前页面(还好比request范围大)

  2.2.2 作用:

  ①设置,获取值

设置值:setAttribute(java.lang.String name, java.lang.Object value)

获取值:getAttribute(java.lang.String name)

②可以向其他三个域对象中设置值,获取值(当然,也可以给它自己设置自己的值,)

   其它三个域对象:application,session,request

  设置值:setAttribute(java.lang.String name, java.lang.Object value, int scope)

          获取值:getAttribute(java.lang.String name, int scope)

③获取到其他的八个内置对象

           pageContext.getXXX();//xxx代表内置对象名

findAttribute(java.lang.String name)方法(el表达式直接获取属性的原理)

获取对应名称的属性值,需要注意的是,当多个域对象中有重复的属性名时,它会获取其中范围最小的值

⑤域对象作用范围:

ServletContext(application)

整个Web项目

Session

一次会话(打开关闭浏览器)

Request

一次请求

pageContext

当前页面

3 Jsp的动作标签(这玩意局限性比较大,它只能在jsp中使用,)

3.1 作用:jsp中使用动作标签可以完成的功能

3.2 写法:<jsp:动作标签名称 属性=”属性值”></jsp:动作标签名称>

3.3 常用的动作标签:(注意不要在开始结束标签中写文本,会报错)

  3.3.1 <jsp:forword>:转发(类似于get提交)

<jsp:forward page="路径"></jsp:forward>

      3.3.2<jsp:include> :页面包含(动态包含)

原则:直接写内容

 动态包含会生成多个servlet

 可以传递参数,定义变量(意义暂时不明.可能是我开发中用的比较少,暂时没有太好的栗子做解释)

3<jsp:param>   :传递参数

在带路径的动作标签里面使用(get提交后面的小尾巴)

    <jsp:forward page="路径">

<jsp:param name="属性名" value="属性值" ></jsp:param>

    </jsp:forward>

3.4 下面的三个动作标签用于操作javabean(下面会有详细解释,这里只做概述)

(不过这个方法用的很少,局限性比较大,不如直接用BeanUtils框架封装更好)

  3.4   <jsp:useBean>

  3.5   <jsp:setProperty>

  3.6   <jsp:getProperty>

4 JavaBean(关于MVCDao模式写在另外一篇文章,这里只做简单概述)

4.1 本质上是一个java,一般而言遵循下面的书写规范

4.1.1,javaBean里面一定有一个公开的没有参数的构造方法,可以写有参构造,但是一定要再写一个无参构造

4.1.2,javaBean里面属性是私有的(private)

4.1.3,私有的属性要通过公开的方法暴露出来(get set方法),对外提供公共的访问方式

4.2 JavaBean的主要用途是用来封装数据

2.1使用set方法来设置值

2.2使用get方法来获取值

4.3 如何封装到JavaBean

  4.3.1使用Java方式(创建对象,set设置属性,从页面获取信息,创建JavaBean对象,调用方法储存,一般会把对象放到一个集合之中)

  4.3.2使用jsp中的动作标签(<jsp:setProperty></jsp>)

<jsp:useBean name="" class="" scope>

      设置要封装的是哪一个javaBean,name对象名,class包路径

    ②<jsp:setProperty Property="" name="">

           向哪个属性设置值Property属性名.name对象名

       不要通过getParameter()获取,会自动读取提交过来表单中的键值对

       简写Property="*"一次性封装所有属性

   要求表单中的属性名跟封装类的成员变量名一致

    ③<jsp:getProperty Property="" name="">

   从哪个属性获取值roperty属性名.name对象名

       会自动写到页面上

4.3.3使用BeanUtils框架进行封装

4.3.1使用beanUtils框架封装(算是一个小型的类库)

是阿帕奇(谢谢老板)组织开发的技术 ,用于封装数据到javaBean的操作,导入jar,Web项目jar包放到WEB-INF,会自动加载

4.3.2要求:表单输入项name的属性值要和javaBean中的成员变量名称一致

4.3.3注意事项:

使用框架里的BeanUtils类里面方法populate(obj map)

obj 需要封装的对象map要封装的数据的Map(key:属性名称,value:)

request.getParameterMap(),

返回Map集合,key是表单输入项name属性的值,value是输入值

5 el表达式(一直把el表达式给忘了,这里补上)

    小技巧: 通过el表达式获取项目名称pageContext.getRequest().getContentPath()

${pageContext.Request.ContentPath}

通过el表达式获取一个类中成员变量是一个引用数据类型中的属性

//在用户类中有一个成员是地址类,对外有setget方法,并且已经被私有

//在地址类中有一个属性叫省份,对外有setget方法,并且已经被私有

//使用el表达式可以直接通过用户对象.地址属性.省份属性获取到省份

//也可以加getAddr但是有的版本不支持,所以干脆就用属性名即可

User u1 =new User();

Addr ar =new Arrt();

ar.setProvinceName(“省份名称”);

u1.setAddr(ar);

${u1.addr.provincename}

5.1 el表达式可以很方便的获取域对象中的值,经常跟html标签一起使用

      使用范围:jsp页面,不能单独在html中使用,但是可以在javaScript代码中使用(获取服务端传递的域对象中json的数据)

  写法:${域对象名称}

5.2.1获取数组

${数组[0]} 索引越界返回为空字符串 ""

5.2.2.1获取list集合,直接通过下标

  ${集合[0] }

        ${集合[1000] }<!-- 空字符串 -->

        //el表达式获取不到set集合的值

      5.2.2.2获取Map集合,集合名.键名获取值,如果键不存在,获取为空字符串""

        ${map001.张三 }

          ${map001["李四"]}//这里必须有双引号

          ${map001.王五 }

          ${map001.awdawd } <!-- 空字符串 -->

          //Map的键类型为Integer是获取不到的,会报错

        5.2.3获取对象的属性

        <%

         Student s1 =new Student();

         s1.setName("孙琦");

         s1.setAge(26);

         //放到域对象里面

         pageContext.setAttribute("s1", s1);

        %>

        <%--使用el表达式获取值 --%>

        ${s1.name }

        ${s1.age }

        ${s1.adwadwad}//报错

        <hr/>

        ${s1.toString() }

       

       5.3, el表达式其它的操作

       5. 3.1.1 数学运算 +,-,*,/

       5. 3.1.2 关系运算>,<,<=,<=

       5.3.1.3 逻辑运算|,&,&&,||

        

       5.3.2 empty运算符

  (1)判断对象是否为空

  =${s1==null}

  =${empty s1}

  

  =${s1!=null}

  =${not empty s1}

  

    5.3.3 三元表达式

    5. 3.3.1 ${s1!=null?s1.name:""}

     ${not empty s1?s1.name:""}

     

5.3.4 el表达式中有11个隐含的对象(内置对象)

5.3.4.1 5个域对象,4个后面加Scope,pageContext

5.3.4.2 pageContext隐含对象,对应于jsp页面的pageContext对象,

         整理时间2016.05.13

原文地址:https://www.cnblogs.com/adventurer/p/5491388.html