模式二:JSP+Servlet+JavaBean
链接地址:http://wxmimperio.coding.io/?p=189
JSP中两种模式的总结
链接地址:http://wxmimperio.coding.io/?p=207
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变——摘自百度百科
(其实可以将javabean理解为一个类,我们用的时候调用各种里面的方法、读写属性和发送接收事件封装数据和操作从而使html的前台与jsp的后台实现部分分离,模块化强便于维护)
JSP网站开发技术标准给出了两种使用JSP的方式,这些方式都可以归结为
模式一:JSP+JavaBean
模式二:JSP+Servlet+JavaBean
已经用模式一做了两个toy program,所以做一下总结。
在JSP+JavaBean中,JSP页面独自相应请求并经处理返回,所有的数据通过Bean处理,JSP实现页面的表现,实现了表现和业务逻辑相分离,MVC设计模式(Model View Controller)。
但是大量使用使用这个模式时会带来一个副作用,会导致页面里嵌入了大量的java控制代码,当要处理的业务逻辑复杂时会让页面设计变得十分困难,所以这种模式适合小型项目而不适合大型的项目。
JSP访问JavaBean的方法:
1.导入JavaBean类
通过<%@ page import>指令导入JavaBean类,
例如:
- <%@ page import="rsystem.DB" %>
其中rsystem是一个包,DB是一个JavaBean类
2.声明JavaBean对象。
<jsp:useBean>标签用来声明JavaBean对象,
例如:
- <jsp:useBean id="myBean" class="rsystem.DB" scope="session"/>
其中id是名称,scope属性决定了JavaBean存在的范围,通常有page(默认)、requset、session、application
3.访问JavaBean属性。
JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到网页上,可以用<jsp:getProperty>标签。
例如:
- <jsp:getProperty name="myBean" property="count"/>
如果要给JavaBean的某个属性赋值,可以用<jsp:setProperty>标签,
例如:
- <jsp:setProperty name="myBean" property="count" value="0"/>
实例说明:
这里写一个用户注册的小例子帮助理解这种模式,会用到JDBC编程和SQL的相关知识,这里不做相关介绍。
(我的开发环境是Idea+Tomcat+Mysql,提前做好相应jar包的引入)
数据库脚本:
- create database register;
- use register;
- #会员注册信息
- create table user_info(
- userName varchar(20) not null, #用户名
- passWord varchar(20) not null, #用户密码
- email varchar(20) #email地址
- );
1.表示注册信息的JavaBean(registerInfo.java)
- package rsystem;
- /**
- * 此JavaBean,表示了注册信息的数据
- */
- public class registerInfo {
- private String username,password,email;
- //set和get方法
- public void setUsername(String username) {
- this.username = username;
- }
- public String getUsername() {
- return username;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getPassword() {
- return password;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public String getEmail() {
- return email;
- }
- }
2.表示执行数据库操作的JavaBean(registerBD.java)
- package rsystem;
- import java.sql.*;
- import java.util.*;
- /**
- * 此JavaBean,表示了对数据库的操作
- */
- public class registerBD {
- private Connection con;
- registerInfo rinfo;
- //获取数据库连接
- public registerBD() {
- try {
- Class.forName("com.mysql.jdbc.Driver");
- String url = "jdbc:mysql://localhost:3306/register?user=root&password=root";
- con = DriverManager.getConnection(url);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- //设置属性
- public void setRegisterInfo(registerInfo rinfo) {
- this.rinfo = rinfo;
- }
- public void addRegisterInfo()throws Exception {
- //信息插入数据库,JDBC相关操作
- try {
- String sql = "insert into user_info(userName,passWord,email) values(?,?,?)";
- PreparedStatement stm = con.prepareStatement(sql);
- stm.setString(1,rinfo.getUsername());
- stm.setString(2,rinfo.getPassword());
- stm.setString(3,rinfo.getEmail());
- stm.executeUpdate();
- con.close();//关闭数据库连接
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //获取用户信息,返回结果到JSP页面
- public Collection getRegisterInfo()throws Exception {
- //信息从数据库查询,JDBC相关操作
- Collection ret = new ArrayList();
- try {
- Statement stm = con.createStatement();
- ResultSet result = stm.executeQuery("select count(*) from user_info");
- int register_count = 0;
- if(result.next()) {
- register_count = result.getInt(1);
- result.close();
- }
- if(register_count > 0) {
- result = stm.executeQuery("select * from user_info");
- while (result.next()) {
- String username = result.getString("username");
- String password = result.getString("password");
- String email = result.getString("email");
- registerInfo rinfo = new registerInfo();
- rinfo.setUsername(username);
- rinfo.setPassword(password);
- rinfo.setEmail(email);
- ret.add(rinfo);
- }
- result.close();
- stm.close();
- }
- con.close();
- } catch (Exception e) {
- e.printStackTrace();
- throw e;
- }
- return ret;
- }
- }
3.填写用户信息的html(registerPage.html)
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="gbk">
- <title></title>
- </head>
- <body>
- <td><table align="center" border="1" cellpadding="0" cellspacing="0">
- <form action="registerOk.jsp">
- <tr>
- <td>用户名:</td>
- <td><input type="text" name="username" size="25"></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><input type="password" name="password" size="25"></td>
- </tr>
- <tr>
- <td>邮箱:</td>
- <td><input type="text" name="email" size="25"></td>
- </tr>
- <tr>
- <td><input type="submit" value="提交注册"></td>
- </tr>
- </form>
- </td></table>
- </body>
- </html>
4.调用JavaBean添加注册信息到数据库的JSP(registerOk.jsp)
- <%@ page contentType="text/html;charset=gbk" language="java" %>
- <%@ page import="java.sql.*,rsystem.*, java.util.*" %>
- <%--JSP访问JavaBean--%>
- <jsp:useBean id="registerInfo" class="rsystem.registerInfo" scope="page">
- <jsp:setProperty name="registerInfo" property="*"></jsp:setProperty>
- </jsp:useBean>
- <jsp:useBean id="registerBD" class="rsystem.registerBD" scope="page"></jsp:useBean>
- <html>
- <head>
- <title></title>
- </head>
- <body>
- <%
- //调用JavaBean中的方法
- try {
- registerBD.setRegisterInfo(registerInfo);
- registerBD.addRegisterInfo();
- } catch (Exception e) {
- e.printStackTrace();
- }
- %>
- <%--页面跳转--%>
- <jsp:forward page="registerView.jsp"></jsp:forward>
- </body>
- </html>
5.显示添加信息的JSP页面,即从数据库读取显示(registerView.jsp)
- <%@ page contentType="text/html;charset=gbk" language="java" %>
- <%@ page import="java.sql.*,rsystem.*, java.util.*" %>
- <jsp:useBean id="registerBD" class="rsystem.registerBD" scope="page"></jsp:useBean>
- <html>
- <head>
- <title></title>
- </head>
- <body>
- <%
- Collection registers = registerBD.getRegisterInfo();
- Iterator it = registers.iterator();
- while (it.hasNext()) {
- registerInfo register = (registerInfo)it.next();
- %>
- <table align="center" border="1" cellpadding="0" cellspacing="0">
- <tr>
- <td>用户名:<%=register.getUsername()%></td>
- </tr>
- <tr>
- <td>密码:<%=register.getPassword()%></td>
- </tr>
- <tr>
- <td>邮箱:<%=register.getEmail()%></td>
- </tr>
- </table>
- <%
- }
- %>
- </body>
- </html>
运行:
在浏览器里输入registerPage.html的地址,填入用户信息进行注册,会自动跳转到registerView.jsp页面显示信息。
registerPage.html注册页面:
registerView.jsp显示页面:
参考:圣骑士Wind的博客、JSP应用开发详解(第三版)