在JSP开发过程中,有两种开发模型可供选择。一种是JSP和JavaBean结合,称为model1,另一种是JSP、JavaBean和Servlet相结合,称为model2。
JavaBean是用于封装业务逻辑或对象的Java类,是一个可重用的Java软件组件模型。分为可视化和非可视化,前者是一种传统的应用方式,用于实现可视化界面,如窗体、按钮、文本框等;后者用于实现一些业务逻辑或封装一些业务对象。
1、第一种模式
index.js,表单,提交
<form action="student.jsp" method="post">
<p>学号:<input type="text" name="id"/></p>
<p>年龄:<input type="text" name="age"/></p>
<p>
<input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</p>
</form>
student.jsp,实例化对象,赋值,输出属性
<jsp:useBean id="student" class="pa.Student"></jsp:useBean>
<jsp:setProperty property="*" name="student"/>
<jsp:setProperty property="classes" name="student" value="一年级(1)班"/>
<hr/>
<p>学号:<%=student.getId() %></p>
<p>年龄:<%=student.getAge() %></p>
<p>班级:<%=student.getClasses()%></p>
Student.java类,UseBean
public class Student
{
private int id;
private int age;
private String classes;
public void setId(int id)
{
this.id=id;
}
public int getId()
{
return id;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setClasses(String classes)
{
this.classes=classes;
}
public String getClasses()
{
return classes;
}
}
还可在jsp页面中使用getProperty属性。
<jsp:useBean id="book" class="pa.Book"></jsp:useBean>
<jsp:setProperty property="bookName" name="book" value="《JAVA程序设计标准教程》"/>
<jsp:setProperty property="author" name="book" value="明日科技"/>
<jsp:setProperty property="category" name="book" value="计算机"/>
<jsp:setProperty property="price" name="book" value="199.782"/>
书名:<jsp:getProperty property="bookName" name="book"/><br/>
作者:<jsp:getProperty property="author" name="book"/><br/>
类别:<jsp:getProperty property="category" name="book"/><br/>
价格:<jsp:getProperty property="price" name="book"/><br/>
其中Book.java如下:
public class Book
{
private String bookName;
private String author;
private String category;
private double price;
public void setBookName(String bookName )
{
this.bookName=bookName;
}
public String getBookName()
{
return bookName;
}
public void setAuthor(String author)
{
this.author=author;
}
public String getAuthor()
{
return author;
}
public void setCategory(String category )
{
this.category=category;
}
public String getCategory()
{
return category;
}
public void setPrice(double price )
{
this.price=price;
}
public double getPrice()
{
return price;
}
}
第一种模式,jsp页面接收用户的输入,通过表单形式,在另一个jsp页面连接到JavaBean,处理用户的输入,然后向用户显示信息。涉及的对象只有JSP和JavaBean。
2、第二种模式
第二种模式,jsp页面接收用户的输入,通过表单提交到Servlet,Servlet负责接收数据,实例化JavaBean定义的对象,处理数据,在另一个页面连接Servlet,在页面显示数据给用户。
第二种模式即为MVC模式,分别将显示层、控制层和模型层相分离,3层结构各司其职。Model模型层,是应用程序的核心,主要有JavaBean担任,一般为实体对象或业务逻辑,具有重用性和扩展性;View视图层,提供应用程序和用户之间交互的界面,这层不包括任何的业务逻辑,一般由jsp或html来担任;Controller控制层,控制应用程序中的请求,起到宏观调控的作用,通知容器选择什么样的模型组件,一般由Servlet担任。
index.jsp
<form action="servlet/GoodsServlet" method="post" onSubmit="return save(this);">
<table border="1" align="center" width="500">
<tr>
<td align="center" colspan="2">
<h1>录入商品信息</h1>
</td>
</tr>
<tr>
<td>商品名称:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>价格:</td>
<td><input type="text" name="price"></td>
</tr>
<tr>
<td>商品描述:</td>
<td><textarea name="description" cols="30" rows="3"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
GoodsServlet.java,即控制层servlet。首先接收jsp页面的参数,然后实例化一个类(Goods),对类进行操作(设置属性)。这里还实例化了另外一个类GoodsDao,看看代码它要干什么
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
request.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
//获取商品信息
String name=request.getParameter("name");
String price=request.getParameter("price");
String description=request.getParameter("description");
//实例化商品对象
Goods goods=new Goods();
//商品对象赋值
goods.setName(name);
goods.setPrice(Double.valueOf(price));
goods.setDescription(description);
//实例化GoodsDao
GoodsDao goodsDao=new GoodsDao();
goodsDao.saveGoods(goods);
out.print("商品信息保存成功!");
out.flush();
out.close();
}
Goods.java
public class Goods
{
private String name;
private double price;
private String description;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setPrice(double price)
{
this.price = price;
}
public double getPrice()
{
return price;
}
public void setDescription(String description)
{
this.description = description;
}
public String getDescription()
{
return description;
}
}
GoodsDao.java 。 连接数据库并将一个Goods类型的对象的属性值写进数据库
import java.sql.*;
public class GoodsDao
{
public void saveGoods(Goods goods)
{
try
{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test";
Connection conn=DriverManager.getConnection(url,"root","xhp");
String sql="insert into tb_goods(name,price,description) values(?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,goods.getName());
ps.setDouble(2,goods.getPrice());
ps.setString(3,goods.getDescription());
ps.executeUpdate();
ps.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
其中数据库的结构为:
create table tb_goods
(
name varchar(20),
price double,
description varchar(20)
);
在service.jsp页面查看上述操作的结果
<jsp:useBean id="goods" class="pa.Goods"></jsp:useBean>
<jsp:setProperty property="*" name="goods"></jsp:setProperty>
<jsp:useBean id="goodsDao" class="pa.GoodsDao"></jsp:useBean>
<%
goodsDao.saveGoods(goods);
%>
3、检查JavaBean的作用域
<jsp:useBean id="counter_session" class="pa.Counter" scope="session"></jsp:useBean>
session:<jsp:getProperty property="count" name="counter_session"/>
<jsp:useBean id="counter_application" class="pa.Counter" scope="application"></jsp:useBean>
application:<jsp:getProperty property="count" name="counter_application"/>
其中Counter.java如下:
public class Counter
{
private int count=0;
public int getCount()
{
return ++count;
}
}
4、使用MVC模式实现用户登录模块
(0)数据库设计
(1)视图层,jsp文件
index.jsp,主页
reg.jsp,用户注册页面
login.jsp,用户登录页面
message.jsp,提示信息页面
(2)控制层,servlet,即java文件
RegServlet.java,用户注册Servlet
LoginServlet.java,用户登录Servlet
UserExitServlet.java,用户退出Servlet
(3)模型层,class(JavaBean组件),即java文件
User.java,封装用户对象
UserDao.java,用户信息的数据库操作
DataBaseUtil.java,数据库连接工具类