JSP3

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);
    }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,835評論 0 11
  • 慢慢的,一個線條,一個線條的勾勒出來。自我美好!!! 照著書本自學《從零起步素描基礎教程》 注:菜鳥的初試。。
    風蕭蕭1閱讀 183評論 0 1
  • 轉載自http://www.lxweimin.com/users/ee421dea117d
    YYT1992閱讀 123評論 0 0
  • 我對孩子把她的腳放我腦袋上特別的煩感,忍不住的火往上冒,一把就給扔掉了,特膩,自己覺得反應有些過,覺察了一下,覺得...
    小雪媽媽閱讀 132評論 0 0