客户管理系统---体验基于数据库javaweb的增删改查

添加客户 查询客户列表 修改客户信息 删除客户 条件查询客户信息 分页查询客户

javaee的经典三层架构--工厂类实现解耦

jsp+servlet+service+dao+jdbc+mysql+c3p0+dbutils

com.dzq.web
.service
.dao
.domain
.util
.exception
.factory

JSTL
mysql驱动
beanutils
c3p0包
dbutils包

confing.properties
c3p0-config.xml

create table customer (
id int primary key auto_increment,
name varchar(20),
gender varchar(10),
birthday date,
cellphone varchar(20),
email varchar(40),
preference varchar(100),
type varchar(40),
description varchar(255)
);
字段名 说明 类型
id 编号 int
name 客户姓名 varchar(20)
gender 性别 varchar(10)
birthday 生日 date
cellphone 手机 varchar(20)
email 电子邮件 varchar(40)
preference 客户爱好 varchar(100)
type 客户类型 varchar(40)
description 备注 varchar(255)
工厂类实现解耦

1.添加客户
index.jsp 主页 提供<添加客户>超链接
-->addCust.jsp 添加客户的页面,提供表单允许输入客户信息
-->AddCustServlet 1.封装数据/校验数据 2.调用Service层添加客户的方法 3.重定向回到主页 -->Service 提供添加客户的方法 ,检查客户名是否已经存在,如果存在提示,如果不存在则调用dao增加客户方法
--> Dao 根据用户名查找用户 添加客户
2.查询客户列表
index.jsp 页面中 提供<查询客户列表>超链接
-->ListCustServlet 调用Service中查询所有客户的方法 查到数据后,将查到的数据存入request域中,请求转发listCust.jsp页面展示
-->Service 调用dao中查询所有客户
-->dao中查询所有客户
-->listCust.jsp 页面,遍历list展示所有客户

3.修改客户信息 (查询/修改)
在客户信息列表页面,每一条记录后面都有一个<修改>超链接
-->CustInfoServlet 调用Service中的方法 找到当前客户信息 存入request域后带到updateCust.jsp页面显示
-->updateCust.jsp 显示客户信息,并允许修改
-->UpdateCustServlet 封装数据/调用Service中修改数据的方法
-->Service 修改客户信息的方法,调用dao中的方法进行修改
-->Dao 提供修改客户信息的方法

4.删除客户
在客户信息列表页面,每一条记录后面都有一个<删除>超链接
-->DelCustServlet 获取要删除的客户id,调用Service中删除客户的方法,请求转发到客户列表页面
-->Service 删除客户的方法 调用dao中对应方法
-->Dao中根据id删除客户的方法
5.批量删除客户
在客户信息列表页面的每一条记录之前都有一个复选框,选中后,可以删除
-->BatchDelCustServlet 获取所有要删除的客户的id,调用Service中批量删除客户的方法做删除操作
-->Service中提供批量删除客户的方法,事务的管理
-->dao中删除客户的方法

附源代码:

1.首先是两个javabean

①:

package com.dzq.domain;

import java.io.Serializable;
import java.util.Date; public class Cust implements Serializable {
private int id;
private String name;
private String gender;
private String birthday;
private String cellphone;
private String email;
private String preference;
private String type;
private String description;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPreference() {
return preference;
}
public void setPreference(String preference) {
this.preference = preference;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
} }

Cust.java

②:

package com.dzq.domain;

import java.io.Serializable;
import java.util.List; public class Page implements Serializable{
private int thispage;
private int rowerpage;
private int countrow;
private int countpage;
private int firstpage;
private int lastpage;
private int prepage;
private int nextpage;
private List<Cust> list; public int getThispage() {
return thispage;
}
public void setThispage(int thispage) {
this.thispage = thispage;
}
public int getRowerpage() {
return rowerpage;
}
public void setRowerpage(int rowerpage) {
this.rowerpage = rowerpage;
}
public int getCountrow() {
return countrow;
}
public void setCountrow(int countrow) {
this.countrow = countrow;
}
public int getCountpage() {
return countpage;
}
public void setCountpage(int countpage) {
this.countpage = countpage;
}
public int getFirstpage() {
return firstpage;
}
public void setFirstpage(int firstpage) {
this.firstpage = firstpage;
}
public int getLastpage() {
return lastpage;
}
public void setLastpage(int lastpage) {
this.lastpage = lastpage;
}
public int getPrepage() {
return prepage;
}
public void setPrepage(int prepage) {
this.prepage = prepage;
}
public int getNextpage() {
return nextpage;
}
public void setNextpage(int nextpage) {
this.nextpage = nextpage;
}
public List<Cust> getList() {
return list;
}
public void setList(List<Cust> list) {
this.list = list;
} }

Page.java

2.下面是配置文件:

<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/cust?Unicode=true&amp;characterEncoding=utf-8</property>
<property name="user">root</property>
<property name="password"></property>
</default-config>
</c3p0-config>

c3p0-config.xml

CustDao=com.dzq.dao.CustDaoImpl
CustService=com.dzq.service.CustServiceImpl

config.properties

3.下面是工厂类,加载数据文件和数据源

package com.dzq.factory;

import java.io.FileReader;
import java.util.Properties; public class BasicFactoty {
private static BasicFactoty factory=new BasicFactoty();
private static Properties prop=null;
private BasicFactoty(){ }
public static BasicFactoty getFactory(){
return factory;
}
static{
prop=new Properties();
try {
prop.load(new FileReader(BasicFactoty.class.getClassLoader().getResource("config.properties").getPath()));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/* public CustDao getDao(){
String clazz= prop.getProperty("CustDao");
return (CustDao) Class.forName(clazz).newInstance();
}*/
public <T> T getInstance(Class<T> clazz){
try {
String cName=clazz.getSimpleName();
String cImplName=prop.getProperty(cName);
return (T) Class.forName(cImplName).newInstance();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

BasicFactoty.java

4.下面是DaoUntils,用于获取连接和数据源

package com.dzq.util;

import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DaoUtils {
private static DataSource source=new ComboPooledDataSource();
private DaoUtils(){ } public static DataSource getSource(){
return source;
} public static Connection getConnection(){
try {
return source.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

DaoUtils.java

5.以下是Dao接口及其实现:

package com.dzq.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; import com.dzq.domain.Cust;
import com.dzq.domain.Page; public interface CustDao { /**
* 根据用户名查找用户
* @param name 用户名
* @return 找到的用户,找不到返回null
*/ Cust findUserByName(String name); /**
* 添加客户
* @param cust
*/
void addCust(Cust cust); /**
* 查询所有用户信息
* @return
*/
List<Cust> getAllCust(); /**
* 根据id查找用户
* @param id
*/
Cust findUserById(String id); /**
* 修改客户信息
* @param cust 最新信息bean
*/
void updateCust(Cust cust); /**
* 根据id删除客户
* @param id
*/
void delCustById(String id); /**
* 删除客户信息,加上了事务处理
* @param id
* @throws SQLException
*/
void delCustByIdWithTrans(Connection conn,String id) throws SQLException; /**
* 根据条件查询客户
* @param cust
* @return 所有符合条件的客户信息
*/
List<Cust> findCustByCond(Cust cust); /**
* 查询数据库中一共多少条数据
* @return
*/
int getCountRow(); /**
* 分页查询客户信息
* @param thispage
* @param rowperpage
* @return
*/
List<Cust> getCustByPage(int from, int count); }

CustDao.java

package com.dzq.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
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 org.apache.commons.dbutils.handlers.ScalarHandler; import com.dzq.domain.Cust;
import com.dzq.domain.Page;
import com.dzq.util.DaoUtils; public class CustDaoImpl implements CustDao { @Override
public Cust findUserByName(String name) {
String sql="select * from customer where name=?";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
return runner.query(sql, new BeanHandler<Cust>(Cust.class),name);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public void addCust(Cust cust) {
String sql="insert into customer values (null,?,?,?,?,?,?,?,?)";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
runner.update(sql,cust.getName(),cust.getGender(),cust.getBirthday(),cust.getCellphone(),
cust.getEmail(),cust.getPreference(),cust.getType(),cust.getDescription());
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public List<Cust> getAllCust() {
String sql="select * from customer";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
return runner.query(sql, new BeanListHandler<Cust>(Cust.class));
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public Cust findUserById(String id) {
String sql="select * from customer where id = ?";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
return runner.query(sql, new BeanHandler<Cust>(Cust.class),id);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public void updateCust(Cust cust) {
String sql="update customer set name=?,gender=?,birthday=?,cellphone=?,email=?,preference=?,type=?,description=? where id=?";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
runner.update(sql,cust.getName(),cust.getGender(),cust.getBirthday(),cust.getCellphone(),
cust.getEmail(),cust.getPreference(),cust.getType(),cust.getDescription(),cust.getId());
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public void delCustById(String id) {
String sql="delete from customer where id =?";
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
runner.update(sql,id);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
} } @Override
public void delCustByIdWithTrans(Connection conn, String id) throws SQLException {
String sql="delete from customer where id =?";
QueryRunner runner =new QueryRunner();
runner.update(conn, sql, id); } @Override public List<Cust> findCustByCond(Cust cust) {
String sql = "select * from customer where 1=1 ";
List<Object> list = new ArrayList<Object>();
if(cust.getName()!=null && !"".equals(cust.getName())){
sql += " and name like ? ";
list.add("%"+cust.getName()+"%");
}
if(cust.getGender()!=null && !"".equals(cust.getGender())){
sql += " and gender = ? ";
list.add(cust.getGender());
}
if(cust.getType()!=null && !"".equals(cust.getType())){
sql += " and type = ? ";
list.add(cust.getType());
} try{
QueryRunner runner = new QueryRunner(DaoUtils.getSource());
if(list.size()<=0){
//System.out.println("为空");
return runner.query(sql, new BeanListHandler<Cust>(Cust.class)); }else{
//System.out.println("不为空");
return runner.query(sql, new BeanListHandler<Cust>(Cust.class),list.toArray());
}
}catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
} @Override
/*public int getCountRow() {
String sql="select count (*) from customer";
System.out.println(sql);
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
try {
return ((Long)runner.query(sql,new ScalarHandler())).intValue();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}*/
public int getCountRow() {
String sql = "select count(*) from customer";
//System.out.println(sql);
try{
QueryRunner runner = new QueryRunner(DaoUtils.getSource());
return ((Long)runner.query(sql, new ScalarHandler())).intValue();
}catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
} @Override
public List<Cust> getCustByPage(int from, int count) {
String sql="select * from customer limit ?,?";
try {
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
return runner.query(sql, new BeanListHandler<Cust>(Cust.class),from,count);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
} /*public List<Cust> findCustByCond(Cust cust) {
String sql="select * from customer where 1=1";
List<Object> list=new ArrayList<Object>();
if(cust.getName()!=null&&!"".equals(cust.getName())){
sql+=" and name like ?";
list.add("%"+cust.getName()+"%");
}
if(cust.getGender()!=null&&!"".equals(cust.getGender())){
sql+="and gender= ?";
list.add(cust.getGender());
}
if(cust.getType()!=null&&!"".equals(cust.getType())){
sql+="and type= ?";
list.add(cust.getType());
}
try{
QueryRunner runner =new QueryRunner(DaoUtils.getSource());
if(list.size()<=0){
return runner.query(sql, new BeanListHandler<Cust>(Cust.class));
}else{
return runner.query(sql, new BeanListHandler<Cust>(Cust.class),list.toArray());
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
} }*/ }

CustDaoImpl

6.下面是service接口及其实现

package com.dzq.service;

import java.util.List;

import com.dzq.domain.Cust;
import com.dzq.domain.Page; public interface CustService {
/**
* 添加客户的方法,封装了用户信息的Bean
* @param cust
*/
void addCust(Cust cust); /**
* 查询所有客户信息
* @return所有客户信息
*/
List<Cust> getAllCust(); /**
* 根据id查询信息
* @param id
* @return 客户信息
*/
Cust findCustById(String id); /**
* 修改客户信息的方法
* @param cust 封装了最新客户信息的bean
*/
void updateCust(Cust cust); /**
* 删除客户信息
* @param id
*/
void delCustById(String id); /**
* 批量删除客户信息,其中会进行事务管理
* @param ids 所有要删除的id组成的数组
*/
void batchDel(String[] ids); /**
* 根据条件查询客户
* @param cust
* @return 所有符合条件的客户信息
*/
List<Cust> findCustByCond(Cust cust); /**
* 分页查询客户信息
* @param listpage 当前页码信息
* @param rowperpage 每页记录数
* @return 客户信息
*/
Page pageCust(int thispage, int rowperpage); }

CustService.java

package com.dzq.service;

import java.sql.Connection;
import java.util.List; import org.apache.commons.dbutils.DbUtils; import com.dzq.dao.CustDao;
import com.dzq.domain.Cust;
import com.dzq.domain.Page;
import com.dzq.factory.BasicFactoty;
import com.dzq.util.DaoUtils; public class CustServiceImpl implements CustService {
CustDao dao= BasicFactoty.getFactory().getInstance(CustDao.class); @Override
public void addCust(Cust cust) {
//1.检查用户名是否已经存在
if(dao.findUserByName(cust.getName())!=null){
throw new RuntimeException("用户名不存在");
}
//2.如果没有就调用dao中的方法,增加用户
dao.addCust(cust);
} @Override
public List<Cust> getAllCust() {
return dao.getAllCust();
} @Override
public Cust findCustById(String id) {
return dao.findUserById(id);
} @Override
public void updateCust(Cust cust) {
dao.updateCust(cust); } @Override
public void delCustById(String id) {
dao.delCustById(id); } @Override
public void batchDel(String[] ids) {
Connection conn=DaoUtils.getConnection();
try{
conn.setAutoCommit(false);
for(String id:ids){
dao.delCustByIdWithTrans(conn,id);
}
DbUtils.commitAndCloseQuietly(conn);
}catch(Exception e){
DbUtils.rollbackAndCloseQuietly(conn);
e.printStackTrace();
throw new RuntimeException(e);
}
} @Override
public List<Cust> findCustByCond(Cust cust) {
return dao.findCustByCond(cust);
} @Override
public Page pageCust(int thispage, int rowperpage) {
Page page=new Page();
//--当前页
page.setThispage(thispage);
page.setRowerpage(rowperpage);
int countrow=dao.getCountRow();
page.setCountrow(countrow);
int countpage=countrow/rowperpage+(countrow%rowperpage==0?0:1);
page.setCountpage(countpage);
page.setFirstpage(1);
//int countpage=countrow/rowperpage+(countrow%rowperpage==0?0:1);
page.setLastpage(countpage);
page.setPrepage(thispage==1?1:thispage-1);
page.setNextpage(thispage==countpage?countpage:thispage+1);
List<Cust> list= dao.getCustByPage((thispage-1)*rowperpage,rowperpage);
page.setList(list);
return page;
} }

CustServiceImpl

7.下面是几个servlet

package com.dzq.web;

import java.io.IOException;

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 org.apache.commons.beanutils.BeanUtils; import com.dzq.domain.Cust;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; /**
* Servlet implementation class AddCustServlet
*/
@WebServlet("/AddCustServlet")
public class AddCustServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
try{
//1.封装校验数据
Cust cust=new Cust();
BeanUtils.populate(cust, request.getParameterMap());
//--单独处理爱好
String []prefs=request.getParameterValues("preference");
StringBuffer buffer=new StringBuffer();
for(String pref:prefs){
buffer.append(pref+",");
}
String pref=buffer.substring(0, buffer.length()-1);
cust.setPreference(pref);
//2.调用service方法添加客户
service.addCust(cust);
//3.重定向回主页
response.sendRedirect(request.getContextPath()+"/index.jsp");
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

AddCustServlet.java

package com.dzq.web;

import java.io.IOException;

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.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/BatchDelServlet")
public class BatchDelServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
//1.获取所有要删除的客户id
String []ids=request.getParameterValues("delId");
//2.调用service中批量删除客户的方法
service.batchDel(ids); //3.重定向到客户列表页面
request.getRequestDispatcher("/ListCustServlet").forward(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

BatchDelServlet

package com.dzq.web;

import java.io.IOException;

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.dzq.domain.Cust;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/CustInfoServlet")
public class CustInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8"); CustService service =BasicFactoty.getFactory().getInstance(CustService.class);
//1.获取要查询的客户id
String id =request.getParameter("id"); //2.调用service中根据id查询用户的方法
Cust cust=service.findCustById(id);
if(cust==null){
throw new RuntimeException("找不到该用户");
}
//3.将查到的客户信息,存入request域,请求转发到updateCust.jsp显示
request.setAttribute("cust", cust);
request.getRequestDispatcher("/updateCust.jsp").forward(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

CustInfoServle

package com.dzq.web;

import java.io.IOException;

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.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/DelCustServlet")
public class DelCustServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
//1.获取要删除的用户id
String id=request.getParameter("id"); //2.调用service中删除
service.delCustById(id);
//3.请求转发到客户信息页面
request.getRequestDispatcher("/ListCustServlet").forward(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

DelCustServlet

package com.dzq.web;

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 org.apache.commons.beanutils.BeanUtils; import com.dzq.domain.Cust;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/FindCustByCondServlet")
public class FindCustByCondServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
//1.获取条件,封装到bean中
try{
Cust cust=new Cust();
BeanUtils.populate(cust,request.getParameterMap());
//2.根据条件,调用service方法,查询客户
List<Cust> list=service.findCustByCond(cust);
request.setAttribute("list", list);
//3.重定向到客户信息页面,显示
//System.out.println(list);
request.getRequestDispatcher("/listCust.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

FindCustByCondServlet

package com.dzq.web;

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.dzq.domain.Cust;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; /**
* Servlet implementation class ListCustServlet
*/
@WebServlet("/ListCustServlet")
public class ListCustServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1.调用service方法中查询客户信息
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
List<Cust> list=service.getAllCust();
//2。将客户信息存入request域,请求转发到listCust.jsp页面,进行展示
request.setAttribute("list", list);
request.getRequestDispatcher("/listCust.jsp").forward(request, response);;
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

ListCustServlet

package com.dzq.web;

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.dzq.domain.Cust;
import com.dzq.domain.Page;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/PageCustServlet")
public class PageCustServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
try {
//1.获取当前要显示的页
int thispage=Integer.parseInt(request.getParameter("thispage"));
int rowperpage=5; //2.调用service中分页查询
Page page=service.pageCust(thispage,rowperpage); //3.带到pagelist.jsp显示
request.setAttribute("page", page);
request.getRequestDispatcher("/pageList.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

PageCustServlet

package com.dzq.web;

import java.io.IOException;

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 org.apache.commons.beanutils.BeanUtils; import com.dzq.domain.Cust;
import com.dzq.factory.BasicFactoty;
import com.dzq.service.CustService; @WebServlet("/UpdateCustServlet")
public class UpdateCustServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
CustService service=BasicFactoty.getFactory().getInstance(CustService.class);
//1.封装数据,校验数据
try {
Cust cust=new Cust();
BeanUtils.populate(cust, request.getParameterMap());
//--单独处理爱好
String []prefs=request.getParameterValues("preference");
StringBuffer buffer=new StringBuffer();
for(String pref:prefs){
buffer.append(pref+",");
}
String pref=buffer.substring(0, buffer.length()-1);
cust.setPreference(pref);
//2.调用service中修改客户信息的方法
service.updateCust(cust);
//3.重定向到列表页面
request.getRequestDispatcher("/ListCustServlet").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

UpdateCustServlet

8.下面是jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head>
<body>
<h1>客户管理系统</h1><hr>
<a href="${pageContext.request.contextPath }/addCust.jsp">添加客户</a>
<a href="${pageContext.request.contextPath }/ListCustServlet">客户列表</a>
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=1">分页客户信息</a>
</body>
</html>

index.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>
<script type="text/javascript">
function checkAll(allC){
var otherCs=document.getElementsByName("delId")
for(var i=0;i<otherCs.length;i++){
otherCs[i].checked=allC.checked;
}
}
</script>
</head>
<body>
<div align="center">
<h1>客户列表页面</h1><hr>
<form action="${pageContext.request.contextPath }/FindCustByCondServlet" method="post">
客户姓名:<input type="text" name="name" value="${param.name }"/>
客户性别: <input type="radio" name="gender" value=""
<c:if test="${param.gender=='' }">
checked='checked'
</c:if>
/>男
<input type="radio" name="gender" value="男"
<c:if test="${param.gender=='男' }">
checked='checked'
</c:if>
/>男
<input type="radio" name="gender" value="女"
<c:if test="${param.gender=='女' }">
checked='checked'
</c:if>
/>女
客户类型: <select name="type">
<option value=""
<c:if test="${param.type=='' }">
selected='selected'
</c:if>
>钻石客户</option>
<option value="钻石客户"
<c:if test="${param.type=='钻石客户' }">
selected='selected'
</c:if>
>钻石客户</option>
<option value="白金客户"
<c:if test="${param.type=='白金客户' }">
selected='selected'
</c:if>
>白金客户</option>
<option value="黄金客户"
<c:if test="${param.type=='黄金客户' }">
selected='selected'
</c:if>
>黄金客户</option>
<option value="白银客户"
<c:if test="${param.type=='白银客户' }">
selected='selected'
</c:if>
>白银客户</option>
<option value="青铜客户"
<c:if test="${param.type=='青铜客户' }">
selected='selected'
</c:if>
>青铜客户</option>
<option value="黑铁客户"
<c:if test="${param.type=='黑铁客户' }">
selected='selected'
</c:if>
>青铜客户</option>
<option value="没牌客户"
<c:if test="${param.type=='没牌客户' }">
selected='selected'
</c:if>
>没牌客户</option>
</select>
<input type="submit" value="提交"/>
</form>
<form action="${pageContext.request.contextPath }/BatchDelServlet" method="post">
<table border="1">
<tr>
<th><input type="checkbox" onclick="checkAll(this)"/>全选</th>
<th>客户姓名</th>
<th>客户性别</th>
<th>出生日期</th>
<th>手机号码</th>
<th>电子邮件</th>
<th>客户爱好</th>
<th>客户类型</th>
<th>个人描述</th>
<th>修改</th>
<th>删除</th>
</tr>
<c:forEach items="${requestScope.list }" var="cust">
<tr>
<td><input type="checkbox" name="delId" value="${cust.id }"/></td>
<td><c:out value="${cust.name }"></c:out></td>
<td><c:out value="${cust.gender }"></c:out></td>
<td><c:out value="${cust.birthday }"></c:out></td>
<td><c:out value="${cust.cellphone }"></c:out></td>
<td><c:out value="${cust.email }"></c:out></td>
<td><c:out value="${cust.preference }"></c:out></td>
<td><c:out value="${cust.type }"></c:out></td>
<td><c:out value="${cust.description }"></c:out></td>
<td><a href="${pageContext.request.contextPath }/CustInfoServlet?id=${cust.id}">修改</a></td>
<td><a href="${pageContext.request.contextPath }/DelCustServlet?id=${cust.id}">删除</a></td>
</tr>
</c:forEach> </table>
<input type="submit" value="删除选中项"/>
</form>
</div>
</body> </html>

listCust.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>
<script type="text/javascript">
function changePage(obj){
if(obj.value==null||obj.value==""){
obj.value=${page.thispage};
return;
}else if(isNaN(obj.value)){
alert("必须是数字");
obj.value=${page.thispage};
return;
}else if(obj.value<0||obj.value>${page.countpage}){
alert("页码必须在有效范围内");
obj.value=${page.thispage};
return;
}else{
window.location.href="${pageContext.request.contextPath }/PageCustServlet?thispage="+obj.value;
} }
</script>
</head> <body>
<div align="center">
<h1>分页查询客户信息</h1><hr>
<table border="1">
<tr>
<th>客户姓名</th>
<th>客户性别</th>
<th>出生日期</th>
<th>手机号码</th>
<th>电子邮件</th>
<th>客户爱好</th>
<th>客户类型</th>
<th>个人描述</th>
<th>修改</th>
<th>删除</th>
</tr>
<c:forEach items="${requestScope.page.list }" var="cust">
<tr>
<td><c:out value="${cust.name }"></c:out></td>
<td><c:out value="${cust.gender }"></c:out></td>
<td><c:out value="${cust.birthday }"></c:out></td>
<td><c:out value="${cust.cellphone }"></c:out></td>
<td><c:out value="${cust.email }"></c:out></td>
<td><c:out value="${cust.preference }"></c:out></td>
<td><c:out value="${cust.type }"></c:out></td>
<td><c:out value="${cust.description }"></c:out></td>
<td><a href="${pageContext.request.contextPath }/CustInfoServlet?id=${cust.id}">修改</a></td>
<td><a href="${pageContext.request.contextPath }/DelCustServlet?id=${cust.id}">删除</a></td>
</tr>
</c:forEach>
</table>
共 ${page.countrow }记录
共 ${page.countpage }页
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=${page.firstpage}">首页</a>
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=${page.prepage}">上一页</a> <c:if test="${page.countpage<=5 }">
<c:set var="begin" value="1" scope="page"></c:set>
<c:set var="end" value="${page.countpage }" scope="page"></c:set>
</c:if> <c:if test="${page.countpage>5 }">
<c:choose>
<c:when test="${page.thispage<=3 }">
<c:set var="begin" value="1" scope="page"></c:set>
<c:set var="end" value="5" scope="page"></c:set>
</c:when> <c:when test="${page.thispage>=page.countpage-2 }">
<c:set var="begin" value="1" scope="page"></c:set>
<c:set var="end" value="${page.countpage }" scope="page"></c:set>
</c:when>
<c:otherwise>
<c:set var="begin" value="${page.thispage-2 }" scope="page"></c:set>
<c:set var="end" value="${page.countpage+2 }" scope="page"></c:set>
</c:otherwise>
</c:choose>
</c:if> <c:forEach begin="${begin }" end="${end }" step="1" var="i">
<c:if test="${i==page.thispage }">
${i }
</c:if>
<c:if test="${i!=page.thispage }">
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=${i}">${i }</a>
</c:if>
</c:forEach>
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=${page.nextpage}">下一页</a>
<a href="${pageContext.request.contextPath }/PageCustServlet?thispage=${page.lastpage}">尾页</a>
跳转到<input type="text" value="${page.thispage }" style="width: 40px;" onchange="changePage(this)"/>页
</div>
</body> </html>

pageList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
</head> <body>
<div align="center">
<h1>客户管理系统_添加客户</h1><hr>
<form action="${pageContext.request.contextPath }/AddCustServlet" method="post">
<table>
<tr>
<td>客户姓名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>客户性别:</td>
<td>
<input type="radio" name="gender" value="男"/>男
<input type="radio" name="gender" value="女"/>女
</td>
</tr>
<tr>
<td>出生日期:</td>
<td><input type="text" name="birthday"/></td>
</tr>
<tr>
<td>手机号码:</td>
<td><input type="text" name="cellphone"/></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email"/></td>
</tr>
<tr>
<td>客户爱好:</td>
<td>
<input type="checkbox" name="preference" value="篮球"/>篮球
<input type="checkbox" name="preference" value="足球"/>足球
<input type="checkbox" name="preference" value="排球"/>排球
<input type="checkbox" name="preference" value="棒球"/>棒球
<input type="checkbox" name="preference" value="网球"/>网球
</td>
</tr>
<tr>
<td>客户类型:</td>
<td>
<select name="type">
<option value="钻石客户">钻石客户</option>
<option value="白金客户">白金客户</option>
<option value="黄金客户">黄金客户</option>
<option value="白银客户">白银客户</option>
<option value="青铜客户">青铜客户</option>
<option value="黑铁客户">黑铁客户</option>
<option value="没牌客户">没牌客户</option>
</select>
</td>
</tr>
<tr>
<td>描述信息:</td>
<td>
<textarea name="description" rows="6" cols="40"></textarea>
</td>
</tr>
<tr>
<td><input type="submit" value="添加客户"/></td>
</tr>
</table>
</form>
</div>
</body> </html>

addCust.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!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>
</head>
<body>
<div align="center">
<h1>修改客户信息</h1><hr>
<form action="${pageContext.request.contextPath }/UpdateCustServlet" method="post">
<input type="hidden" name="id" value="${cust.id }"/>
<table>
<tr>
<td>客户姓名:</td>
<td><input type="text" name="name" value="${cust.name }" readonly="readonly" style="background:silver;"/></td>
</tr>
<tr>
<td>客户性别:</td>
<td>
<input type="radio" name="gender" value="男"
<c:if test="${cust.gender=='男' }">
checked='checked'
</c:if>
/>男
<input type="radio" name="gender" value="女"
<c:if test="${cust.gender=='女' }">
checked='checked'
</c:if>
/>女
</td>
</tr>
<tr>
<td>出生日期:</td>
<td><input type="text" name="birthday" value="${cust.birthday }"/></td>
</tr>
<tr>
<td>手机号码:</td>
<td><input type="text" name="cellphone" value="${cust.cellphone }"/></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email" value="${cust.email }"/></td>
</tr>
<tr>
<td>客户爱好:</td>
<td>
<input type="checkbox" name="preference" value="篮球"
<c:forTokens items="${cust.preference }" delims="," var="pref">
<c:if test="${pref=='篮球' }">
checked='checked'
</c:if>
</c:forTokens>
/>篮球
<input type="checkbox" name="preference" value="足球"
<c:if test="${fn:contains(cust.preference,'足球') }">
checked='checked'
</c:if>
/>足球
<input type="checkbox" name="preference" value="排球"
<c:if test="${fn:contains(cust.preference,'排球') }">
checked='checked'
</c:if>/>排球
<input type="checkbox" name="preference" value="棒球"
<c:if test="${fn:contains(cust.preference,'棒球') }">
checked='checked'
</c:if>
/>棒球
<input type="checkbox" name="preference" value="网球"
<c:if test="${fn:contains(cust.preference,'网球') }">
checked='checked'
</c:if>
/>网球
</td>
</tr>
<tr>
<td>客户类型:</td>
<td>
<select name="type">
<option value="钻石客户"
<c:if test="${cust.type=='钻石客户' }">
selected='selected'
</c:if>
>钻石客户</option>
<option value="白金客户"
<c:if test="${cust.type=='白金客户' }">
selected='selected'
</c:if>
>白金客户</option>
<option value="黄金客户"
<c:if test="${cust.type=='黄金客户' }">
selected='selected'
</c:if>
>黄金客户</option>
<option value="白银客户"
<c:if test="${cust.type=='白银客户' }">
selected='selected'
</c:if>
>白银客户</option>
<option value="青铜客户"
<c:if test="${cust.type=='青铜客户' }">
selected='selected'
</c:if>
>青铜客户</option>
<option value="黑铁客户"
<c:if test="${cust.type=='黑铁客户' }">
selected='selected'
</c:if>
>青铜客户</option>
<option value="没牌客户"
<c:if test="${cust.type=='没牌客户' }">
selected='selected'
</c:if>
>没牌客户</option>
</select>
</td>
</tr>
<tr>
<td>描述信息:</td>
<td>
<textarea name="description" rows="6" cols="40">${cust.description }</textarea>
</td>
</tr>
<tr>
<td><input type="submit" value="修改客户"/></td>
</tr>
</table>
</form>
</div>
</body>
</html>

updateCust.jsp

9.运行截图:

index.jsp

源码下载:

使劲点我呀

20160410javaweb 开发小案例 --客户管理系统的更多相关文章

  1. WinFrom开发小案例

    C# 开发环境: VisualStudio2015 数据库: SQLserver2008 程序主界面: 注释: lbl标签: 程序中的lbl标签:编号.人数.姓名.性别.请输入要查询的信息,这里他们只 ...

  2. solr开发 小案例

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  3. (MVC — — Demo)客户管理系统的开发日志

    点击一下 目录 第一步:搭建开发环境 第二步:层次包(按照三层架构思想写) 第四步:开发(utils)工具包 第四步:开发 Dao 层 第五步:开发 services 层 第六步:开发 factory ...

  4. (24/24) webpack小案例--自己动手用webpack构建一个React的开发环境

    通过前面的学习,对webpack有了更深的认识,故此节我们就利用前面相关知识自己动手用webpack构建一个React的开发环境,就算是一个小案例吧. 注:此处使用的开发工具是Webstorm. 1. ...

  5. 如何用Baas快速在腾讯云上开发小程序-系列4:实现客户侧商品列表、商品详情页程序

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/431172001487671163 来源:腾云阁 h ...

  6. Vue3教程:用 Vue3 开发小程序,这里有一份实际的代码案例!

    前言 寻寻觅觅冷冷清清,凄凄惨惨戚戚. Vue 3 发布以后,最近也在学习和写一些 Vue3 的 demo 和项目,我也一直想着什么时候能在小程序里使用新特性? 于是我翻遍了市面上的小程序框架,如 u ...

  7. 广播小案例-监听系统网络状态 --Android开发

    本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用”. 2.案例实现 在主活动中动态注册广播,然后写 ...

  8. mongodb入门级的视频教程-简易客户管理系统制作

    本套教程作为mongodb入门级的视频教程,首先讲解了mongodb的下载.安装,环境变量的设置.启动mongodb和将mongodb安装成为windows服务.然后进一步讲解了mongodb里面集合 ...

  9. 黑马客户管理系统(SSM)

    黑马客户管理系统 1系统概述 1.1系统功能介绍 本系统后台使用SSM框架编写,前台页面使用当前主流的Bootstrap和jQuery框架完成页面信息展示功能(关于Bootstrap的知识,有兴趣的读 ...

随机推荐

  1. 理解SVG坐标系统和变换: transform属性

    SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...

  2. C#调用C++编写的DLL函数, 以及各种类型的参数传递 z

    1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int__declspec(dllexport) test(consti ...

  3. [BILL.WEI]stimulsoft reports ,巧用关系,简化sql语句

    stimulsoft reports关系的2大有点 1,跨数据库. 在做报表的时候,我们可能会从不同的数据库中取数据,这个时候,我们就可以利用关系 通过关联的字段,将2者关联起来,然后就可以在报表里面 ...

  4. HW4.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. Codeforces10D–LCIS(区间DP)

    题目大意 给定两个序列,要求你求出最长公共上升子序列 题解 LIS和LCS的合体,YY好久没YY出方程,看了网友的题解,主要是参考aikilis的,直接搬过来好了 经典的动态规划优化. 用opt[i] ...

  6. mongrel

    Mongrel是一种快速的针对Ruby的Http 服务器,专门为部署发布rails应用而产生的. 可以替代mod_ruby/fastcgi,可以用于生产部属环境. 支持集群,扩展性强. 有各种丰富插件 ...

  7. 让SecureCRT vi中显示多色彩

    方法1: 1.打开SecureCRT___选项__会话选项___仿真 右边的中端选择linux,把ANSI 颜色和使用颜色方案打上钩. 2.选择外观,右边的使用颜色和闪烁都打上钩. 3.重新连接使所该 ...

  8. 如何调试msbuild?

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何调试msbuild?.

  9. 免费安卓IOS测试API接口,后续会陆续增加接口

    各位博友好!开发的安卓或者ios的朋友们,经常会遇到想测试但是没有公开的api接口进行进行测试.但自己又不会开发服务端或者没有服务器,这里我免费提供了一整套API接口.欢迎大家调用,目标是方便大家. ...

  10. Android FM模块学习之二 FM搜索频率流程

    上一篇大概分析了一下FM启动流程,若不了解Fm启动流程的,能够去打开前面的链接先了解FM启动流程,接下来我们简单分析一下FM的搜索频率流程. 在了解源代码之前.我们先看一下流程图: 事实上从图中能够看 ...