MVC模式包括model层 controller控制层 和view层 。在此分别用到的是model层(包括domain和DAO) controller控制层(这里用的是servlet) 和view层(JSP)。
index.JSP页面如下:
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>录入商品信息</title>
<style type="text/css">
*{font-size: 12px;}
</style>
<script type="text/javascript">
function save(form){
if(form.name.value == ""){
alert("请输入图书名称!");
return false;
}
if(form.price.value == ""){
alert("请输入图书价格!");
return false;
}
if(form.author.value == ""){
alert("请输入作者!");
return false;
}
}
</script>
</head>
<body>
<form action="BookServlet" method="post" οnsubmit="return save(this);">
<table border="1" align="center" width="300">
<tr>
<td align="center" colspan="2">
<br><h1>录入图书信息</h1>
</td>
</tr>
<tr>
<td align="right">名称:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td align="right">价 格:</td>
<td><input type="text" name="price"></td>
</tr>
<tr>
<td align="right">作 者:</td>
<td><textarea name="author" cols="30" rows="3"></textarea></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="提 交">
<input type="reset" value="重 置">
</td>
</tr>
</table>
</form>
</body>
</html>
<script>里面添加了一些表单控制信息 下方这些HTML语句实现了外表 就是页面显示 。
通过下面这句话
<form action="BookServlet" method="post" οnsubmit="return save(this);">
可知 表单的提交地址是
BookServlet ,其请求方法是post 。也就是说映射到BookServlet类的post方法进行处理。
模型层是这样的
首先是domain 实体类 很简单 只需要声明数据库对应表的每一个属性,并且写上get 和set方法就行了(可以自动生成getset方法的,就是在编写的空白处右键选择 source--获得getset方法 然后选择要生成方法的属性就可以了)
这里是添加书目信息,所以我们的实体类是Book.java
public class Book {
private int id;
private String name;
private double price;
private String author;//这里是domain层 在这里声明的对象是和数据库中的表对应的
public int getId() {
return id;//可以通过右击 source选择生成getter and setter方法。
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
然后再对应数据库操作的DAO类
bookDAO.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BookDao {
public void saveBook(Book book){
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 数据库连接URL
String url = "jdbc:mysql://localhost:3306/db_database05";
// 获取数据库连接
Connection conn = DriverManager.getConnection(url, "这里是数据库用户名", "这里输入数据库密码");
// 这里是要执行的sql语句 插入书目信息的SQL语句 (这里使用?占位符)
String sql = "insert into tb_book(name,price,author) values(?,?,?)";
// 创建PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
// 这里是对sql语句中的参数动态赋值ֵ
ps.setString(1, book.getName());
ps.setDouble(2, book.getPrice());
ps.setString(3, book.getAuthor());
//执行更新操作
ps.executeUpdate();
ps.close(); // 关闭ps
conn.close(); // 关闭conn
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后就是起到关键作用 像是一个中介 一个桥梁作用的控制层---servlet了。
BookServlet.java
package com.lyq.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lyq.model.Book;
import com.lyq.model.BookDao;
public class BookServlet extends HttpServlet {
private static final long serialVersionUID = 5280925165959130198L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置response的编码
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
// request的编码设置
request.setCharacterEncoding("GBK");
// 获取PrintWriter对象
PrintWriter out = response.getWriter();
// 获取表单post过来的值
String name = request.getParameter("name");
String price = request.getParameter("price");
String author = request.getParameter("author");
Book book = new Book();
// 创建book对象 并把得到的属性值 赋给book对象ֵ
book.setName(name);
book.setPrice(Double.valueOf(price));
book.setAuthor(author);
// 实例化BookDao
BookDao bookDao = new BookDao();
//用savebook方法将属性值们传入数据库
bookDao.saveBook(book);
out.print("书目保存成功!");
out.flush();
out.close();
}
}
此外还需要建立对应的数据库 这里用到的是mysql。
可以多多看看servlet里面的代码 会更加理解这个过程 当用户向表单中输入书目信息后,该信息在servlet中 先通过post方法得到,再把这些信息通过实例化一个book对象传给这个book对象,然后再实例化bookdao对象,把信息传给 bookdao对象的savebook方法,这个方法便实现了向数据库的表中插入信息的操作。