JSP设计模式一:
- JSP + JavaBean
- 在模式一开发中提供了一些JSP的标签:
JSP的标签:<jsp:useBean> ,<jsp:setProperty >,<jsp:getProperty>
<body>
<jsp:useBean id="user" class="bull02.JSPdemo2.User"></jsp:useBean>
<jsp:setProperty property="username" name="user"/>
<jsp:setProperty property="password" name="user"/>
<%-- <jsp:setProperty property="*" name="user"/> --%>
<jsp:getProperty property="username" name="user"/>
<jsp:getProperty property="password" name="user"/>
</body>
JSP设计模式二:
- JSP + Servlet + JavaBean 称为MVC的设计模式.
MVC:
- M:Model:模型层
- V:View:视图层
- C:Controller:控制层
package bull02.JSPdemo2;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
/**
* 导包:1.commons-beanutils-1.8.3.jar
* 2.commons-logging-1.1.1.jar
* @author 45度炸
*
*/
public class JSPServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String,String[]> map = request.getParameterMap();
User user = new User();
try {
MyBeanUtils.populate(user, map);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
MyBeanUtils:
package bull02.JSPdemo2;
/**
*内省:用来获得JavaBean的属性及属性的get或set方法.
* JavaBean:就是一个满足了特定格式的Java类:
* 需要提供无参数的构造方法:
* 属性私有
* 对私有的属性提供public的get/set方法.
*/
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.Map;
import org.junit.Test;
public class MyBeanUtils {
@Test
public static void populate(Object obj,Map<String,String[]> map) throws Exception {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
System.out.println("beanInfo:"+beanInfo);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
System.out.println("pd:"+pd);
/**
* pd:java.beans.PropertyDescriptor[name=class; propertyType=class java.lang.Class; readMethod=public final native java.lang.Class java.lang.Object.getClass()]
* pd:java.beans.PropertyDescriptor[name=id; propertyType=class java.lang.Integer; readMethod=public java.lang.Integer bull02.JSPdemo2.User.getId(); writeMethod=public void bull02.JSPdemo2.User.setId(java.lang.Integer)]
* pd:java.beans.PropertyDescriptor[name=password; propertyType=class java.lang.String; readMethod=public java.lang.String bull02.JSPdemo2.User.getPassword(); writeMethod=public void bull02.JSPdemo2.User.setPassword(java.lang.String)]
* pd:java.beans.PropertyDescriptor[name=username; propertyType=class java.lang.String; readMethod=public java.lang.String bull02.JSPdemo2.User.getUsername(); writeMethod=public void bull02.JSPdemo2.User.setUsername(java.lang.String)]
*/
if(map.containsKey(pd.getName())) {
Method method = pd.getWriteMethod();
method.invoke(obj,map.get(pd.getName())[0]);
}
}
}
}