基於表單數據的封裝,泛型,反射以及使用BeanUtils進行處理
在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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
這樣就可以將數據封裝起來了。
泛型處理
這裏說的泛型是對於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);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
反射
public static T request2Bean(HttpServletRequest request, Class t ){
try {
T bean = t.newInstance();
}catch(Exception e){
//do something
}
- 1
- 2
- 3
- 4
- 5
這裏面就是用到了反射的操作。通過參數獲得一個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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
這裏面的BeanUtils.setProperty(bean,name,value);就是處理方式。是不是很簡單啊,通過者一行代碼就可以將bean字段的屬性信息添加到bean中並返回。
至此,本篇博客的講解就結束了。下面一起來看一看一個實用的案例吧。
具體的小案例
打開chrome瀏覽器,輸入tomcat服務器上的對應的網址,然後為了更加真實的模仿實際項目中的情景,我們就直接在URL地址上添加parameter吧,如下:
然後打開服務器終端terminal,然後就可以看到如下信息:
由此,我們的這個“基於表單數據的封裝,泛型化,反射操作,就完成了。
總結:
- 使用BeanUtils進行操作的時候需要註意對包的處理。
- 反射操作的時候需要註意字節碼的轉換方式。
- 在靜態方法中使用泛型需要進行聲明。
- 註意代碼邏輯的靈活使用!
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
基於表單數據的封裝,泛型,反射以及使用BeanUtils進行處理