最近博主参与了一个项目,是设计一个网上书店。在项目完成后,收获了许多,在这里分享一下开发过程:
首先是建立数据库:
接下来是创建项目结构,采用MVC开发模式:
实现效果如图所示:
接下来列出几个主要代码,以数据查询为例:
首先是从index.jsp中发出查询功能:
其执行了判断,看分页查询中是否有值:
<c:if test="${empty page }">
<jsp:forward page="../indexServlet?action=findAll"></jsp:forward>
</c:if>
分页封装代码:Page.java
package com.java.util;
import java.util.ArrayList;
import java.util.List;
/*
* 分页实体类
*/
public class Page {
//每页显示的条数
private int pageNumber=4;
//当前页
private int curPage;
//总条数
private int rows;
//总页数
private int totalPage;
//要现实的list
private List list=new ArrayList();
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
@Override
public String toString() {
return "Page [pageNumber=" + pageNumber + ", curPage=" + curPage + ", rows=" + rows + ", totalPage=" + totalPage
+ ", list=" + list + "]";
}
}
MenuServlet.java MVC中的Control,用于View与Model的联系,即完成书据交互
package com.java.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 sun.awt.RepaintArea;
import com.java.pojo.Menus;
import com.java.pojo.Types;
import com.java.service.IAdminService;
import com.java.service.IMenusService;
import com.java.service.ITypeSrevice;
import com.java.service.impl.ITypeServiceImpl;
import com.java.service.impl.MenusServiceImpl;
import com.java.util.Page;
import com.jspsmart.upload.SmartFile;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
/**
* Servlet implementation class MenusServlet
*/
@WebServlet("/menusServlet")
public class MenusServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
IMenusService menusService=new MenusServiceImpl();
ITypeSrevice typesService=new ITypeServiceImpl();
/**
* @see HttpServlet#HttpServlet()
*/
public MenusServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String action=request.getParameter("action");
if(action.equals("findAll")){
findMenusAll(request,response);
}else if(action.equals("delete")){
deleteMenus(request,response);
}else if(action.equals("findTypesAll")){
findTypesAll(request,response);
}else if(action.equals("add")){
addMenus(request,response);
}else if(action.equals("update")){
update(request,response);
}//else if(action.equals("findTypesAll1")){
//findTypesAll1(request,response);
//}
else if(action.equals("findID")){
findMenuByID(request,response);
}
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void findMenuByID(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
int id=Integer.parseInt(request.getParameter("id"));
Menus menus=menusService.getMenusByID(id);
request.setAttribute("menus", menus);
List<Types> types=typesService.getTypesAll();
request.setAttribute("types", types);
request.getRequestDispatcher("/admin/menus_update.jsp").forward(request, response);
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
*/
private void update(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
//String name=request.getParameter("name");
int id=Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String burden = request.getParameter("burden");
String price = request.getParameter("price");
String price1 =request.getParameter("price1");
String brief = request.getParameter("brief");
String typeid = request.getParameter("typeid");
Menus menus=new Menus();
menus.setId(id);
menus.setName(name);
menus.setBurden(burden);
menus.setBrief(brief);
menus.setPrice(price1);
menus.setPrice1(price1);
menus.setTypeid(typeid);//未获得
//menus.setName(name);
int result=menusService.updateMenus(menus);
if(result==1){
out.write("<script>"+"alert('update menus successful');"
+"window.location.href='"+request.getContextPath()+"/menusServlet?action=findAll&&curPage=1'; "
+"</script>");
}else if(result==-1){
out.write("<script>"+"alert('the menus existed');"
+"window.location.href='"+request.getContextPath()+"//menusServlet?action=findID'; "
+"</script>");
}else{
out.write("<script>"+"alert('update failed');"
+"window.location.href='"+request.getContextPath()+"//menusServlet?action=findID'; "
+"</script>");
}
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void findTypesAll1(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
List<Types> types=typesService.getTypesAll();
request.setAttribute("types", types);
request.getRequestDispatcher("/admin/menus_update.jsp").forward(request,response);
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
* @throws ServletException
* @throws SmartUploadException
*/
private void addMenus(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException{
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
//创建SmartUpLoad对象
SmartUpload smartUpload=new SmartUpload();
//执行上传初始化
smartUpload.initialize(this.getServletConfig(),request, response);
try {
//执行上传
smartUpload.upload();
//4获取用户输入的菜品信息
//注意:在使用了该插件后,要这样获取数据
String name = smartUpload.getRequest().getParameter("name");
String burden = smartUpload.getRequest().getParameter("burden");
String price = smartUpload.getRequest().getParameter("price");
String price1 = smartUpload.getRequest().getParameter("price1");
String brief = smartUpload.getRequest().getParameter("brief");
String typeid = smartUpload.getRequest().getParameter("typeid");
//获取上传的文件对象
SmartFile file = smartUpload.getFiles().getFile(0);//获取第一个文件,因为只能上传一个文件
//获取上传文件的名称
String imgpath = "img/" + file.getFilePathName();
//对Menus对象赋值
Menus menus = new Menus(name, typeid, burden, brief, price, price1, imgpath);
int result = menusService.addMenus(menus);
if (result == 1) {
//保存上传文件
smartUpload.save("/img");
out.write("<script>" + "alert('add menus successful');"
+ "window.location.href='" + request.getContextPath()
+ "/menusServlet?action=findAll'; " + "</script>");
} else if (result == -1) {
out.write("<script>" + "alert('the menus existed');"
+ "window.location.href='" + request.getContextPath()
+ "/admin/menus_add.jsp'; " + "</script>");
} else {
out.write("<script>" + "alert('add failed');"
+ "window.location.href='" + request.getContextPath()
+ "/admin/menus_add.jsp'; " + "</script>");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void findTypesAll(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException{
List<Types> types=typesService.getTypesAll();
request.setAttribute("types", types);
request.getRequestDispatcher("/admin/menus_add.jsp").forward(request,response);
}
private void deleteMenus(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
//int id=Integer.parseInt(request.getParameter("id"));
String name=request.getParameter("name");
//System.out.print(id);
Types types=new Types();
//types.setId(id);
int result=menusService.deleteMenus(name);
if(result==1){
out.write("<script>"+"alert('delete successful');"
+"window.location.href='"+request.getContextPath()+"/menusServlet?action=findAll'; "
+"</script>");
}else if(result==0){
out.write("<script>"+"alert('delete failed');"
+"window.location.href='"+request.getContextPath()+"/menusServlet?action=findAll'; "
+"</script>");
}
}
/**
* 方法描述:
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void findMenusAll(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取当前页码
String curPage=request.getParameter("curPage");
int curpagestr=0;
if(curPage==null||"".equals(curPage)){
curpagestr=1;
}else{
curpagestr=Integer.parseInt(curPage);
}
//把当前页码赋值给Page的curpage属性
Page page=new Page();
page.setCurPage(curpagestr);
//调用Service分页查询方法
page=menusService.getMenusAll(page);
//request绑定查询结果
request.setAttribute("page", page);
//请求转发
request.getRequestDispatcher("/admin/menus.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
MenuService.java 书籍的方法,如查询,修改,删除等
/**
*
*/
package com.java.service;
import java.util.List;
import com.java.pojo.Menus;
import com.java.util.Page;
/**
* 类描述:
* 作者: pengxiang
* 创建日期:2019年5月15日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public interface IMenusService {
/**
*
* 方法描述:分页查询菜单
* @param page 当前页码
* @return 分页的数据
*/
Page getMenusAll(Page page);
int deleteMenus(String name);
//Menus getMenusByName(String name);
/**
*
* 方法描述:添加菜品
* @param menus
* @return 影响的行数
*/
int addMenus(Menus menus);
Menus getMenusByID(int id);
int updateMenus(Menus menus);
List<Menus> getMenusAll();
}
MenuServiceImpl.java 书籍方法的具体实现及封装方法具体实现
/**
*
*/
package com.java.service.impl;
import java.util.List;
import com.java.dao.IMenusDao;
import com.java.dao.impl.MenusDaoImpl;
import com.java.pojo.Admin;
import com.java.pojo.Menus;
import com.java.service.IMenusService;
import com.java.util.Page;
/**
* 类描述:
* 作者: pengxiang
* 创建日期:2019年5月15日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public class MenusServiceImpl implements IMenusService {
/* (non-Javadoc)
* @see com.java.service.IMenusService#getMenusAll(com.java.util.Page)
*/
IMenusDao menusDao=new MenusDaoImpl();
@Override
public List<Menus> getMenusAll() {
// TODO Auto-generated method stub
return menusDao.getMenusAll();
}
@Override
public Page getMenusAll(Page page) {
// TODO Auto-generated method stub
return menusDao.getMenusAll(page);
}
/* (non-Javadoc)
* @see com.java.service.IMenusService#deleteTypes(int)
*/
/* (non-Javadoc)
* @see com.java.service.IMenusService#deleteMenus(int)
*/
@Override
public int deleteMenus(String name) {
// TODO Auto-generated method stub
return menusDao.deleteMenus(name);
}
/* (non-Javadoc)
* @see com.java.service.IMenusService#getMenusByName(java.lang.String)
*/
/* (non-Javadoc)
* @see com.java.service.IMenusService#addMenus(com.java.pojo.Menus)
*/
@Override
public int addMenus(Menus menus) {
// TODO Auto-generated method stub
//查询菜品名是否已存在
Menus m=menusDao.getMenusByName(menus.getName());
if(m!=null){
return -1;
}
return menusDao.addMenus(menus);
}
/* (non-Javadoc)
* @see com.java.service.IMenusService#getMenusByID(int)
*/
@Override
public Menus getMenusByID(int id) {
// TODO Auto-generated method stub
return menusDao.getMenusByID(id);
}
/* (non-Javadoc)
* @see com.java.service.IMenusService#updateMenus(com.java.pojo.Menus)
*/
@Override
public int updateMenus(Menus menus) {
// TODO Auto-generated method stub
Menus ad=menusDao.getMenusByID(menus.getId());
//如果ad不等于空,且name相等,id不相等,不可以修改
if(ad!=null&&(menus.getName().equals(ad.getName()))&&(ad.getId()!=menus.getId())){
return -1;
}
return menusDao.updateMenus(menus);
}
}
MenuDao.java DAO文件,完成数据库交互的方法
/**
*
*/
package com.java.dao;
import java.util.List;
import com.java.pojo.Menus;
import com.java.pojo.Notice;
import com.java.pojo.Types;
import com.java.util.Page;
/**
* 类描述:
* 作者: pengxiang
* 创建日期:2019年5月15日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public interface IMenusDao {
/**
*
* 方法描述:分页查询所有菜单
* @param page 参数为当前分页的页码
* @return 返回分页后的数据。级封装在list中的数据
*/
Page getMenusAll(Page page);
int deleteMenus(String name);
/**
*
* 方法描述:根据菜品名称查询
* @param name
* @return 菜品信息
*/
Menus getMenusByName(String name);
/**
*
* 方法描述:添加菜品
* @param menus
* @return 影响的行数
*/
int addMenus(Menus menus);
int updateMenus(Menus menus);
/**
*
* 方法描述:根据菜品ID查询
* @param menus id
* @return 菜品信息
*/
Menus getMenusByID(int id);
List<Menus> getMenusAll();
}
MenuDaoImpl.java 数据库操作具体实现
/**
*
*/
package com.java.dao.impl;
import java.util.List;
import com.java.dao.IMenusDao;
import com.java.pojo.Menus;
import com.java.pojo.MenusInfo;
import com.java.pojo.Notice;
import com.java.pojo.Types;
import com.java.util.DBUtil;
import com.java.util.Page;
/**
* 类描述:
* 作者: pengxiang
* 创建日期:2019年5月15日
* 修改人:
* 修改日期:
* 修改内容:
* 版本号: 1.0.0
*/
public class MenusDaoImpl implements IMenusDao {
DBUtil dbutil=new DBUtil();
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#getMenusAll(com.java.util.Page)
*/
@Override
public List<Menus> getMenusAll() {
String sql="select menus.id, menus.name,imgpath,burden,types.name as typename,brief,price1,sums1,price,sums from menus inner JOIN types on types.id=menus.typeid ORDER BY sums1 desc LIMIT 0,2 ";
List list=null;
try {
list=dbutil.getQueryList(Menus.class, sql, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
public Page getMenusAll(Page page) {
// TODO Auto-generated method stub
String sql="select menus.id, menus.name,imgpath,burden,types.name as typename,brief,price1,sums1,price,sums from menus inner join types on types.id=menus.typeid";
Page page1=null;
page1 = dbutil.getQueryPage(MenusInfo.class, sql, null, page);
return page1;
}
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#deleteTypes(int)
*/
@Override
public int deleteMenus(String name) {
// TODO Auto-generated method stub
String sql="delete from menus where name=?";
Object[] objs={name};
int result=0;
try {
result=dbutil.execute(sql, objs);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#addMenus(com.java.pojo.Menus)
*/
@Override
public int addMenus(Menus menus) {
// TODO Auto-generated method stub
String sql="insert into menus(name,burden,price,price1,brief,typeid,imgpath) values(?,?,?,?,?,?,?)";
Object[]obj={menus.getName(),menus.getBurden(),menus.getPrice(),menus.getPrice1(),menus.getBrief(),menus.getTypeid(),menus.getImgpath()};
int result=0;
try {
result=dbutil.execute(sql, obj);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#getMenusByName(java.lang.String)
*/
@Override
public Menus getMenusByName(String name) {
// TODO Auto-generated method stub
String sql="select * from menus where name=?";
Object[] obj={name};
Menus menus=null;
try {
menus=(Menus) dbutil.getObject(Menus.class, sql, obj);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return menus;
}
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#updateTypes(com.java.pojo.Types)
*/
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#updateMenus(com.java.pojo.Menus)
*/
@Override
public int updateMenus(Menus menus) {
// TODO Auto-generated method stub
String sql="update menus set name=?,burden=?,price=?,price1=?,brief=?,typeid=? where id=?";
Object[] paramList={menus.getName(),menus.getBurden(),menus.getPrice(),menus.getPrice1(),menus.getBrief(),menus.getTypeid(),menus.getId()};
int result=0;
try {
result=dbutil.execute(sql, paramList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/* (non-Javadoc)
* @see com.java.dao.IMenusDao#getMenusByID(int)
*/
@Override
public Menus getMenusByID(int id) {
// TODO Auto-generated method stub
String sql="select * from menus where id=?";
Object[] obj={id};
Menus menus=null;
try {
menus=(Menus) dbutil.getObject(Menus.class, sql, obj);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return menus;
}
}
至此,数据查询成功并通过Servlet返还给WEB界面。