JavaWeb 之 11.JSP及EL表达式EL函数


## JSP的技术 JavaBean规范(封装数据) EL的表达式 ##


**JSP技术简介**
    
    1.JSP -- Java Server Pages (java 服务器端的网页们)
    2.JSP编写HTML代码 + Java代码 + JSP的代码 它不用配置
    3.JSP的执行原理:JSP编写完代码,第一次访问的时候,把JSP的文件翻译成.java的文件 -- 编译成.class的文件 -- 执行。
    4.编写JSP的脚本元素(想编写java代码)
        * <%! %>    成员变量 方法
        * <%= %>    输出内容(常量或者变量),不能加分号
        * <%  %>    定义变量(局部变量),编写语句,不能编写方法。
    
    5.JSP和Servlet程序在开发中的角色
        * JSP     modle1的时代
        * JSP(收集用户输入的数据,显示数据给用户) + Servlet(接收和响应请求)
        
**JSP的注释**
    
    1.HTML的注释            <!-- -->
    2.Java的注释            // /**/  /***/
    3.JSP自己的注释        <%-- JSP的注释  --%>
    
    
**JSP的指令(3个指令元素)**    
    
    1.设置JSP的文件的属性。
    2.指挥JSP文件怎么来执行。
    
**page指令**
    
    1.通过page指令设置JSP文件的属性
    2.page语法怎么写:<%@ page 属性名称=属性值 属性名称=属性值 %>    一个页面上,page指令也可以出现。
    3.page指令的属性有哪些?
        * language        -- 默认翻译成什么语言?现在只能翻译java。
        * extends        -- 继承。(一个jsp的文件翻译.java的文件,默认继承一个类)
        * session        -- 默认是true,说明可以直接使用session。
        * import        -- 导入包。并且import可以出现多次。其他属性只能出现一次。
        * buffer        -- 设置输出缓冲区的大小默认是8kb
        * autoflush        -- 如果缓冲区满了,是否自动刷新。如果满了不自动刷新,抛出异常了。
        * errorPage        -- 程序抛出了异常,直接把异常抛到页面上。指定错误的处理页面。
        * isErrorPage    -- 需要在错误的页面使用。决定直接可以使用exception
        * isELIgnored    -- 是否忽略EL表达式。默认值是false,代表不忽略。在页面上直接使用EL表达式。
        * pageEncoding  -- 设置当前页面的编码。JSP的文件翻译成.java文件。
        * ContentType    -- 浏览器默认打开文件的编码。
        
        * 注意:pageEncoding和ContentType关系暧昧。如果一个页面上只设置pageEncoding,ContentType默认情况下和pageEncoding相同。
        
        
**在web.xml中配置全局错误页面**
    
     <error-page>
          <error-code>404</error-code>
          <location>/error/404.jsp</location>
      </error-page>
      <error-page>
          <error-code>500</error-code>
          <location>/error/500.jsp</location>
      </error-page>

**include指令**
    
    1.include指令:可以用于页面包含。把几个页面放在一起对外显示。完成页面的布局。
    2.指令的语法:<%@ include file="包含文件的地址" %>
    3.模拟一个门户网站
    4.静态包含:原理
        * 在翻译成.java文件之前,先把所有的页面的内容全部都复制过来,一起翻译成一个.java文件。一起编译.class文件。
    
    
**JSP的内置对象**
    
    1.概念:这些内置对象可以直接使用。exception对象,page指令有一个属性,isErrorPage设置true才能使用exception对象。
    2.内置对象
        request                    HttpServletRequest                    
        response                HttpServletResponse
        session                    HttpSession
        application                ServletContext
        out                        JspWriter
        pageContext                PageContext
        page                    Object(代表当前对象)
        config                    ServletConfig
        exception                Throwable
        
    3.out对象,真实的对象JspWriter,可以向页面输出内容。    PrintWriter response.getWriter();这俩对象之间的联系?
        <%= "HELLO" %>
        <% out.print("AAAA"); %>
        <% response.getWriter().print("BBBB"); %>
        <% out.print("CCCC"); %>
        
        * 输出的结果是:BBBB HELLO AAAA CCC
        
        
**pageContext对象**
    
    1.这一个对象顶9个。可以获取另外的8个对象。
    2.域对象:代表当前的页面的域。
    3.向其他的域对象中存取值。
    
    4.pageContext对象的API
        * setAttribute(String name, Object value) 
        * setAttribute(String name, Object value, int scope) 
        
        * Object getAttribute(String name)  
        * Object getAttribute(String name, int scope)  
        
        * Object findAttribute(String name)         全域查找,默认从最小的域中找值,如果找不到,上一个域中找。
        
    5.作用
        * 编写框架的时候
        * 自定义标签
        * 编写通用性较高的代码。
    
    
**JSP的动作标签**
    
    1.<jsp:forward>         转发的功能
        * page属性:转发到哪个页面上去啊!!
        * 转发的路径:服务器绝对路径(不包含项目名称)
    2.<jsp:param>            转发的时候可以传递参数
        * 在转发中使用属性 放在<jsp:forward>标签的中间
        * name    :参数的名称
        * value    :参数的值
        
    3.<jsp:include>          动态包含(和静态包含结果是一样的,原理是不一样的)
        * page属性:包含的页面的路径
        * 在源码的文件下,生成了4个.java和.class的文件。
        
        
**JavaBean的规范(封装数据) 工具类**
    
    1.JavaBean:就是一个普通的java类,但是符合JavaBean规范。
    2.JavaBean规范
        * 这个java类必须有无参数的构造方法。
        * 属性私有化。
        * 提供了public get和set方法。get或者set只要有一个就行。
    3.JavaBean的作用:封装数据。
    4.JavaBean的属性:是由get或者set方法来决定的。
    
    5.JSP文件完成封装数据。
        * <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
        * <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
        * <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性
        
    6.Servlet里面使用JavaBean封装数据
        
**内省的技术(了解)**
    
    1.通过内省的技术可以来操作JavaBean的属性的读写方法。
    2.Introspector    
    
**BeanUtils(学会)**

    1.如果使用BeanUtils工具类,需要先导入两个jar包。     commons-beanutils-1.8.3.jar     commons-logging-1.1.1.jar
    2.编写代码。(字符串转换日期类型的代码)
        * 第一步:需要编写类,实现Converter接口,重写一个方法(字符串转换成日期)。
        * 第二步:使用ConvertUtils.register()注册的操作。ConvertUtils.register(new MyConverter(), Date.class);
            *  static void     register(Converter converter, Class clazz)
            *  converter    传入自己编写实现类
            *  clazz        转换的数据的类型    Date.class
            *  注意:注册的方法放在封装数据之前。
    
    3.会封装数据(BeanUtils工具的使用)    BeanUtils.populate(user, map);    
    4.会转换(日期类型的数据的转换)
    

**EL表达式(重点)**

    1.JSP内置的一种表达语言。
    2.作用:
        * 从域对象中获取属性的值。(request.setAttribute("xx","yy")    )
        * 执行运算
        * 提供了一些常用WEB对象(例子:cookie)
        * 调用Java的方法
    3.语法:${ 表达式内容 }
    4.注意事项:
        * page指令:是否忽略EL表达式。如果忽略了,JSP上就不能使用EL表达式。(isELIgnored)
        

**EL表达式获取域对象中的属性值**
    
    1.如果域对象中属性的名称有相同的,使用EL表达式默认从最小的域中取值。
    2.list和数组使用下标值取值    ${ list[0] }
    3.如果是map集合或者对象 ${ map.aaa }
        * 如果Map集合的key是特殊字符的话,使用${map["ccc.ddd"]}
    
    
**EL支持运算**


    

**EL的常用的对象**
    
    1.pageScope                    page域
    2.requestScope                request域
    3.sessionScope                session域
    4.applicationScope            application域

例:

<%
    pageContext.setAttribute("username", "用户1");
    request.setAttribute("username", "用户2");
    session.setAttribute("username", "用户3");
    application.setAttribute("username", "用户4");
%>

<h4>EL获取域对象中的值</h4>
${ pageScope.username }
${ requestScope.username }
${ sessionScope.username }
${ applicationScope.username }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值