JSP与JavaBean

来源:互联网 发布:o2o创业项目 php 编辑:程序博客网 时间:2024/06/01 08:44

编写JavaBean

Student类:

package xxx.xxx.model;public class Student {    private String stuno;       //String类型    private String stuname;    private boolean member;     //boolean类型    private String[] phones;    //String[] 类型    public String getStuno() {        return stuno;    }    public void setStuno(String stuno) {        this.stuno = stuno;    }    public String getStuname() {        return stuname;    }    public void setStuname(String stuname) {        this.stuname = stuname;    }    public boolean isMember() {        return member;    }    public void setMember(boolean member) {        this.member = member;    }    public String[] getPhones() {        return phones;    }    public void setPhones(String[] phones) {        this.phones = phones;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

在JSP中使用JavaBean(以Student为例)

定义JavaBean:< jsp:useBean >标签

<jsp:useBean id="student" class="xxx.xxx.model.Student"></jsp:useBean>
  • 1

设置JavaBean属性:< jsp:setProperty >标签

  1. 属性值的来源是字符串时:
<jsp:useBean id="student" class="xxx.xxx.model.Student"></jsp:useBean><jsp:setProperty property="stuname" name="student" value="Tony"/>
  • 1
  • 2
  1. 属性值的来源是请求参数时:
<jsp:useBean id="student" class="xxx.xxx.model.Student"></jsp:useBean><jsp:setProperty property="stuname" name="student" param="studentName"/>
  • 1
  • 2

相当于:

<jsp:useBean id="student" class="xxx.xxx.model.Student"></jsp:useBean><% String str = request.getParameter("studentName"); %><jsp:setProperty property="stuname" name="student" value=<%=str %>/>
  • 1
  • 2
  • 3

获取JavaBean属性:< jsp:getProperty >标签

<jsp:getProperty property="stuname" name="student"/>
  • 1

JavaBean的范围

jsp:useBean动作:

<jsp:useBean id="idName" class="package.class" scope="page|session|..."></jsp:useBean>
  • 1

scope属性值:

  1. page:表示JavaBean对象的作用范围只是在其实例化的页面上,只在当前页面可用,在别的页面中不能被认识到。
  2. request:表示JavaBean实例除了可以在当前页面上可用之外,还可以在通过forward方法跳转的目标页面中被认识到。
  3. session:表示JavaBean对象可以存在session中,该对象可以被同一个用户一次会话的所有页面认识到。
  4. application:表示JavaBean对象可以存在application中,该对象可以被所有用户的所有页面认识到。

page范围:

page1.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="page">    <jsp:setProperty property="stuname" name="student" value="Tony" /></jsp:useBean><html>    <body>        学生姓名:<jsp:getProperty property="stuname" name="student" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述
page2.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="page"></jsp:useBean><html>    <body>        学生姓名:<jsp:getProperty property="stuname" name="student" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述

request范围:

request1.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="request">    <jsp:setProperty property="stuname" name="student" value="Tony" /></jsp:useBean><html>    <body>        <jsp:forward page="request2.jsp" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

request2.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="request"></jsp:useBean><html>    <body>        学生姓名:<jsp:getProperty property="stuname" name="student" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述

session范围:

session1.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="session">    <jsp:setProperty property="stuname" name="student" value="Tony" /></jsp:useBean><html>    <body>        学生姓名:<jsp:getProperty property="stuname" name="student" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述
session2.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><jsp:useBean id="student" class="xxx.xxx.model.Student" scope="session"></jsp:useBean><html>    <body>        学生姓名:<jsp:getProperty property="stuname" name="student" />    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述

application范围:(省略)


DAO与VO:

DAO类:专门负责对数据库的访问。

VO:在DAO中,可以每查询到一条记录,就将其封装为Student对象,该Student对象就是VO,上面的Student就可以充当VO的角色。

编写DAO和VO:

t_student表结构:
这里写图片描述
t_student表数据:
这里写图片描述
StudentDao类:

package xxx.xxx.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import xxx.xxx.model.Student;public class StudentDao {    public ArrayList queryAllStudents() throws Exception {        ArrayList students = new ArrayList();        String url = "jdbc:mysql://localhost:3306/javabean?useUnicode=true&characterEncoding=GBK";        String user = "root";        String password = "123456";        //获取连接        Class.forName("com.mysql.jdbc.Driver");        Connection conn = DriverManager.getConnection(url,user,password);        //执行SQL语句        String sql = "select stuno,stuname from t_student";        Statement stat = conn.createStatement();        ResultSet rs = stat.executeQuery(sql);        while(rs.next()) {            Student student = new Student();            student.setStuno(rs.getString("stuno"));            student.setStuname(rs.getString("stuname"));            students.add(student);        }        //关闭连接        rs.close();        stat.close();        conn.close();        return students;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

在JSP中使用DAO与VO:

daoExample.jsp:

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GB18030"%><%@ page import="xxx.xxx.model.Student" %><%@ page import="xxx.xxx.dao.StudentDao" %><html>    <body>        <%            StudentDao studentDao = new StudentDao();            ArrayList students = studentDao.queryAllStudents();            for(int i = 0; i < students.size(); i++) {                Student student = (Student)students.get(i);                out.println(student.getStuno()+", "+student.getStuname()+"<br>");            }        %>    </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这里写图片描述

意外:Class Not Found: javax.servlet.ServletException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

意外地出现了这个异常,刚开始是以为没有加入mysql-connector-jar-5.1.28-bin.jar驱动包,后面Build Path加入这个jar驱动包后还是出现这个异常,后面查了一下,发现是WEB-INF目录下的lib文件夹要加入这个jar驱动包(忘记这个是Web Project…)。
具体做法:
这里写图片描述
解决方法参考这里