public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // test1(request); // test2(request); test3(request); } //獲取單個控件的值 public void test1(HttpServletRequest request){ String name = request.getParameter("username"); System.out.println("name=" + name); } //獲取同名控件的值 public void test2(HttpServletRequest request){ String[] age = request.getParameterValues("age"); for (String string : age) { System.out.println("string=" + string); } } //獲取全部控件 public void test3(HttpServletRequest request){ //獲取所有控件的名字 System.out.println("--------request--------" + request.toString()); Enumeration<String> enu = request.getParameterNames(); while(enu.hasMoreElements()){ String name = enu.nextElement();//控件的名字 //可能有多個重復 String[] values = request.getParameterValues(name);//控件的值 for (String value : values) { System.out.println(name + "---" + value); } } }
//將表單中的所有值封裝到JavaBean中
第四種方法:將表單中的所有值封裝到JavaBean中:采用PropertyDesceipt方法
首先添加一個Javabean:實現序列化接口: implements Serializable 表示對象可以被序列化
public class User implements Serializable{ private String username; private String[] password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String[] getPassword() { return password; } public void setPassword(String[] password) { this.password = password; } @Override public String toString() { return "User [username=" + username + ", password=" + Arrays.toString(password) + "]"; } }
實現方法:
public void test4(HttpServletRequest request){ User user = new User(); Enumeration<String> enu = request.getParameterNames(); while(enu.hasMoreElements()){ //拿到控件的名字 String name = enu.nextElement(); //控件的值 String[] values = request.getParameterValues(name); try { //拿到屬性name的屬性描述器 PropertyDescriptor pd = new PropertyDescriptor(name, User.class); //將值注入到屬性中 //拿到寫描述器 Method md = pd.getWriteMethod(); //為了兼容jdk1.4,invoke方法在執行時將參數拆開進行傳遞,所以導致IllegalArgumentException if(values.length == 1){ md.invoke(user, values); }else{
//數組被拆開了 //解決辦法1: // md.invoke(user, (Object)values); //解決辦法2: md.invoke(user, new Object[] {values}); } // md.invoke(user, values); } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("封裝后的值:"+ user); }
第六種方法:BeanUtils類封裝
//將表單中的所有值封裝到JavaBean中,采用第三方jar進行:BeanUtils類 //需要:commons-logging-1.1.1.jar commons-beanutils-1.8.3.jar public void test5(HttpServletRequest request){ User user = new User(); System.out.println("封裝前:" + user); Enumeration<String> enu = request.getParameterNames(); while(enu.hasMoreElements()){ String name = enu.nextElement(); String[] values = request.getParameterValues(name); //采用BeanUtils類封裝 try { BeanUtils.setProperty(user, name, values); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("封裝后" + user); }
第七種:request.getParameterMap(); BeanUtils
//頁面所有的數據傳遞都是String類型 public void test6(HttpServletRequest request){ User user = new User(); System.out.println("封裝前:" + user); Map<String, String[]> map = request.getParameterMap(); for (Map.Entry<String , String[]> entry : map.entrySet()) { //拿到控件的名字 String name = entry.getKey(); String[] values = entry.getValue(); //封裝數據 try { BeanUtils.setProperty(user, name, values); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("封裝后" + user); }
推薦方法
//推薦方法 public void test7(HttpServletRequest request){ User user = new User(); try { BeanUtils.populate(user, request.getParameterMap()); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("封裝后777" + user); }
