由于近期准备机试内容,断更了下。
我思考了思考,还是继续更吧。
万一有人看呢
对你万一有帮助呢?
谁说的准哦
唉。。
人
生
难
得
一
zhi
ji
这次的内容是实现分类模块
需求是我们可以展示数据库中有的分类
并添加新的分类到数据库之后跳转到展示分类的页面,展示数据库中所有的分类
当然也可以删除,删除后,跳转到展示分类的页面,展示数据库中所有的分类
也可以修改某个分类,修改后跳转到展示分类的页面,展示数据库中所有的分类
好啦,首先是Servlet的实现,我们在coding的时候不是把所有的功能都写完哈,
而是写一个功能,接着继续往下深入到Service,再到dao
如果你的需求明确,也可以一层一层写,但是吧不容易调试了就。
package com.imooc.web.action;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imooc.domain.Category;
import com.imooc.service.CategoryService;
import com.imooc.service.impl.CategoryServiceImpl;
@WebServlet("/CategoryServlet")
public class CategoryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求路径localhost:8080/shop/CategoryServlet?method=findAll
String methodName = request.getParameter("method");
if ("findAll".equals(methodName)) {
// 查询所有分类
findAll(request, response);
} else if ("saveUI".equals(methodName)) {
// 跳转到添加页面
saveUI(request, response);
} else if ("save".equals(methodName)) {
// 保存分类的方法
save(request, response);
} else if ("edit".equals(methodName)) {// 编辑分类的方法
edit(request, response);
} else if ("update".equals(methodName)) {
// 修改分类
update(request, response);
} else if ("delete".equals(methodName)) {
// 删除分类
delete(request, response);
}
}
/**
* 后台分类管理,删除分类的方法
*
* @param request
* @param response
* @throws IOException
*/
private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
//接收数据
Integer cid = Integer.parseInt(request.getParameter("cid"));
// 处理数据
CategoryService categoryService = new CategoryServiceImpl();
categoryService.delete(cid);
// 4、页面跳转
response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll");
}
/**
* 后台分类管理修改分类的方法
*
* @param request
* @param response
* @throws IOException
*/
private void update(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 1、接收数据
Integer cid = Integer.parseInt(request.getParameter("cid"));
String cname = request.getParameter("cname");
String cdesc = request.getParameter("cdesc");
// 2、封装数据
Category category = new Category();
category.setCid(cid);
category.setCdesc(cdesc);
category.setCname(cname);
// 3、调用业务层处理数据
CategoryService categoryService = new CategoryServiceImpl();
categoryService.update(category);
// 4、页面跳转
response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll");
}
/**
* 后台分类管理,编辑分类的方法
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、接收数据
Integer cid = Integer.parseInt(request.getParameter("cid"));
// 2、调用业务层处理数据
CategoryService categoryService = new CategoryServiceImpl();
Category category = categoryService.findOne(cid);
// 3、页面跳转
request.setAttribute("category", category);
request.getRequestDispatcher("/admin/category_update.jsp").forward(request, response);
}
/**
* 后台分类管理保存分类的方法
*
* @param request
* @param response
* @throws IOException
*/
private void save(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 1、接收数据
String cname = request.getParameter("cname");
String cdes = request.getParameter("cdes");
System.out.println("接收的数据是" + cname + " " + cdes);
// 2、封装数据
Category category = new Category();
category.setCdesc(cdes);
category.setCname(cname);
// 3、调用业务层处理数据
CategoryService categoryService = new CategoryServiceImpl();
categoryService.save(category);
// 4、页面跳转
response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll");
}
/**
* 后台分类管理跳转到添加页面
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/admin/category_add.jsp").forward(request, response);
}
/**
* 后台分类管理查询所有分类的方法
*
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 接收参数
// 封装数据
// 调用业务层处理数据
CategoryService categoryService = new CategoryServiceImpl();
List list = categoryService.findAll();
for (Category c : list) {
System.out.println(c.toString());
}
// 页面跳转
request.setAttribute("list", list);
request.getRequestDispatcher("/admin/category_list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
接下来是Service层的接口和其实现。
是根据Servlet的调用
package com.imooc.service;
import java.util.List;
import com.imooc.domain.Category;
public interface CategoryService {
List findAll();
void save(Category category);
Category findOne(Integer cid);
void update(Category category);
void delete(Integer cid);
}
package com.imooc.service.impl;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import com.imooc.dao.CategoryDao;
import com.imooc.dao.ProductDao;
import com.imooc.dao.impl.CategoryDaoImpl;
import com.imooc.dao.impl.ProductDaoImpl;
import com.imooc.domain.Category;
import com.imooc.domain.Product;
import com.imooc.service.CategoryService;
import com.imooc.utils.JDBCUtils;
public class CategoryServiceImpl implements CategoryService {
@Override
public List findAll() {
// 调用CategoryDao方法
System.out.println("service success");
CategoryDao categoryDao = new CategoryDaoImpl();
return categoryDao.findAll();
}
@Override
public void save(Category category) {
// TODO Auto-generated method stub
CategoryDao categoryDao = new CategoryDaoImpl();
categoryDao.save(category);
}
@Override
public Category findOne(Integer cid) {
// TODO Auto-generated method stub
CategoryDao categoryDao = new CategoryDaoImpl();
return categoryDao.findOne(cid);
}
@Override
public void update(Category category) {
// TODO Auto-generated method stub
CategoryDao categoryDao = new CategoryDaoImpl();
categoryDao.update(category);
}
@Override
public void delete(Integer cid) {
/**
* 事务的管理:在业务层统一创建连接对象,保证多个DAO中使用同一个连接: 1、创建连接之后,将连接对象传递给DAO
* 2、创建一个连接对象,将连接对象绑定到当前线程中(ThreadLocal )
*/
// TODO Auto-generated method stub
Connection conn = null;
// 在删除分类之前,先将所属该分类的商品处理下
try {
conn = JDBCUtils.getConnection();
conn.setAutoCommit(false);// 开启事务
ProductDao productDao = new ProductDaoImpl();
List list = productDao.findByCid(cid);
for (Product p : list) {
p.getCategory().setCid(null);
productDao.update(conn, p);
}
// int i=1/0;
CategoryDao categoryDao = new CategoryDaoImpl();
categoryDao.delete(conn, cid);
conn.commit();// 提交事务
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
然后是Dao层啦
package com.imooc.dao;
import java.sql.Connection;
import java.util.List;
import com.imooc.domain.Category;
public interface CategoryDao {
List findAll();
void save(Category category);
Category findOne(Integer cid);
void update(Category category);
void delete(Integer cid);
void delete(Connection conn, Integer cid);
}
package com.imooc.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.imooc.dao.CategoryDao;
import com.imooc.domain.Category;
import com.imooc.utils.JDBCUtils;
public class CategoryDaoImpl implements CategoryDao {
@Override
public List findAll() {
// 获得链接
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List list = new ArrayList();
try {
conn = JDBCUtils.getConnection();
// 编写sql
String sql = "select * from category";
// 预编译sql
// 设置参数
pstmt = conn.prepareStatement(sql);
// 执行sql
rs = pstmt.executeQuery();
// 结果处理
while (rs.next()) {
Category c = new Category();
c.setCid(rs.getInt("cid"));
c.setCname(rs.getString("cname"));
c.setCdesc(rs.getString("cdesc"));
list.add(c);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
JDBCUtils.release(rs, pstmt, conn);
}
System.out.println("dao success");
return list;
}
@Override
public void save(Category category) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
String sql = "insert category values(null,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, category.getCname());
pstmt.setString(2, category.getCdesc());
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(pstmt, conn);
}
}
@Override
public Category findOne(Integer cid) {
// 获得链接
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
// 编写sql
String sql = "select * from category where cid=?";
// 预编译sql
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setInt(1, cid);
// 执行sql
rs = pstmt.executeQuery();
// 结果处理
if (rs.next()) {
Category c = new Category();
c.setCid(rs.getInt("cid"));
c.setCname(rs.getString("cname"));
c.setCdesc(rs.getString("cdesc"));
return c;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
JDBCUtils.release(rs, pstmt, conn);
}
System.out.println("dao success");
return null;
}
@Override
public void update(Category category) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
String sql = "update category set cname=? , cdesc=? where cid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, category.getCname());
pstmt.setString(2, category.getCdesc());
pstmt.setInt(3, category.getCid());
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(pstmt, conn);
}
}
@Override
public void delete(Integer cid) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
String sql = "delete from category where cid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, cid);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(pstmt, conn);
}
}
@Override
public void delete(Connection conn, Integer cid) {
PreparedStatement pstmt = null;
try {
String sql = "delete from category where cid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, cid);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
为了解决上传文字,中文乱码的问题
我们加一个过滤器就好啦
package com.imooc.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class CharacterEncodingFilter
*/
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
/**
* Default constructor.
*/
public CharacterEncodingFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
OK,目前为止
我们算是实现了这个购物车模块呢
具体效果如下
看都看到这里了,
点赞,关注,来一波,老铁666,双击加关注。主播送头发。