JSP开发模式

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 {
            //BeanUtils.populate(user, map);
            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);//beanInfo:java.beans.GenericBeanInfo@1cfbc8b9

        //获得类中的所有属性
        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();//获得set方法
                method.invoke(obj,map.get(pd.getName())[0]);
                //pd.getName获得key.
                //map.get(pd.getName)获得一个value.这里value是String[]类型。
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/sinat_40662281/article/details/80427596