编写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 >标签
- 属性值的来源是字符串时:
<jsp:useBean id="student" class="xxx.xxx.model.Student"></jsp:useBean>
<jsp:setProperty property="stuname" name="student" value="Tony"/>
- 1
- 2
- 属性值的来源是请求参数时:
<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属性值:
- page:表示JavaBean对象的作用范围只是在其实例化的页面上,只在当前页面可用,在别的页面中不能被认识到。
- request:表示JavaBean实例除了可以在当前页面上可用之外,还可以在通过forward方法跳转的目标页面中被认识到。
- session:表示JavaBean对象可以存在session中,该对象可以被同一个用户一次会话的所有页面认识到。
- 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…)。
具体做法:
解决方法参考这里