客户管理系统---体验基于数据库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. 从头开始编写一个Orchard网上商店模块(6) - 创建购物车服务和控制器

    原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-pa ...

  2. JavaScript window.location对象

    JavaScript window.location对象   示例 注意 方法 经常使用window.location,它的结构总是记不住,简单梳理下,方便以后查询. 示例 URL:http://b. ...

  3. Node.js 创建第一个应用

    如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi. 从这个角度看,整个"接收 HTTP 请求并提供 ...

  4. Java数值转化为二进制、十进制、十六进制字符串

    int i = 123;String binStr = Integer.toBinaryString(i); String otcStr = Integer.toOctalString(i); Str ...

  5. Paxos算法(转)

    Paxos算法的难理解与算法的知名度一样令人敬仰,从我个人的经历而言,难理解的原因并不是该算法高深到大家智商不够,而在于Lamport在表达该算法时过于晦涩且缺乏一个完整的应用场景.如果大师能换种思路 ...

  6. 读《CSS禅意花园》 有感

    1.图片用<img>标签添加到页面中,会增加页面的大小,导致页面加载需要更长的时间.可以用css background 引用图片. 1.1.若图像属于“内容”而不是“样式”的一部分,例如“ ...

  7. HW机试字符串压缩java(1)

    package huawei; public class StringZip { public static String stringZip(String a) { String ans =&quo ...

  8. arm linux kernel启动之start_kernel

    了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了.start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...

  9. 【解决】python2.x版本的Django下admin管理页面css无效

    折腾一下午,终于解决了这个问题,有必要记录一下,我就奇怪了为什么实验室电脑没问题,到宿舍就挂掉了,哼 主要是改mimetypes文件,位于D:\MySoftware\Python27\Lib下 1.添 ...

  10. Scala学习笔记(二)表达式和函数

    笔记的整理主要针对Scala对比Java的新特性:   1.if表达式 if表达式是有结果返回的. val a= if (5>2) "你好" else 1 a的值为if表达式 ...