程序编码
5.1实体类 - 分类管理
package com.ambow.entity;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Category implements Serializable {
private String id;
private String name;
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
5.2 数据访问层 dao
package com.ambow.dao;
import java.util.List;
import com.ambow.entity.Category;
public interface CategoryDao {
void save(Category category);
List<Category> getAllCategories();
Category getCategoryById(String categoryId);
}
实现类
package com.ambow.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.ambow.dao.CategoryDao;
import com.ambow.entity.Category;
import com.ambow.util.DbcpUtils;
public class CategoryDaoImpl implements CategoryDao {
QueryRunner queryRunner = new QueryRunner(DbcpUtils.getDataSource());
@Override
public void save(Category category) {
try {
queryRunner.update("insert into categories(id,name,description) values (?,?,?)",category.getId(),category.getName(),category.getDescription());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Category> getAllCategories() {
try {
return queryRunner.query("select * from categories", new BeanListHandler<Category>(Category.class));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public Category getCategoryById(String categoryId) {
try {
return queryRunner.query("select * from categories where id = ?", new BeanHandler<Category>(Category.class),categoryId);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
5.3 工具类:数据源连接池DbcpUtil
package com.ambow.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class DbcpUtils {
public static DataSource dataSource;
static {
try {
InputStream in = DbcpUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(in);
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static DataSource getDataSource() {
return dataSource;
}
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
配置文件:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///webbookstore
username=root
password=sorry
5.4 业务逻辑服务层 service
package com.ambow.service;
import java.util.List;
import com.ambow.commons.Page;
import com.ambow.entity.Book;
import com.ambow.entity.Category;
public interface BusinessService {
void addCategory(Category category);
List<Category> findAllCategories();
Category findCategoryById(String categoryId);
}
实现类
package com.ambow.service.impl;
import java.util.List;
import java.util.UUID;
import com.ambow.commons.Page;
import com.ambow.dao.BookDao;
import com.ambow.dao.CategoryDao;
import com.ambow.dao.impl.BookDaoImpl;
import com.ambow.dao.impl.CategoryDaoImpl;
import com.ambow.entity.Book;
import com.ambow.entity.Category;
import com.ambow.service.BusinessService;
public class BusinessServiceImpl implements BusinessService {
CategoryDao categoryDao = new CategoryDaoImpl();
BookDao bookDao = new BookDaoImpl();
@Override
public void addCategory(Category category) {
category.setId(UUID.randomUUID().toString());
categoryDao.save(category);
}
@Override
public List<Category> findAllCategories() {
return categoryDao.getAllCategories();
}
@Override
public Category findCategoryById(String categoryId) {
return categoryDao.getCategoryById(categoryId);
}
5.5 控制器 servlet
package com.ambow.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.nio.channels.FileChannel;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.FileItemHeadersImpl;
import org.apache.commons.fileupload.util.Streams;
import org.apache.commons.io.FilenameUtils;
import com.ambow.commons.Page;
import com.ambow.entity.Book;
import com.ambow.entity.Category;
import com.ambow.service.BusinessService;
import com.ambow.service.impl.BusinessServiceImpl;
import com.ambow.util.FilePathUtil;
import com.ambow.util.FillBeanUtils;
public class ControlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
BusinessService service = new BusinessServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String op = request.getParameter("op");
if("addCategory".equals(op)){
addCategory(request, response);
}else if("showAllCategories".equals(op)){
showAllCategories(request, response);
}else if("showAllBooks".equals(op)){
showAllBooks(request, response);
}
else{
System.out.println("error");
}
}
public void showAllCategories(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Category> categoryList = service.findAllCategories();
request.setAttribute("categoryList", categoryList);
request.getRequestDispatcher("/admin/listCategory.jsp").forward(request, response);
}
public void addCategory(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Category category = FillBeanUtils.fillBean(request,Category.class);
service.addCategory(category);
request.setAttribute("msg", "保存成功");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
5.6 工具类 封装对象的工具类:FillBeanUtils
package com.ambow.util;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
public class FillBeanUtils {
public static <T> T fillBean(HttpServletRequest request, Class<T> clazz) {
try {
T bean = clazz.newInstance();
BeanUtils.copyProperties(bean, request.getParameterMap());
return bean;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
5.7 前台页面: jsp
注: 在WebRoot下创建文件夹 命名为admin,在admin下创建jsp:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/admin/header.jsp"%>
<br />
<h2>欢迎光临趣读书屋</h2>
</body>
</html>
在admin下创建jsp:header.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
pageContext.setAttribute("basePath", basePath);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>趣读书屋后台管理</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" type="text/css" href="${basePath}css/main.css">
</head>
<body>
<br />
<br />
<h1>趣读书屋后台管理</h1>
<br />
<a href="${basePath}admin/addCategory.jsp">添加分类</a>
<a href="${basePath}servlet/ControlServlet?op=showAllCategories">查询分类</a>
<a href="">添加书籍</a>
<a href="">查询书籍</a>
<a href="">待处理订单</a>
<a href="">已处理订单</a>
<br />
<hr/>
</body>
</html>
addCategory.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/admin/header.jsp"%>
<form action="${basePath}/servlet/ControlServlet?op=addCategory"
method="post">
<table border="1px" width="438px">
<tr>
<td>添加分类</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>查询分类</td>
<td><textarea rows="3" cols="38" name="description"></textarea>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="保 存"></td>
</tr>
</table>
</form>
</body>
</html>
查询分页:listCategory.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/admin/header.jsp"%>
<br />
<table border="1" width="438">
<tr>
<th>选择</th>
<th>分类名称</th>
<th>分类描述</th>
<th>操作</th>
</tr>
<c:forEach items="${categoryList}" var="cl" varStatus="vcl">
<tr class="${vcl.index%2==0?'odd':'even' }">
<td><input type="checkbox" name="ids" value="${cl.id}">
</td>
<td>${cl.name }</td>
<td>${cl.description }</td>
<td>
<a href="javascript:alert('略')">修改</a>
<a href="javascript:alert('略')">删除</a>
</td>
</tr>
</c:forEach>
</table>
<br />
</body>
</html>
注: 在WebRoot下创建jsp:message.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/admin/header.jsp" %>
<h1>
${msg }
</h1>
</body>
</html>
5.8 在WebRoot下创建一个文件夹,命名为css,在css下创建一个文件,命名为main.css
@CHARSET "UTF-8";
body{
font-size: 12px;
text-align: center;
}
table{
font-size: 12px;
margin: 0 auto;
}
.odd{
background-color: f3c3f3;
}
.even{
background-color: c3f3c3;
}