在Servlet中我們可以通過一系列提供的現有方法完成獲取前端表單數據的功能。這其中包括如下與獲取表單數據相關的方法
例如,前端HTML頁面上包含一個表單,表單裡是一個input 文本框,想要在Servlet中獲取該表單提交過來的值,可以使用以下四種方法調用。
最常用HttpServletRequest中的相關方法:
1. getParameter(name) 根據表單中name屬性的名,獲取value屬性的值方法
getParameterValues(String name)專業為複選框取取提供的方法 返回的是一個String類型的數組
getParameterNames() 得到表單提交的所有name的方法 獲得form表單所有的標籤名,返回值為枚舉(Enumeration) 用法和迭代器類似。通過迭代,獲取標籤名,調用getParameterValues方法傳入名稱,根據名稱獲取值。
getParameterMap 到表單提交的所有值的方法。獲得表單項裡 標籤名與值對應的集合 key:標籤名;value:標籤值
getInputStream 以字節流的方式得到所有表單數據。表單提交方式為post時,請求消息正文有內容,可以使用getInputStream獲得表單數據。
當成功獲取到前端數據後,就可以繼續完整封裝對象的操作。
我們以getParameterMap方法為例完成對象的封裝
將前臺獲得的數據封裝對象
案例:
創建實體類javabean User.java
(約定大於配置原則 創建JavaBean
建議前端頁面表單項name,JavaBean中的屬性名 以及 數據庫表裡的字段名保持一致 方便我們的代碼前後端統一 和日後功能擴展)
編寫servlet.java
配置web.xml
修改register.html 的aciton地址提交到指定的Servlet中
BeanUtils
由於前幾種封裝對象方法過於繁瑣 我們在下面接下來的開發中使用這一種封裝對象方法
注意:如果想使用BeanUtils自動封裝數據,表單form中元素的name需要與JavaBean中的屬性一致。
什麼是BeanUtils
BeanUtils一套開發包,Apache公司提供 ,專門進行javabean操作,在web層各種框架中被使用,例如:struts 使用BeanUtils操作JavaBean 。
實例
1、下載BeanUtils的jar :commons-beanutils 、commons-logging,需要同時下載兩個jar包。(BeanUtils依賴Logging的jar包 )
2、將beanutils和logging的 jar包複製 工程/WebContent/WEB-INF/lib
注意:引BeanUtils包時要引org.apache.commons.beanutils
常用方法:
BeanUtils.populate(Object bean, Map properties)方法進行數據封裝
因為需要為Map類型,因此需要通過request.getParameterMap()方法將form表單中的數據變為Map類型
HTML頁面傳到Servlet中的數據都是以String字符串形式傳輸的,假設,我們傳入String類型的生日,想要存儲到JavaBean中Date類型的屬性中。這裡面就涉及到String類型轉換成Date類型。當需要進行轉換時,就必須創建自定義轉換器。
自定義轉換器使用步驟
讓該類實現Converter 接口,重寫convert方法。
在convert方法中進行格式轉換 設置日期格式
註冊轉換器
創建實現類重寫方法
因為在轉換器中定義了“yyyy年MM月dd日”的格式,因此在jsp頁面的form表單需要輸入信息為“1998年2月12日”這類的格式的字符串,才可以通過我們自定義的轉換器進行轉換,轉換為Date類型並之後進行存儲。
註冊轉換器
通過調用靜態方法 完成轉換器的註冊
ConvertUtils.register(轉換器, 目標類型.class);
修改之後的Servlet程序:
BeanUtils結論
BeanUtils.populate(Object bean, Map properties)方法進行數據封裝
一般其實不需要自定義轉換器,只有在特殊情況下才會自定義轉換器
閱讀更多 跟老司機學Java 的文章