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_阅读 29,705评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 2,992评论 0 11
  • 慢慢的,一个线条,一个线条的勾勒出来。自我美好!!! 照着书本自学《从零起步素描基础教程》 注:菜鸟的初试。。
    风萧萧1阅读 96评论 0 1
  • 转载自http://www.jianshu.com/users/ee421dea117d
    YYT1992阅读 64评论 0 0
  • 我对孩子把她的脚放我脑袋上特别的烦感,忍不住的火往上冒,一把就给扔掉了,特腻,自己觉得反应有些过,觉察了一下,觉得...
    小雪妈妈阅读 79评论 0 0
  • 本文是我于2008年在第22届世界哲学大会上提交的一篇关于现象学的论文。中文的,请参考《存在是什么》一书中关于现象...
    木子哲学阅读 531评论 1 2
  • ——开始是在几年前的12.21日 在微博私信上说了第一句话 然后加了微信便一发不可收拾 从你叫什么名字开始 于是便...
    恬大佬的咩子阅读 74评论 0 2