bookStore案例第一篇【部署开发环境、解决分类模块】

来源:互联网 发布:linux terminal 字体 编辑:程序博客网 时间:2024/06/04 19:20

前言

巩固Servlet+JSP开发模式,做一个比较完整的小项目

成果图

该项目包含了两个部分,前台和后台。

前台用于显示

这里写图片描述

后台用于管理

这里写图片描述

该项目可分为5个模块来组成:分类模块,用户模块,图书模块,购买模块,订单模块


搭建环境

建立包结构

这里写图片描述

导入开发包

这里写图片描述

前台分帧页面

  • index.jsp【没有body标签的】
  <frameset rows="25%,*">    <frame src="${pageContext.request.contextPath}/client/head.jsp"/>    <frame src="${pageContext.request.contextPath}/client/body.jsp"/>  </frameset>
  • head.jsp
<body style="text-align: center"><h1>欢迎来到购物中心</h1>
  • body是空白的jsp页面

  • 效果:

这里写图片描述


后台分帧页面

  • manager.jsp【嵌套了framset标签,也是没有body标签的】
<frameset rows="25%,*">    <frame src="${pageContext.request.contextPath}/background/head.jsp"/>    <frameset cols="15%,*">        <frame src="${pageContext.request.contextPath}/background/left.jsp"/>        <frame src="${pageContext.request.contextPath}/background/body.jsp"/>    </frameset></frameset>
  • head.jsp
<body style="text-align: center"><h1>后台管理</h1>
  • left.jsp
<a href="#">分类管理</a><br><br><a href="#">图书管理</a><br><br><a href="#">订单管理</a><br><br>
  • body.jsp是空白的

  • 效果:

这里写图片描述

分帧的文件夹目录结构

这里写图片描述

值得注意的是:

  • 文件夹的名字不能使用“manager”,不然会出现:403 Access Denied错误
  • frameset标签是可以嵌套的,分列用“cols”,分行用“rows”

导入工具类和方法的代码

  • 过滤中文乱码数据
  • HTML转义
  • DAOFactory
  • JDBC连接池
  • UUID工具类
  • c3p0.xml配置文件

这些代码都可以在我的博客分类:复用代码中找到!


分类模块

首先,我们来做分类模块吧

创建实体Category

    private String id;    private String name;    private String description;    //各种setter、getter

在数据库创建表

CREATE TABLE category (  id          VARCHAR(40) PRIMARY KEY,  name        VARCHAR(10) NOT NULL UNIQUE ,  description VARCHAR(255));

编写CategoryDAO

/** * 分类模块 *  1:添加分类 *  2:查找分类 *  3:修改分类 * * * */public class CategoryImpl {    public void addCategory(Category category) {        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());        String sql = "INSERT INTO category (id, name, description) VALUES(?,?,?)";        try {            queryRunner.update(sql, new Object[]{category.getId(), category.getName(), category.getDescription()});        } catch (SQLException e) {            throw new RuntimeException(e);        }    }    public Category findCategory(String id) {        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());        String sql = "SELECT * FROM category WHERE id=?";        try {            Category category = (Category) queryRunner.query(sql, id, new BeanHandler(Category.class));            return category;        } catch (SQLException e) {            throw new RuntimeException(e);        }    }    public List<Category> getAllCategory() {        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());        String sql = "SELECT * FROM category";        try {            List<Category> categories = (List<Category>) queryRunner.query(sql, new BeanListHandler(Category.class));             return categories;        } catch (SQLException e) {            throw new RuntimeException(e);        }    }}

测试DAO

public class demo {    @Test    public void add() {        Category category = new Category();        category.setId("2");        category.setName("数据库系列");        category.setDescription("这是数据库系列");        CategoryImpl category1 = new CategoryImpl();        category1.addCategory(category);    }    @Test    public void find() {        String id = "1";        CategoryImpl category1 = new CategoryImpl();        Category category = category1.findCategory(id);        System.out.println(category.getName());    }    @Test    public void getAll() {        CategoryImpl category1 = new CategoryImpl();        List<Category> categories = category1.getAllCategory();        for (Category category : categories) {            System.out.println(category.getName());        }    }}

抽取成DAO接口

public interface CategoryDao {    void addCategory(Category category);    Category findCategory(String id);    List<Category> getAllCategory();}

后台页面的添加分类

  • 在超链接上,绑定显示添加分类的页面
<a href="${pageContext.request.contextPath}/background/addCategory.jsp" target="body">添加分类</a>
  • 显示添加分类的JSP页面
<form action="${pageContext.request.contextPath}/CategoryServlet?method=add" method="post">    分类名称:<input type="text" name="name"><br>    分类描述:<textarea name="description"></textarea><br>    <input type="submit" value="提交"></form>
  • 处理添加分类的Servlet
        if (method.equals("add")) {            try {                //把浏览器带过来的数据封装到bean中                Category category = WebUtils.request2Bean(request, Category.class);                category.setId(WebUtils.makeId());                service.addCategory(category);                request.setAttribute("message", "添加分类成功!");            } catch (Exception e) {                request.setAttribute("message","添加分类失败");                e.printStackTrace();            }            request.getRequestDispatcher("/message.jsp").forward(request, response);        }
  • 效果:

这里写图片描述


后台页面的查看分类

  • 在超链接上,绑定处理请求的Servlet
        else if (method.equals("look")) {            List<Category> list = service.getAllCategory();            request.setAttribute("list", list);            request.getRequestDispatcher("/background/lookCategory.jsp").forward(request, response);        } 
  • 显示分类页面的JSP
<c:if test="${empty(list)}">    暂时还没有分类数据哦,请你添加把</c:if><c:if test="${!empty(list)}">    <table border="1px">        <tr>            <td>分类名字</td>            <td>分类描述</td>            <td>操作</td>        </tr>    <c:forEach items="${list}" var="category">        <tr>            <td>${category.name}</td>            <td>${category.description}</td>            <td>                <a href="#">删除</a>                <a href="#">修改</a>            </td>        </tr>    </c:forEach>    </table></c:if>
  • 效果:

这里写图片描述


1 0
原创粉丝点击