JavaWeb笔记-12-JavaBean、内省、BeanUtils的使用、EL表达式、EL函数库

JavaBean分类(两种)

    1)有用户界面(UI,User Interface)的JavaBean;
    2)没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。

*** JSP通常访问的是后一种JavaBean。

这里写图片描述

1、JavaBean


JavaBean:一个遵循特定写法的Java类

实质:从表示层的处理来考虑,Javabean就是一个个的service类
原理:定义一系列 get<Name> 和 set<Name> 方法
作用:为了和 jsp 页面传数据化简交互过程而产生的。

优势:组件技术,代码重用,易于维护

javaBean在MVC设计模型中是model,又称模型层。
在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,
然后JavaBean会提供获取属性和设置属性的get/set方法

类的要求:
1)这个Java类必须具有一个无参的构造函数
2)属性必须私有化。
3)私有化的属性必须通过public类型的方法暴露给其它程序,
    并且方法的命名也必须遵守一定的命名规范。
JavaBean属性的规范:
1.必须要有默认构造器(无参)
2.提供get/set方法  只有get为只读属性
3.属性:有get/set方法的成员。没有成员只有get/set方法时,属性名称由set/get方法决定
4.Boolean类型的属性,它的读方法可以是is开头,也可以是get开头。
5.符合规范的属性,就是成员

2、内省:


底层为反射。
通过反射来操作JavaBean。比直接使用反射方便

内省流程:
内省类 --> Bean信息 -->  属性描述符 --> 属性的get/set对应的Method --> 反射

插图:

这里写图片描述
commons-bwanutils:依赖内省完成。

    需要导包:
    commons-beanutils.jar
    commons-logging.jar
BeanUtils的使用
    方法一:
    public  void test() throws Eception{
        String classname = "day12.bean.person";  //得到类路径
        Class c = Class.forName(ClassName); //通过路径得到类
        Object bean = c.newInstance();       //创建类实例

        //用JavaBean对实例设置属性
        BeanUtils.setProperty(bean,"name","张三");
    }

    方法二:
    //把map的属性直接封装到bean中
    /要求 map的key与bean的属性名相同
    public void test2() throws Eception{
        Map<String,String> map = new HashMap<String,String>();
        map.put("username","zhangsan");
        map.put("password","123");

        User user = new User();
        BeanUtils.populate(user,map);   //
    }


    //方法三  可以将表单数据一次放进map
    //把map转换成指定的JavaBean对象
    public static<T> T toBean(map,class<T> class){
        try{     
            //创建指定类型的JavaBean对象
            T bean = clazz.newInstance();
            //把数据封装到javabean中
            BeanUtils.populate(bean,map);
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }

    调用
    public void test3() throws Eception{
        Map<String,String> map = new HashMap<String,String>();
        map.put("username","zhangsan");
        map.put("password","123");

        User user = CommonUtils.toBean(map,User.class);
        BeanUtils.populate(user);   
    }
jsp与javaBean相关的标签
<jsp:useBean> : 创建或查询bean   查询不存在时会自动创建。
<jsp:setProperty>: 设置属性值 
    //设置名为user1的JavaBean中,username的属性值为admin
    <jsp:setProperty property="username" name="user1" value="admin"/>

3、EL表达式


1.是jsp内置语言的表达式。
jsp2.0开始,不能使用java脚本。只能使用el表达式和动态标签来替代
EL代替的是<%= ...%>  输出
2.EL表达式来读取四大域
${xxx} 全域查找名为xxx的属性。不存在时,输出空字符串
3.EL中11个内置对象。 10个是map,pagecontext不是。
    param://对应参数,是一个map。key是参数名,value是值。适用于单值
    paramValues://对应参数,是一个map。key是参数名,value是多个值。适用于多值
    header://对应请求头。是一个map。key是参数名,value是头值。适用于单头值
    headerValues://对应请求头。是一个map。key是参数名,value是多个头值。适用于多头值
    initParam://获取<context-param>内的参数
    cookie:// Map<String,Cookie>类型, 其中key是cookie的name,value是cookie对象
    pageContext://是PageContext类型。${pageContext.request.method}
    ${域名Scope.xxx}  //在指定域中查找
    pagecontextScope、requestScope、sessionScope、applicationScope

4、EL函数库(由JSTL提供)


先导入标签库(tomcat中已有jar包)。
在jsp页面中 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functons"%>
方法
String toUpperCase(String input):把字符串参数转换成大写,并返回;
String toLowerCase(String input):把字符串参数转换成小写,并返回;
int indexOf(String input, String substring):返回input中substring出现的索引位置;
boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false;
boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false;
boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false;
boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回falseString substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串;
String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串;
substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串;
String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“"”进行转义;
String trim(String input):去除input中的前后空格;
String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter;
String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;
int length(Object obj):可以获取字符串、数组、各种集合的长度!
String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串。
自定义java类
1)写一个java类,类中可以定义0~N个方法
    **必须是静态有返回值的
2)在WEB-INF目录下创建一个tld文件。
3)在jsp页面中导入函数库。
4)用EL表达式使用。

猜你喜欢

转载自blog.csdn.net/qq_41307491/article/details/81349633
今日推荐