Web工程代码简化

通过上篇博客的反射机制将代码简化,即获取一个类,通过其内部方法名、变量名,通过命名机制将其一 一对应。

从jsp到servlet代码简化

1.例:通过提交一个handler将所要写的servlet简化,jsp提交至原servlet,调用继承自父类的doPost,doGet等方法判断所需要调用的真正方法。即将addServlet等集合在同一个servlet中。代码如下:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) {

        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        String handler = request.getParameter("handler");
        try {

            Method method = this.getClass().getDeclaredMethod(handler, HttpServletRequest.class,HttpServletResponse.class);
            method.invoke(this,request, response);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
    public void addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*在servlet界面我们往往会写好多无用的代码:
        例:String realName = request.getParameter("stuName");
          stu.setStuName(stuName)
        使用Bentils jar包可以省掉相当多的重复性工作如上面的代码
        */
        Map stuMap = request.getParameterMap();
        Student student = new Student();
        try {
            BeanUtils.populate(student, stuMap);//populate方法根据命名规则将代码简化
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
            }

2.例:
BeanUtils工具的使用
功能:BeanUtils主要是用于将对象的属性封装到对象中
BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型的转换,并且BeanUtils设置属性的时候也是依赖于底层的getter和setter方法
如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换。
ConvertUtils.register(实现coverter接口的类,与要引用的数据类型的class对象)
例如:

    //添加一个日期类转换器        
    ConvertUtils.register(new DateConverter(), Date.class);     

    class DateConverter implements Converter{
    public Date convert(Class type, Object value) {
                if(value != null){
                    try {
        return new SimpleDateFormat("yyyy-MM-dd").parse(value.toString());
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
                return null;
            }
    }

servlet到数据库简化

commons-dbutils介绍:commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

DbUtils提供了三个包,分别是:
org.apache.commons.dbutils;
org.apache.commons.dbutils.handlers;
org.apache.commons.dbutils.wrappers;

(1)org.apache.commons.dbutils
DbUtils 关闭链接等操作
QueryRunner 进行查询的操作

(2)org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

(3)org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()
以上是找的大概方法的总结下面是用法

QueryRunner中提供对sql语句操作的API
它主要有三个方法:
    具体分析见:
  query() 用于执行select
  update() 用于执行insert/update/delete
 
    public int addStu(Student stu) {
        //增加学生信息
        Connection conn = null;
        String sql = "insert into student (stu_name,gender,stu_num)values(?,?,?)";
        QueryRunner qr = new QueryRunner();
        Object[] params = { stu.getStuName(), stu.getGender(), stu.getStuNum() };
        conn = DButil.getConn();
        try {
            return qr.update(conn, sql, params);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("添加数据错误");
        }
        return 0;
    }

    public int deleteStu(Student stu) {
        //删除学生信息
        Connection conn = DButil.getConn();
        String sql = "delete from student where stu_num = ?";
        QueryRunner qr = new QueryRunner();
        try {
            return qr.update(conn, sql, stu.getStuNum());
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DButil.closeConn(conn);
        }
        return 0;
    }
    public int updateStu(Student stu) {
        //修改学生信息
        String sql = "update student set stu_name = ?,gender = ?,stu_num = ? where id = ?";
        Connection conn = DButil.getConn();
        QueryRunner qr = new QueryRunner();
        Object[] params = { stu.getStuName(), stu.getGender(), stu.getStuNum(), stu.getStuId() };
        try {

            return qr.update(conn, sql, params);
        } catch (Exception e) {
            System.out.println("修改数据错误");
        } finally {
            DButil.closeConn(conn);
        }
        return 0;
    }
    public List queryStu() {
        Connection conn = DButil.getConn();
        String sql = "select * from student";
        QueryRunner qr = new QueryRunner();
        try {
            return qr.query(conn,sql, new BeanListHandler(Student.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;

    }
    //还有其余用法在此就不一一介绍了

你可能感兴趣的:(总结)