JavaBean
JavaBean
JavaBean屬性
在JSP中使用JavaBean
JavaBean的相關標簽
初步應用JavaBean
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>表單提交到JSP的頁面</h4>
<form action="/day12/bean/success.jsp" method="POST">
姓名:<input type="text" name="username"/><br>
密碼:<input type="password" name="password"/></br>
<input type="submit" value="登入"/>
</form>
</body>
</html>
success.jsp
<%@page import="cn.bean.user" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>接受數據</h3>
<%
//獲取表單的內容
String username = request.getParameter("username");
String password = request.getParameter("password");
//創建user對象,set設置值
user User = new user();
User.setUsername(username);
User.setPassword(password);
%>
<%=User.getUsername()%>
</body>
</html>
JavaBean user.java
package cn.bean;
public class user {
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;
}
}
使用JSP的動作標簽封裝數據
- <jsp:useBean>
- <jsp:setProperty>
- <jsp:getProperty>
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
<h3>接受數據</h3>
<%
//獲取表單的內容
String username = request.getParameter("username");
String password = request.getParameter("password");
//創建user對象,set設置值
user User = new user();
User.setUsername(username);
User.setPassword(password);
%>
<jsp:useBean id="u" class="cn.bean.user"></jsp:useBean>
<jsp:setProperty property="username" name="u"/>
<jsp:setProperty property="password" name="u"/>
<jsp:getProperty property="username" name="u"/>
<jsp:getProperty property="password" name="u"/>
內省 Introspector
訪問JavaBean屬性的兩種方式
- 直接調用bean的setXXX或gerXXX方法
- 通過內省的技術訪問(java.beans包提供了內省的API)
- 內省技術是基于反射技術的
- Instrospector類獲得Bean對象的BeanInfo, 然后通過BeanInfo來獲取屬性的描述器PropertyDescriptor, 從而獲得某個屬性對應的getter/setter方法,然后通過反射機制調用這些方法
/**
* 獲取請求參數,完成數據
* @author limaoquan
*
*/
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**第一種
* //獲取表單的內容
String username = request.getParameter("username");
String password = request.getParameter("password");
//創建user對象,set設置值
user User = new user();
User.setUsername(username);
User.setPassword(password);
*/
//第二種
//獲取輸入的數據
Map<String, String[]> map = request.getParameterMap();
//創建user對象
user User = new user();
//自己編寫封裝數據的方法
try {
populate(map,User);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(User.getUsername());
System.out.println(User.getPassword());
}
/* 完成數據的封 */
private void populate(Map<String, String[]> map, user User) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
//獲取類的信息
BeanInfo info = Introspector.getBeanInfo(User.getClass());
//獲取屬性描述
PropertyDescriptor[] pds = info.getPropertyDescriptors();
//遍歷
for(PropertyDescriptor pd : pds){
String name = pd.getName();//user中屬性名稱
//map的key
if(map.containsKey(name)){
//獲取屬性寫的方法
Method m = pd.getWriteMethod();
//執行
m.invoke(User,map.get(name)[0] );
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
BeanUtils工具包
導包 commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar
BeanUtils可以自動封裝String,double,int
但是封裝日期類型,需要自己編寫代碼
- 編寫一個類,實現Converter接口,重寫方法,把字符串轉換成日期
- 在封裝數據之前進行注冊.
public class MyDateConverter implements Converter{
/**
* 字符串轉換成日期
*/
public Object convert(Class clazz, Object obj) {
//把輸入的字符串,轉換成日期類型,返回
String dDate = (String) obj;
//把字符串轉換為日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(dDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
public class UserBeanUtil extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//獲取數據
Map<String, String[]> map = request.getParameterMap();
//創建user對象
user User = new user();
//在封裝數據之前進行注冊
MyDateConverter converter = new MyDateConverter();
ConvertUtils.register(converter, Date.class);
//完成封裝
try {
BeanUtils.populate(User, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//打印
System.out.println(User.getUsername());
System.out.println(User.getPassword());
System.out.println(User.getMoney());
System.out.println(User.getBirthday());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}