java代码初级,采用MVC框架实现对数据库的添加操作
- 创建数据表 BOOK_MESSAGE
CREATE TABLE BOOK_MESSAGE(
BOOK_ID NUMBER(6) PRIMARY KEY,
BOOK_NAME VARCHAR(200 CHAR) NOT NULL,
BOOK_AUTHOR VARCHAR(200 CHAR) NOT NULL,
BOOK_PRICE NUMBER(4,2) NOT NULL,
BOOK_ISBN CHAR(17) NOT NULL
)
- 创建序列
CREATE SEQUENCE BOOK_MESSAGE_ID;
采用mvc模式搭建服务
- com.dhee.common
- java常用工具
- com.dhee.dao
- 数据化持久层(接口)
- com.dhee.dao.impl
- 实现数据化持久层接口
- com.dhee.service
- 模型层
- com.dhee.servlet
- 控制层
com.dhee.entity
- 实体(java Bean封装数据表中的一行数据)
第一步构建简单的jsp页面
- 代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
#content{
width:80%;
margin: 50px auto;
font-size: 16px;
height:500px;
line-height: 30px;
}
.table{
width:50%;
height:50%;
}
</style>
</head>
<body>
<div id = "content">
<form action="insertServlet" method ="post">
<table class = "table">
<tr>
<th colspan = "2">
录入图书信息
</th>
</tr>
<tr>
<td>图书名称</td>
<td>
<input type = "text" name = "bookName" value = "${bookName }"/>
</td>
</tr>
<tr>
<td>图书作者</td>
<td>
<input type = "text" name = "bookAuthor" value = "${bookAuthor }"/>
</td>
</tr>
<tr>
<td>图书单价</td>
<td>
<input type = "text" name = "bookPrice" value = "${price }"/>
</td>
</tr>
<tr>
<td>图书ISBN</td>
<td>
<input type = "text" name = "bookISBN" value = "${bookISBN }"/>
</td>
</tr>
<tr>
<td colspan = "2">
<button type = "submit">录入</button>
<button type = "reset">重置</button>
</td>
</tr>
</table>
</form>
<!-- 如果用户没有填写完整,则调用JavaScript代码弹出对话框提示用户输入完整 -->
${requestScope.msg_error}
<!-- 用户提示用户录入操作是否成功 -->
${sessionScope.msg}
<!-- 因为属性值保存在session中,执行之后需要清除session -->
<c:remove var="msg" scope="session" />
</div>
</body>
</html>
实现业务逻辑:需要做的是将网页中的数据添加数据表BOOK_MESSAGE中
- jsp页面请求servlet,servlet将页面传入的数据封装到BookMessageEntity中,需要调用控制层(Service)的插入方法,控制层知道servlet请求插入数据之后,控制层将会告知数据化持久层进行数据表的相关操作。数据化持久层完成操作后将会把成功或者失败的信息一级一级的传回视图层,告知用户操作的结果。
在com.dhee.dao包中创建接口,定义需要对数据库操作的方法,代码如下:
package com.dhee.dao;
import java.sql.Connection;
import java.sql.SQLException;
import com.dhee.entity.BookMessageEntity;
public interface BookMessageDAO {
/**
* 向BOOK_MESSAGE表中插入一行数据
*
* @param conn
* 数据库连接对象
* @param entity
* 用于保存即将插入数据表一行数据的实体类
* @return 返回boolean类型,成功返回true,失败返回false
* @throws SQLException
*/
public abstract boolean insert(Connection conn, BookMessageEntity entity) throws SQLException;
}
- com.dhee.dao.impl包中实现接口,重写接口内所有的方法,当然此时只有一个方法(*_*)
package com.dhee.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.dhee.dao.BookMessageDAO;
import com.dhee.entity.BookMessageEntity;
public class BookMessageDAOImpl implements BookMessageDAO{
@Override
public boolean insert(Connection conn, BookMessageEntity entity) throws SQLException {
String sql = "INSERT INTO BOOK_MESSAGE VALUES (BOOK_MESSAGE_ID.NEXTVAL,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, entity.getBookName());
ps.setString(2, entity.getBookAuthor());
ps.setDouble(3, entity.getBookPrice());
ps.setString(4, entity.getBookISBN());
int row = ps.executeUpdate();
if(row > 0){
//操作成功
return true;
}
return false;
}
}
- com.dhee.service包中将调用数据化持久层中的方法,并将视图层传入的图书信息封装作为形参。
package com.dhee.service;
import java.sql.Connection;
import java.sql.SQLException;
import com.dhee.common.DbUtils;
import com.dhee.dao.BookMessageDAO;
import com.dhee.dao.impl.BookMessageDAOImpl;
import com.dhee.entity.BookMessageEntity;
public class BookMessageService {
/**
* 执行insert()方法添加一行图书信息
*
* @param entity
* 保存图书信息的实体类
* @return 返回boolean类型,成功返回true,失败返回false
* @throws ClassNotFoundException
* @throws SQLException
*/
public boolean insert(BookMessageEntity entity) throws ClassNotFoundException, SQLException {
Connection conn = DbUtils.getConnection();
try {
BookMessageDAO dao = new BookMessageDAOImpl();
boolean b = dao.insert(conn, entity);
if (b) {
//操作成功,提交并返回true
conn.commit();
return true;
}
//操作失败,回滚
conn.rollback();
} finally {
conn.close();
}
return false;
}
}
- com.dhee.servlet包,视图层将请求发送给servlet,servlet将数据封装传给控制层。
package com.dhee.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dhee.entity.BookMessageEntity;
import com.dhee.service.BookMessageService;
public class BookMessageInsertServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -3916508440795808156L;
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String bookName = req.getParameter("bookName");
String bookAuthor = req.getParameter("bookAuthor");
String price = req.getParameter("bookPrice");
String bookISBN = req.getParameter("bookISBN");
req.setAttribute("bookName", bookName);
req.setAttribute("bookAuthor", bookAuthor);
req.setAttribute("price", price);
req.setAttribute("bookISBN", bookISBN);
// 如果用户没有填写完整,则转发至录入页面继续完成
boolean bN = (bookName == null || bookName.trim().equals(""));
boolean bA = (bookAuthor == null || bookAuthor.trim().equals(""));
boolean bP = (price == null || price.trim().equals(""));
boolean bI = (bookISBN == null || bookISBN.trim().equals(""));
if (bN || bA || bP || bI) {
req.setAttribute("msg_error", "<script>alert('请填写完整!');</script>");
req.getRequestDispatcher("index.jsp").forward(req, resp);
return;
}
Double bookPrice = Double.valueOf(price);
// 创建实体类封装用户输入的图书信息
BookMessageEntity entity = new BookMessageEntity();
entity.setBookName(bookName);
entity.setBookAuthor(bookAuthor);
entity.setBookPrice(bookPrice);
entity.setBookISBN(bookISBN);
BookMessageService service = new BookMessageService();
HttpSession session = req.getSession(true);
try {
boolean b = service.insert(entity);
if (b) {
session.setAttribute("msg", "<script>alert('录入成功');</script>");
}else{
session.setAttribute("msg", "<script>alert('录入失败');</script>");
}
resp.sendRedirect("index.jsp");
return;
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
req.getRequestDispatcher("error.jsp").forward(req, resp);
}
}
}
- 业务逻辑大致就是这样,初学者,第一次写博客,慢慢成长!!!
- 其中com.dhee.entity就是javabean
package com.dhee.entity;
/**
* 用于封装BOOK_MESSAGE表中的一行数据
*
* @author yuanbao
*
*/
public class BookMessageEntity implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -2865032762447701969L;
private Integer bookId;
private String bookName;
private String bookAuthor;
private Double bookPrice;
private String bookISBN;
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
public Double getBookPrice() {
return bookPrice;
}
public void setBookPrice(Double bookPrice) {
this.bookPrice = bookPrice;
}
public String getBookISBN() {
return bookISBN;
}
public void setBookISBN(String bookISBN) {
this.bookISBN = bookISBN;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
com.dhee.common包下,封装了数据库的加载和过滤器的字符设置实现
package com.dhee.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DbUtils {
public static Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","yuanbao");
return conn;
}
}
//下面是过滤器的代码
package com.dhee.common;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 过滤器,为所有servlet设置字符格式
*
* @author yuanbao
*
*/
public class Filter implements javax.servlet.Filter {
private String charset;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
arg0.setCharacterEncoding(this.charset);
arg1.setCharacterEncoding(this.charset);
arg1.setContentType("text/html;charset=" + this.charset);
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.charset = arg0.getInitParameter("charset");
}
}
对于web.xml文件的配置
- filter的配置要写在servlet的上面
- 每一个servlet都要有一个对应的servlet-mapping
- 在filter内部写的init-param是属于当前的filter的私有成员
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>pages</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.dhee.common.Filter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>bookMessageInsertServlet</servlet-name>
<servlet-class>com.dhee.servlet.BookMessageInsertServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bookMessageInsertServlet</servlet-name>
<url-pattern>/insertServlet</url-pattern>
</servlet-mapping>
</web-app>
由于jsp页面使用了EI表达式,需要连接数据库所以必要的jar包也是要存在的
- ojdbc6.jar
- taglibs-standard-impl-1.2.5.jar
- taglibs-standard-spec-1.2.5.jar