在Java Web开发过程中,会遇到很多的表单数据的提交和对表单数据的处理。而每次都需要对这些数据的字段进行一个一个的处理就显得尤为繁琐,在Java语言中,面向对象的存在目的便是为了消除重复代码,减少我们程序员的负担。因此,在这里和大家分享一下我学到的一个小技巧。


对于封装


这里说的“封装”,是指将从客户端提交的表单数据封装到一个bean层entitry中。这样可以方便对数据的处理。下面就来看一个具体的bean实例化的小例子吧。

比如说我们从网页上获得用户的登录信息,一般来说是用户名和密码信息,因此我们就可以将这两个数据封装到一个bean中。

下面是一个class类:

package beanenclosetest;

public class PersonBean {

    private String name;
    private String password;

    @Override
    public String toString() {
        return "PersonBean [name=" + name + ", password=" + password + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

这样就可以将数据封装起来了。

泛型处理


这里说的泛型是对于beanUtil层面的数据加工。这样就可以使得其他人在调用该方法时不必再进行强制的类型转换,这样在一定的程度上加强了程序的安全性。比如下面这个代码,就用到了泛型的操作。

package beanenclosetest;

import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

public class PersonBeanUtils {

    public static <T> T request2Bean(HttpServletRequest request, Class<T> t ){

        try {
            T bean = t.newInstance();

            Enumeration<String> e = request.getParameterNames();
            while(e.hasMoreElements()){
                String name = (String) e.nextElement();
                String value = request.getParameter(name);
                BeanUtils.setProperty(bean, name, value);
            }

            return bean;

        } catch (Exception e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        }
    }

}

反射


public static T request2Bean(HttpServletRequest request, Class t ){

    try {
        T bean = t.newInstance();
    }catch(Exception e){
    //do something
    }

这里面就是用到了反射的操作。通过参数获得一个bean的字节码信息,这里面其实就是一个类的内部的所有信息的实体。

使用BeanUtils


BeanUtils是一个apache开源的一个项目,旨在帮助程序员减轻对字段数据的加工负担。其使用方法非常简单,但是需要注意的是需要commons-logging 包的支持。否则会报出程序的异常错误信息。

如下:

public static <T> T request2Bean(HttpServletRequest request, Class<T> t ){

        try {
            T bean = t.newInstance();

            Enumeration<String> e = request.getParameterNames();
            while(e.hasMoreElements()){
                String name = (String) e.nextElement();
                String value = request.getParameter(name);
                BeanUtils.setProperty(bean, name, value);
            }

            return bean;

        } catch (Exception e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        }
    }

这里面的BeanUtils.setProperty(bean,name,value);就是处理方式。是不是很简单啊,通过者一行代码就可以将bean字段的属性信息添加到bean中并返回。

至此,本篇博客的讲解就结束了。下面一起来看一看一个实用的案例吧。


具体的小案例


打开chrome浏览器,输入tomcat服务器上的对应的网址,然后为了更加真实的模仿实际项目中的情景,我们就直接在URL地址上添加parameter吧,如下:

然后打开服务器终端terminal,然后就可以看到如下信息:

由此,我们的这个“基于表单数据的封装,泛型化,反射操作,就完成了。


总结:

  • 使用BeanUtils进行操作的时候需要注意对包的处理。
  • 反射操作的时候需要注意字节码的转换方式。
  • 在静态方法中使用泛型需要进行声明。
  • 注意代码逻辑的灵活使用!

基于表单数据的封装,泛型,反射以及使用BeanUtils进行处理的更多相关文章

  1. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean

    在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...

  2. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  3. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  4. Java——利用反射机制将表单数据自动填充到JavaBean中

    以一个案例介绍反射机制的一种常见的使用场景,以及具体实现. 1.本文案例 在编写Java Web应用程序时,使用表单提交数据是一个必不可少的环节,后台对于前台使用表单提交的数据需要能够从请求中解析,并 ...

  5. Struts2_day02--Struts2封装获取表单数据方式

    Struts2封装获取表单数据方式 原始方式获取表单封装到实体类对象 属性封装(会用) 1 直接把表单提交属性封装到action的属性里面 2 实现步骤 (1)在action成员变量位置定义变量 - ...

  6. 基于Vue的工作流项目模块中,使用动态组件的方式统一呈现不同表单数据的处理方式

    在基于Vue的工作流项目模块中,我们在查看表单明细的时候,需要包含公用表单信息,特定表单信息两部分内容.前者表单数据可以统一呈现,而后者则是不同业务的表单数据不同.为了实现更好的维护性,把它们分开作为 ...

  7. Struts2封装获取表单数据方式

    一.属性封装 1.创建User实体类` package cn.entity; public class User { private String username; private String p ...

  8. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

  9. java使用BeanUtils封装file类型表单数据到一个对象中

    package com.cc.web.servlet; import java.io.FileOutputStream; import java.io.IOException; import java ...

随机推荐

  1. Python作业之多级菜单

    作业之多级菜单 菜单实现要求: 1. 列出菜单选择供选择 2. 选择对应内容进入下一级菜单 3. 任何时候都可以选择退出程序或返回上一级菜单 具体代码如下: goods = {'华为':{'A系':{ ...

  2. [坑况]饿了么你是这样的前端——vue+element ui 【this dependency was not found:'element-ui/lib/theme-chalk/index.css'】

    element ui 坑况:今日pull代码,潇洒npm run dev ,被告知:this dependency was not found:'element-ui/lib/theme-chalk/ ...

  3. java中什么是序列化和反序列化

    序列化:能够把一个对象用二进制的表示出来. 类似我第一个字节表示什么属性名词,第二个字节表示什么属性值,第几个字段表示有几个属性等. 而且这个二进制可以写到硬盘或者在网络上传输但不会破坏他的结构.一般 ...

  4. idea-JSP out.println报错问题

    <%! out.println("xxxx");%> 上面是错误的,<%!%>是声明变量是使用,而不是进行逻辑输出! <% out.println(x ...

  5. Linux平台安装MongoDB

    MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb.com/download-center#community ...

  6. Docker端口映射实现

    默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器. 容器访问外部实现 容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址.这是使用 iptables 的源地址伪装 ...

  7. Python能做些什么?

    前言 网上搜集到的一些python能做什么的资料,利用python能做很多事情,我们可以在多门课程中都使用Python作为我们的教学语言.比如,计算机网络.数据结构.人工智能.图像处理.软件分析与测试 ...

  8. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean

    回顾一下 哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利. 本文同步自博主的私人博客wing的地方酒馆 在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充. 还记得text ...

  9. Android桌面小插件——Widget

    Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...

  10. Android图表库MPAndroidChart(十)——散点图的孪生兄弟气泡图

    Android图表库MPAndroidChart(十)--散点图的孪生兄弟气泡图 起泡图和散点图如出一辙,但是个人认为要比散点图好看一点,我们来看下实际的演示效果 这个和散点图的实现很相似,我们一起来 ...