10 JSP beanutils EL

来源:互联网 发布:智能算法优化 编辑:程序博客网 时间:2024/06/14 17:47
1 session(*****)
              session的追踪(了解)
              session的创建和销毁
                       第一次访问资源,调用request.getSession(),创建session
                       销毁
                              非正常关闭服务器()
                              session的过期,默认是30分钟。
                                        <session-config>
                                                <session-timeout>30</session-timeout>
                                        </session-config>
                              调用session.invalidate()        手动销毁session
                                
              session的域对象
                        ServlerContext:   代表整个web应用,数据库链接
                        session :         一次会话,存放个人的信息。
                        request :         一次请求,存放错误处理。

2 JSP语法
(0)JSP的设置
       设置JSP文件的打开方式:window -- 选项 -- General -- Editors -- 文件关联 -- *.jsp -- 选择MyEclipse JSP Editor -- default
       设置JSP文件的编码:window -- 搜索JSP -- 找到JSP -- 选择UTF-8 -- OK

(1)脚本元素
    <%! %>       成员方法、成员变量
    <%= %>       输出内容
    <%  %>       局部变量,语句

(2)页面注释
      HTML的注释    <!-- -->      JSP文件的阶段存在,在翻译成java文件也存在,在页面存在
      JAVA的注释    JSP文件的阶段存在,在翻译成java文件也存在,在页面不存在
      <%
           //     单行
           /**/   多行
           /**
            *     文档
            */
      %>
       JSP的注释    <%-- JSP的注释 --%>           之后存在JSP文件的阶段

(3)JSP的指令元素
      功能
        用于指示JSP执行某些步骤
        用于指示JSP表现特定行为
 
      语法:<%@ 指令元素 属性名=属性值  %>
      A:page      :设置JSP的属性
            注意:import属性可以出现多次,其他属性只能出现一次。
            属性:
                language :   JSP文件允许嵌入的语言。只支持一种JAVA语言。(不需要改变)
                extends :    JSP翻译翻译Servlet文件,servlet继承的类。(不需要改变)
                session :    默认值是true,可以直接使用session。设置false,不能直接使用。 
                import  :    引入java的jar包(使用多次)
                buffer  :    设置缓冲区的大小     默认8kb
                aotoFlush :  设置默认刷新缓冲区(不要修改)        
                errorPage :  指定错误页面
                isErrorPage: 设置值,可以是exception对象,设置true,使用exception,设置不能使用exception对象
                contentType: 服务器端输出所有内容采用编码。
                pageEncoding:JSP翻译成Servlet文件时采用的编码。
                isELIgnored :是否忽略EL表达式(false,不忽略,true,忽略)
                                        
           重点:
               session    import    contentType   pageEncoding    isELIgnored

      B:include   :包含页面(页面布局)
              语法:<%@ include file="要包含文件的地址(静态包含)" %>
                    <%@ include file="/include/head.jsp" %>
      C:taglib    :引入标签库文件(明天)
              语法:<%taglib  %>
              属性:
               uri :    引入标签库文件的名称
               prefix : 标签库的前缀名
                        
(4) JSP的内置对象(9个)直接使用
         request response session application out pageContext page config exception
                
         内置对象             真实的对象                           方法
         request           HttpServletRequest            setAttribute()       getAttribute()
         response          HttpServletResponse      addCookie()          getWriter()
         session           HttpSession              setAttribute()       getAttribute()
         application       ServletContext           setAttribute()       getAttribute()
         config            ServletConfig            getInitParameter()   getInitParameterNames()
                
         exception         Throwable                getMessage()
         page                   Object                  (不使用对象)
         out               JspWriter                write()              print()
         pageContext       PageContext                    setAttribute()       getAttribute()
                
         exception
              和异常有关的
              前提条件:isErrorPage="true",才能使用exception对象。
         page        
              当前页面的对象。
         out对象
              JspWriter             PrintWriter  response.getWriter()
                        
              <%= "HELLO" %>
              <% out.print("AAAA"); %>
              <% response.getWriter().print("BBBB"); %>
              <% out.print("CCCC"); %>
              输出结果:
                        
         pageContext对象
                   域对象
                      自己存取值
                      向其他的域存取值。
                            setAttribute(String name, Object value, int scope) 
                            getAttribute(String name, int scope) 
                            findAttribute(String name) 
                                        
                      可以获取其他8个对象。
                            编写框架或者通用性较高代码。
                                
         在JSP的时候(4个域对象)
                      ServletContext    整个web应用
                      session           一次会话
                      request           一次请求
                      pageContext       当前页面
-------------------------------------------------------------
<body>
<%=request.getParameter("username") %>
<h4>pageContext向其他域中存入值</h4>        
<%
        pageContext.setAttribute("name", "美美");
        // 下面这句等价于上面
        pageContext.setAttribute("name", "美美", pageContext.PAGE_SCOPE);
        
        request.setAttribute("name", "小凤");
        // 向request域中存入值
        pageContext.setAttribute("name", "小凤", pageContext.REQUEST_SCOPE);
        
        // 向session域存入值
        pageContext.setAttribute("name", "小苍", pageContext.SESSION_SCOPE);
        // 向ServletContext域存入值
        pageContext.setAttribute("name", "小班长", pageContext.APPLICATION_SCOPE);
%>
<%= pageContext.getAttribute("name", pageContext.SESSION_SCOPE)%>
<%= session.getAttribute("name") %>

${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
</body>
---------------------------------------------------
3 JSP标签(JSP的动作)
   JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

     <jsp:forward> : 转发
               属性:page    要转发的页面
     <jsp:param> :  传递参数        
               属性:name:参数名称    value:参数值
     <jsp:include> :页面的包含(动态包含)
               属性:page    要包含的页面

4 JavaBean
    什么是JavaBean?
         定义
             必须有一个无参的构造方法
             属性私有化
             私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

            public class User(){
                private String username;
                private String password;
                public void setUsername(){
                                                
                 }
                public void getUsername(){
                                                
                  }
                public void getPassword(){
                                                
                 }
                public void getInfo(){
                                                
                       }
                }
           作用:封装数据。

     把数据封装到JavaBean中(JSP页面中完成的)
     <jsp:useBean>
     <jsp:setProperty> 
     <jsp:getProperty> 

     <jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean>
     <jsp:setProperty property="username" name="u"/>
     <jsp:setProperty property="password" name="u"/>
     或者
     <jsp:setProperty property="*" name="u"/>

     <jsp:getProperty property="username" name="u"/>
     <jsp:getProperty property="password" name="u"/>
-------------------------------------------------------------
<h4>表单提交到JSP的页面</h4>
<form action="/day12/bean/success.jsp" method="POST">
        姓名:<input type="text" name="username" /><br/>
        密码:<input type="password" name="password" /><br/>
        <input type="submit" value="登陆"/>
</form>

<h4>表单提交到Servlet程序</h4>
<form action="/day12/user" method="POST">
        姓名:<input type="text" name="username" /><br/>
        密码:<input type="password" name="password" /><br/>
        <input type="submit" value="登陆"/>
</form>
-----------------------------------
//success.sp
<h3>传统方式封装数据</h3>
<%
        // 获取表单的内容
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 创建User对象,set设置值
        User user = new User();
        user.setUsername(username); //需要建立user对象 
        user.setPassword(password);
%>

<!-- 使用jsp的标签封装数据 -->
<jsp:useBean id="u" class="cn.itcast.vo.User"></jsp:useBean>  
//<jsp:setProperty property="username" name="u"/>
//<jsp:setProperty property="password" name="u"/>//这三句相当于前面全部内容
<jsp:setProperty property="*" name="u"/> //如果属性非常的多,用这个。

<jsp:getProperty property="username" name="u"/>
<jsp:getProperty property="password" name="u"/>

<%= user.getUsername() %>
------------------------------------
//User的JavaBean
public class User {
        private String username;
        private String password;
        private double money;
        private Date birthday;
        
        public String getUsername() {
                return username;
        }
        public void setUsername(String username) {
                this.username = username;
        }
        public String getPassword() {
                return password;
        }
        public void setPassword(String password) {
                this.password = password;
        }
        public double getMoney() {
                return money;
        }
        public void setMoney(double money) {
                this.money = money;
        }
        public Date getBirthday() {
                return birthday;
        }
        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }
}
------------------------------------------------------------         

5 内省(Introspector)
----------------------------------------
访问JavaBean属性的两种方式:
    直接调用bean的setXXX或getXXX方法。
    通过内省技术访问(java.beans包提供了内省的API) 
        内省技术是基于反射技术的
        通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
-----------------------------------------------
//测试类

  public class IntrospectorTest {
        @Test
        public void run() throws Exception{
                User user = new User();
                // 获取类的信息
                BeanInfo info = Introspector.getBeanInfo(user.getClass());
                // 获取属性的描述
                PropertyDescriptor [] pds = info.getPropertyDescriptors();
                // 循环遍历,获取属性的名称
                for (PropertyDescriptor pd : pds) {
                     // System.out.println(pd.getName());
                      if(!"class".equals(pd.getName())){
                                // 获取写的方法
                                Method m = pd.getWriteMethod();
                                m.invoke(user, "admin");
                     }
                }
                
                System.out.println(user.getUsername());
                System.out.println(user.getPassword());
          }
}

6 内省—beanutils工具包

   Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。

Beanutils工具包的常用类:
    BeanUtils
        populate(Object bean, Map properties) 
    自定义转换器
        ConvertUtils.regsiter(Converter convert, Class clazz)
        传入日期类型的Date.class

7 EL表达式
     EL表达式
           语法:${ }
           获取(域对象中的)数据
                        <h4>获取域对象中的值</h4>
                        <%
                                pageContext.setAttribute("name", "黄海波");
                                request.setAttribute("name", "美美");
                        %>
                        
                        ${ pageScope.name }
                        ${ requestScope.name }

                        <h4>域中数组的值</h4>
                        <%
                                String [] arrs = {"美美","波波","东东","名名"};
                                request.setAttribute("arrs", arrs);
                        %>
                        ${ arrs[2] }


                        <h4>域中集合的值</h4>
                        <%
                                List<String> list = new ArrayList<String>();
                                list.add("美美");
                                list.add("小凤");
                                list.add("芙蓉");
                                request.setAttribute("list", list);
                        %>
                        ${ list[1] }


                        <h4>域中Map集合的值</h4>
                        <%
                                Map<String,String> map = new HashMap<String,String>();
                                map.put("aa", "美美");
                                map.put("bb", "小凤");
                                request.setAttribute("map", map);
                        %>
                        ${ map.bb }

                        <h4>域中集合中有对象的值</h4>
                        <%
                                List<User2> uList = new ArrayList<User2>();
                                uList.add(new User2("banzhang","123"));
                                uList.add(new User2("美美","abc"));
                                request.setAttribute("uList", uList);
                        %>
                        ${ uList[1].username }
                        
           执行运算
                        <h4>加法运算</h4>
                        ${ n1 + n2 }

                        <h3>关系运算</h3>
                        <h4>大于</h4>
                        ${ n1 > n2 }         ${ n1 gt n2 }

                        <h4>小于</h4>
                        ${ n1 < n2 }         ${ n1 lt n2 }

                        <h4>等于</h4>
                        ${ n1 == n2 }        ${ n1 eq n2 }

                        <h4>不等于</h4>
                        ${ n1 != n2 }        ${ n1 ne n2 }

                        <h4>大于等于</h4>
                        ${ n1 >= n2 }        ${ n1 ge n2 }

                        <h4>小于等于</h4>
                        ${ n1 <= n2 }        ${ n1 le n2 }

                        <h3>逻辑运算</h3>
                        <h4>与</h4>
                        ${ n1 > n2 && n3 > n4 }                ${ n1 > n2 and n3 > n4 }

                        <h4>或</h4>
                        ${ n1 > n2 || n3 > n4 }                ${ n1 > n2 or n3 > n4 }

                        <h4>非</h4>
                        ${ !(n1 > n2) }                        ${ not (n1 > n2) }
                        
            获取WEB开发中的对象
                        pageScope
                        requestScope
                        sessionScope
                        applicationScope
                        
                        param                         获取请求的参数        getParameter()
                        paramValues                   获取请求的参数        getParameterValues()
                        
                        header                        获取请求头的信息
                        headerValues                  获取请求头的信息
                        
                        initParam                     获取全局的初始化参数
                        cookie                        获取cookie        
                                
                        pageContext
                        
                        <h4>EL的WEB对象</h4>
                        ${ param.username }

                        <h4>获取请求头</h4>
                        ${ header.referer }
                        
                        <h4>获取全局初始化参数</h4>
                        ${ initParam.username }
                        
                        <h4>pageContext对象</h4>
                        ${ pageContext.request.contextPath }        
                        
                * 调用java的方法(明天)
原创粉丝点击