Servlet 开发一个项目 实例 (概述)
利用 jdbc 与 servlet 技术 开发 一个 项目 实现 登录、注册、修改、删除单个、批量删除
所用软件为 idea,oracle数据库
1.搭建环境 导入以下jar包
1
2.创建项目结构
导入配置文件
标题
3. 创建表
将创建好的表格 sql 语句 放到 sql包下
--创建表
create table t_Account(
id number(10) primary key,
cardNum varchar2(19) unique not null check(length(cardNum)=19) ,--卡号
username varchar2(20) not null,--用户名
password varchar2(6) check(length(password)=6) not null,--密码
balance number(8,3),--账户余额
crTime date,--开户日期
mobile varchar2(11)check(length(mobile)=11),--电话号码
ldentifyNumber varchar2(18)unique not null check(length(ldentifyNumber)=18) --身份证号
);
--删除表格
drop table t_Account
--删除序列
drop sequence account_seq
--生成序列
create sequence account_seq start with 1 increment by 1
--添加一条数据 加入指定时间
insert into t_Account values
(account_seq.nextval,'7411477411477411411','甄嬛','123456',600.221,to_date('2018-12-12','yyyy-mm-dd'),'12332112333','610427199925205454');
-- 添加一条数据 加入系统时间
insert into t_Account values
(account_seq.nextval,'7411477411477411005','小红','123456',600.221,sysdate,'11232112305','610427199925205005');
--根据卡号修改余额
update t_account set balance = 800.888 where cardNum = '7411477411477411474';
--根据卡号查询
select * from t_account where cardNum='7411477411477411474';
--根据卡号和密码查询
select * from t_account where cardNum = '7411477411477411474'and password = '123456';
--根据卡号删除
delete t_account where cardNum = '7411477411477411474';
--根据手机号前 三 四 位 查询
select * from t_account where mobile like '___%' or mobile like '____%'
select * from t_account where mobile like '123%' or mobile like '1233%'
--根据卡号修改个人信息
update t_account set username = 'gggggss',password='999999',balance = 55.2,mobile ='13609294775' where cardNum = '7411477411477411000';
4.创建实体类
创建 对应 数据库表格 的实体类 并实现 序列化接口,放到 entity包下
package com.entity;
import java.io.Serializable;
import java.util.Date;
// 创建 表 t_account 实体类
public class T_Account implements Serializable {
private Integer id;
//卡号
private String cardNum;
private String username;
private String password;
//账户余额
private double balabce;
//开户日期
private Date ctTime;
//电话号码
private String mobile;
//身份证号
private String ldentifyNumber;
public T_Account() {
}
public T_Account(Integer id, String cardNum, String username, String password, double balabce, Date ctTime, String mobile, String ldentifyNumber) {
this.id = id;
this.cardNum = cardNum;
this.username = username;
this.password = password;
this.balabce = balabce;
this.ctTime = ctTime;
this.mobile = mobile;
this.ldentifyNumber = ldentifyNumber;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalabce() {
return balabce;
}
public void setBalabce(double balabce) {
this.balabce = balabce;
}
public Date getCtTime() {
return ctTime;
}
public void setCtTime(Date ctTime) {
this.ctTime = ctTime;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getLdentifyNumber() {
return ldentifyNumber;
}
public void setLdentifyNumber(String ldentifyNumber) {
this.ldentifyNumber = ldentifyNumber;
}
@Override
public String toString() {
return "T_Account{" +
"id=" + id +
", cardNum='" + cardNum + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", balabce=" + balabce +
", ctTime=" + ctTime +
", mobile='" + mobile + '\'' +
", ldentifyNumber='" + ldentifyNumber + '\'' +
'}';
}
}
5 创建 Dao层
将对应的 Dao 接口 与 其对应 的实现类 DaoImpl 放到 dao 包下
1.创建 dao 对应 的接口
package com.dao;
import com.entity.T_Account;
import java.util.List;
public interface T_AccountDao {
//添加一条数据
public void insert(T_Account account);
//根据卡号修改余额
public void updateBalance(String cardNum,double balance);
//根据卡号查询
public T_Account findByCardNum(String cardNum);
//根据卡号和密码查询
public T_Account findByCardNumAndPass(T_Account account);
//根据卡号删除
public void deleteByCardNum(String cardNum);
//根据手机号前 三 四 位 查询
public List<T_Account> findByLikeCardNum(String mobile);
//展示所有
public List<T_Account> FinadAllDao();
//根据卡号修改个人信息
public void updateAll(T_Account account);
}
2.实现 dao 接口 中 的方法
package com.dao;
import com.entity.T_Account;
import com.util.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class T_AccoutDaoImpl implements T_AccountDao {
@Override
public void insert(T_Account account) {
Connection conn = null;
PreparedStatement patmt = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "insert into t_Account values(account_seq.nextval,?,?,?,?,?,?,?)";
patmt = conn.prepareStatement (sql);
//动态 绑定参数
patmt.setString (1,account.getCardNum ());
patmt.setString (2,account.getUsername ());
patmt.setString (3,account.getPassword ());
patmt.setDouble (4,account.getBalabce ());
//获得系统时间
Date date1 = new Date ();
//Date ctTime = account.getCtTime ();
java.sql.Date date = JDBCUtil.toSqlDate (date1) ;
patmt.setDate (5,date);
patmt.setString (6,account.getMobile ());
patmt.setString (7,account.getLdentifyNumber ());
//发送 sql 语句 返回受影响的行数
long l = patmt.executeUpdate ();
System.out.println ("受影响的行数="+l);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,patmt);
}
}
//根据卡号修改余额
@Override
public void updateBalance(String cardNum,double balance) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "update t_account set balance = ? where cardNum = ?";
pstmt = conn.prepareStatement (sql);
//动态绑定参数
pstmt.setDouble(1,balance);
pstmt.setString (2,cardNum);
//发送sql 语句 返回受影响的行数
int i = pstmt.executeUpdate ();
System.out.println ("受影响的行数="+i);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt);
}
}
//根据卡号查询
@Override
public T_Account findByCardNum(String cardNum) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "select * from t_account where cardNum = ?";
pstmt = conn.prepareStatement (sql);
pstmt.setString (1,cardNum);
resultSet = pstmt.executeQuery ();
//处理结果集
if (resultSet.next ()){
T_Account account = new T_Account ();
account.setId (resultSet.getInt (1));
account.setCardNum (resultSet.getString (2));
account.setUsername (resultSet.getString (3));
account.setPassword (resultSet.getString (4));
account.setBalabce (resultSet.getDouble (5));
account.setCtTime(resultSet.getDate (6));
account.setMobile (resultSet.getString (7));
account.setLdentifyNumber (resultSet.getString (8));
return account;
}
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt,resultSet);
}
return null;
}
//根据卡号和密码查询 登录
@Override
public T_Account findByCardNumAndPass(T_Account acc) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "select * from t_account where cardNum =? and password = ?";
pstmt = conn.prepareStatement (sql);
//动态绑定参数
String cardNum = acc.getCardNum ();
// System.out.println ("卡号"+cardNum);
pstmt.setString (1,cardNum);
String password = acc.getPassword ();
// System.out.println ("密码"+password);
pstmt.setString (2,password);
resultSet = pstmt.executeQuery ();
//处理结果集
if (resultSet.next ()){
T_Account account = new T_Account ();
account.setId (resultSet.getInt (1));
account.setCardNum (resultSet.getString (2));
account.setUsername (resultSet.getString (3));
account.setPassword (resultSet.getString (4));
account.setBalabce (resultSet.getDouble (5));
account.setCtTime(resultSet.getDate (6));
account.setMobile (resultSet.getString (7));
account.setLdentifyNumber (resultSet.getString (8));
return account;
}
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt,resultSet);
}
return null;
}
@Override
public void deleteByCardNum(String cardNum) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "delete t_account where cardNum =?";
pstmt = conn.prepareStatement (sql);
//动态绑定参数
pstmt.setString (1,cardNum);
//发送sql 语句 返回受影响的行数
int i = pstmt.executeUpdate ();
System.out.println ("受影响的行数="+i);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt);
}
}
//模糊查询
@Override
public List<T_Account> findByLikeCardNum(String mobile) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
List<T_Account> t_accountArrayList = null;
T_Account account = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "select * from t_account where mobile like ? or mobile like ?";
pstmt = conn.prepareStatement (sql);
System.out.println ("接收的参数="+mobile);
pstmt.setString (1,mobile+"%");
pstmt.setString (2,mobile+"%");
resultSet = pstmt.executeQuery ();
System.out.println (resultSet);
t_accountArrayList = new ArrayList<T_Account> ();
//处理结果集
while (resultSet.next()){
account = new T_Account ();
account.setId (resultSet.getInt (1));
account.setCardNum (resultSet.getString (2));
account.setUsername (resultSet.getString (3));
account.setPassword (resultSet.getString (4));
account.setBalabce (resultSet.getDouble (5));
account.setCtTime(resultSet.getDate (6));
account.setMobile (resultSet.getString (7));
account.setLdentifyNumber (resultSet.getString (8));
t_accountArrayList.add (account);
}
return t_accountArrayList;
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt,resultSet);
}
return null;
}
//展示所有
@Override
public List<T_Account> FinadAllDao() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
List<T_Account> t_accountArrayList = null;
T_Account account = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "select * from t_account";
pstmt = conn.prepareStatement (sql);
resultSet = pstmt.executeQuery ();
System.out.println (resultSet);
t_accountArrayList = new ArrayList<T_Account> ();
//处理结果集
while (resultSet.next()){
account = new T_Account ();
account.setId (resultSet.getInt (1));
account.setCardNum (resultSet.getString (2));
account.setUsername (resultSet.getString (3));
account.setPassword (resultSet.getString (4));
account.setBalabce (resultSet.getDouble (5));
account.setCtTime(resultSet.getDate (6));
account.setMobile (resultSet.getString (7));
account.setLdentifyNumber (resultSet.getString (8));
t_accountArrayList.add (account);
}
return t_accountArrayList;
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt,resultSet);
}
return null;
}
//根据卡号修改个人信息
@Override
public void updateAll(T_Account account) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtil.getConnection ();
String sql = "update t_account set username = ?,password=?,balance = ?,mobile = ? where cardNum = ?";
pstmt = conn.prepareStatement (sql);
//动态绑定参数
pstmt.setString (1,account.getUsername ());
pstmt.setString (2,account.getPassword ());
pstmt.setDouble (3,account.getBalabce ());
pstmt.setString (4,account.getMobile ());
pstmt.setString (5,account.getCardNum ());
//发送sql 语句 返回受影响的行数
int i = pstmt.executeUpdate ();
System.out.println ("受影响的行数="+i);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
JDBCUtil.close (null,pstmt);
}
}
}
6 创建 Service 层
将对应的 Service 接口 与 其对应 的实现类 ServiceImpl 放到 service 包下
1.创建 Service 对应 的接口
package com.service;
import com.entity.T_Account;
import java.util.List;
public interface T_AccountService {
//注册
public void registerService(T_Account t_account);
//登录
public T_Account loginService(T_Account t_account);
//转账 传入参数为?:本人卡号,本人密码,(其中本人卡号和密码 封装为对象);对方卡号,转账金额
public void transfer_accounts(T_Account t_account,String toCardNum,double money );
//展示所有
public List<T_Account> FindAllService();
//根据 卡号 删除 一条数据
public void deleteByIdService(String cardNum);
//根据卡号查询 返回一个对象 用于回显
public T_Account findByIdService(String cardNum);
//根据卡号修改个人信息
public void UpdateAllService(T_Account t_account);
}
2.实现 service 接口 中 的方法
package com.service;
import com.dao.T_AccountDao;
import com.dao.T_AccoutDaoImpl;
import com.entity.T_Account;
import com.util.JDBCUtil;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;
public class T_AccountServiceImpl implements T_AccountService {
T_AccountDao t_accountDao = new T_AccoutDaoImpl ();
//注册
@Override
public void registerService(T_Account t_account) {
//注册之前查询数据库中是否有该用户
T_Account byCardNum = t_accountDao.findByCardNum (t_account.getCardNum ());
if (byCardNum == null) {
//添加一条数据
t_accountDao.insert (t_account);
} else {
System.out.println ("该用户已经注册,请直接登录!!!!");
}
}
//登录
@Override
public T_Account loginService(T_Account t_account) {
T_Account byCardNumAndPass = t_accountDao.findByCardNumAndPass (t_account);
if (byCardNumAndPass != null) {
System.out.println ("欢迎使用本银行操作系统!!!");
return byCardNumAndPass;
} else {
System.out.println ("用户名和密码不正确,请核实后重新登录!!!");
return null;
}
}
//转账
@Override
public void transfer_accounts(T_Account t_account, String toCardNum, double money) {
//连接数据库
Connection conn = JDBCUtil.getConnection ();
try {
//设置手动提交事务
conn.setAutoCommit (false);
//获得转账方对象
T_Account user = t_accountDao.findByCardNumAndPass (t_account);
//判断登录是否成功
if (user != null) {
//查询对方用户是否存在
T_Account touser = t_accountDao.findByCardNum (toCardNum);
if (touser != null) {
//检验转账方的余额是否充足
double balabce1 = user.getBalabce ();
System.out.println ("账户余额=" + balabce1);
//z转账方账户余额与转账的金额比较
if (balabce1 > money) {
//计算转账金额的手续费
double poundageMoney = money * 0.05;
//修改本人转账后账户余额
double changeBalabcel = balabce1 - money - poundageMoney;
//将本人的新的账户余额存入到对象中
user.setBalabce (changeBalabcel);
//调用修改余额的方法
t_accountDao.updateBalance (user.getCardNum (), user.getBalabce ());
//获取对方账户余额
double tobalabce = touser.getBalabce ();
//修改收款方账户余额
double changeToBalabce = tobalabce + money;
touser.setBalabce (changeToBalabce);
//调用修改余额方法
t_accountDao.updateBalance (touser.getCardNum (), touser.getBalabce ());
} else if (balabce1 == money) {
/* 包装类不能用双等于进行比较 因此 账户余额 的数据类型 应设置为 基本数据类型 double.
如果数据类型是包装类,需要比较时 则应该用 eques 方法 进行比较
*/
Scanner scanner = new Scanner (System.in);
System.out.println ("您的转账金额等于您的账户余额,手续费将在转账金额中扣除,是否同意转账?");
System.out.println ("同意选1,不同意选2");
int i = scanner.nextInt ();
System.out.println ("接收到的参数i=" + i);
//同意
if (i == 1) {
//计算转账金额的手续费
double poundageMoney = money * 0.05;
double changeBalabcel = balabce1 - money;
//将本人的新的账户余额存入到对象中
user.setBalabce (changeBalabcel);
//调用修改余额的方法
t_accountDao.updateBalance (user.getCardNum (), user.getBalabce ());
//获取对方账户余额
double tobalabce = touser.getBalabce ();
//修改收款方账户余额
double changeToBalabce = tobalabce + money - poundageMoney;
touser.setBalabce (changeToBalabce);
//调用修改余额方法
t_accountDao.updateBalance (touser.getCardNum (), touser.getBalabce ());
} else {
System.out.println ("请更改转账金额之后,在操作!!!");
}
} else {
//手动抛出异常
throw new RuntimeException ("您的余额不足,请更改转账金额");
}
} else {
throw new RuntimeException ("收款用户不存在,请核实后在操作 ");
}
} else {
throw new RuntimeException ("用户名或密码不正确");
}
//手动提交
conn.commit ();
} catch (Exception e) {
e.printStackTrace ();
try {
//设置回滚
conn.rollback ();
} catch (SQLException e1) {
e1.printStackTrace ();
}
} finally {
System.out.println ("感谢您的使用,欢迎下次光临!!!!");
JDBCUtil.close (conn, null);
}
}
//展示所有
@Override
public List<T_Account> FindAllService() {
List<T_Account> t_accountsAll = t_accountDao.FinadAllDao ();
return t_accountsAll;
}
//根据卡号删除一条数据
@Override
public void deleteByIdService(String cardNum) {
t_accountDao.deleteByCardNum (cardNum);
}
//根据卡号查询 返回一个对象
@Override
public T_Account findByIdService(String cardNum) {
T_Account t_account = t_accountDao.findByCardNum (cardNum);
return t_account;
}
//根据卡号修改个人信息
@Override
public void UpdateAllService(T_Account t_account) {
t_accountDao.updateAll (t_account);
}
}
7 创建 Servlet 层 (servlet 相应的功能 写在 Servlet 包下)
第一个类 登录
servlet 相应的功能 写在 Servlet 包下
1.// 第一个类 实现 登录功能
package com.servlet;
import com.entity.T_Account;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//登录
public class T_AccountServletLogin extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置应答类型
response.setContentType ("text/html");
//设置 请求 与 响应 的编码格式
request.setCharacterEncoding ("UTF-8");
response.setCharacterEncoding ("UTF-8");
String name = request.getParameter ("name");
System.out.println ("接收的参数name="+name);
String password1 = request.getParameter ("password");
System.out.println ("接收的参数password="+password1);
//调用业务
T_AccountService t_accountService = new T_AccountServiceImpl ();
//将所接收的值存到对象中
T_Account a = new T_Account ();
a.setCardNum (name);
a.setPassword (password1);
T_Account t_account = t_accountService.loginService (a);
System.out.println ("登录的用户是"+t_account);
//2.获得输出流 输出数据
PrintWriter out = response.getWriter ();
//3.通过输出流 输出网页
out.println ("<html>");
out.println ("<body>");
//登录成功之后
if (t_account!=null){
//创建 cookie 设置登录标记
Cookie cookie = new Cookie ("cookieName", "123456");
//设置cookie存活时间
cookie.setMaxAge (24*60*60);
//设置 cookie 到浏览器
response.addCookie (cookie);
// 展示所有 不带参数 用 redirect
response.sendRedirect ("/t_Account/ServletFinaAll");
}else {
out.println ("<center><h1>time is"+"用户名或密码不正确"+"</h1></center>");
}
out.println ("</body>");
out.println ("</html>");
//4.清空缓冲区
out.flush ();
}
}
对应的登录 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<h1>欢迎访问本网站</h1>
<form action="/t_Account/h" method="post">
<center>
<table width="500" height="160" bgcolor="#6495ed">
<tr>
<td align="right" width="50">卡号</td>
<td>
<input type="text" name="name"/>
</td>
</tr>
<tr>
<td align="right" width="160">密码</td>
<td>
<input type="password" name="password"/>
</td>
</tr>
<tr>
<td align="right" width="160"></td>
<td>
<input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</center>
<center><a href="/t_Account/f">发起请求</a></center>
</form>
</body>
</html>
第二个类 注册
//第二个类 实现 注册功能
package com.servlet;
import com.entity.T_Account;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//注册 添加
public class ServletRegister extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws SecurityException, IOException {
// 设置应答类型
response.setContentType ("text/html");
// 设置请求 与 响应的编码格式
request.setCharacterEncoding ("UTF-8");
response.setCharacterEncoding ("Utf-8");
//接收参数
String cardNum = request.getParameter ("cardNum");
String username = request.getParameter ("username");
String password = request.getParameter ("password");
String balabce = request.getParameter ("balabce");
System.out.println ("账户余额"+balabce);
//将字符串 转换为 double 类型
//将 String 类型 转换 为 double 类型
double balabce1 = Double.parseDouble (balabce);
String mobile = request.getParameter ("mobile");
String ldentifyNumber = request.getParameter ("ldentifyNumber");
// 将处理好的参数 封装到 对象 中
T_Account t_account = new T_Account ();
t_account.setCardNum (cardNum);
t_account.setUsername (username);
t_account.setPassword (password);
t_account.setBalabce (balabce1);
t_account.setMobile (mobile);
t_account.setLdentifyNumber (ldentifyNumber);
//调用service 层 的方法
T_AccountService t_accountService = new T_AccountServiceImpl ();
t_accountService.registerService (t_account);
//流程跳转 跳到展示所有界面 不带参数 用 rediirect
response.sendRedirect ("/t_Account/ServletFinaAll");
}
}
对应的注册页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
<style type="text/css">
#1{
color: red;
}
</style>
</head>
<body>
<h1>欢迎注册本银行操作系统</h1>
<form action="/t_Account/add" method="post">
<center>
<table width="60%" height="60%" align="conter" bgcolor="#00ffff">
<tr>
<td align="right" width="300px" id="1">
卡号
</td>
<td>
<input type="text" name="cardNum" id="2"/>
</td>
</tr></br>
<tr>
<td align="right" width="300px">
用户名
</td>
<td>
<input type="text" name="username" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
密码
</td>
<td>
<input type="password" name="password" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
账户余额
</td>
<td>
<input type="text" name="balabce" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
电话号码
<td>
<input type="text" name="mobile" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
身份证号
<td>
<input type="text" name="ldentifyNumber" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
<td>
<input type="submit" value="提交" />
<input type="reset" value="提交" />
</td>
</tr></br>
</table>
</center>
</form>
</body>
</html>
第三个类 展示所有(此展示所有 用 servlet 流 技术 输出网页 )
package com.servlet;
import com.entity.T_Account;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
/**
* 展示所有·
* */
public class ServletFinaAll extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
//设置应答类型
response.setContentType ("text/html");
//设置请求与响应的编码格式
response.setCharacterEncoding ("UTF-8");
request.setCharacterEncoding ("UTF-8");
//获取 cookie 多个浏览器访问 返回数组
Cookie[] cookies = request.getCookies ();
//获得输出流
PrintWriter out = response.getWriter ();
//获取 cookie 的名称
//取出第一个值
String name = cookies[0].getName ();
//获取 cookies 的值
String value = cookies[0].getValue ();
System.out.println ("登录标记="+name);
System.out.println ("登录标记="+value);
//调用业务层
T_AccountService t_accountService = new T_AccountServiceImpl ();
List<T_Account> t_accounts = t_accountService.FindAllService ();
if ("123456".equals (value)){
//输出网页
out.println ("<html>");
out.println ("<body>");
out.println ("<form action='/t_Account/deleteServlet' method='post'>");
out.println ("<table border='0' align='center' width='100%' cellpadding='0' cellpacing='0' bgcolor='yellow'> ");
//设置表头
out.println ("<tr><td>"+"id"+"</td>"+
"<td>"+"选项"+"</td>"+ //此列 对应批量删除的复选框
"<td>"+"卡号"+"</td>"+
"<td>"+"用户名"+"</td>"+
"<td>"+"密码"+"</td>"+
"<td>"+"账户余额"+"</td>"+
"<td>"+"开户日期"+"</td>"+
"<td>"+"联系电话"+"</td>"+
"<td>"+"身份证号"+"</td>"+
"<td>功能</td></tr>"
);
//遍历输出每一行的内容
for (T_Account t_account : t_accounts) {
out.println ("<tr>" +"<td><input type='checkbox' name='cardNums' value='"+t_account.getCardNum ()+"'/></td>"+
"<td>"+t_account.getId ()+"</td>"+
"<td size='3px'>"+t_account.getCardNum ()+"</td>"+
"<td>"+t_account.getUsername ()+"</td>"+
"<td>"+t_account.getPassword ()+"</td>"+
"<td>"+t_account.getBalabce ()+"</td>"+
"<td>"+t_account.getCtTime ()+"</td>"+
"<td>"+t_account.getMobile ()+"</td>"+
"<td>"+t_account.getLdentifyNumber ()+"</td>"+
"<td><a href='/t_Account/deleteServlet?cardNum="+t_account.getCardNum ()+"'>删除</a><a href='/t_Account/ServletFinaOne?cardNum="+t_account.getCardNum ()+"'>修改</a></td></tr>"
);
}
out.println ("<tr><td><a href='/t_Account/register.jsp'>添加</a></td></tr>");
out.println ("</table>");
out.println ("<center><input type='submit' value='批量删除'/></center>");
out.println ("</form>");
out.println ("</body>");
out.println ("</html>");
}else{
response.sendRedirect ("/t_account/login.jsp");
}
//流程跳转
//清空缓冲区
out.flush ();
}
}
第四个类 删除单个与批量删除
package com.servlet;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//根据卡号删除 和 批量删除
public class ServletDeleteOne extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置应答类型
response.setContentType ("text/html");
//设置应答与请求的编码格式
response.setCharacterEncoding ("utf-8");
request.setCharacterEncoding ("utf-8");
//接收参数
String cardNum = request.getParameter ("cardNum");
//获取复选框的值
String[] cardNums = request.getParameterValues ("cardNums");
//调用业务
T_AccountService t_accountService = new T_AccountServiceImpl ();
//判断 卡号是否为空 因为 delete 删除一个值,复选框是删除多个值
if (cardNum!=null){
//执行删除一个
t_accountService.deleteByIdService (cardNum);
}else{
//遍历删除
for (String num : cardNums) {
t_accountService.deleteByIdService (num);
}
}
//流程跳转 不带参数 用 redirect 调到展示所有界面
response.sendRedirect ("/t_Account/ServletFinaAll");
}
}
第五个类 修改(修改需要两步)
第一步 回显
package com.servlet;
import com.entity.T_Account;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//回显
public class ServletFinaOne extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//设置应答类型
response.setContentType ("text/html");
//设置 响应与请求 的编码格式
response.setCharacterEncoding ("utf-8");
request.setCharacterEncoding ("utf-8");
//接收参数
String cardNum = request.getParameter ("cardNum");
// 调用业务
T_AccountService t_accountService = new T_AccountServiceImpl ();
T_Account t_account = t_accountService.findByIdService (cardNum);
//利用request 作用域
request.setAttribute ("t_account",t_account);
//流程跳转 需要带参数 调到 修改的 页面
RequestDispatcher requestDispatcher = request.getRequestDispatcher ("/UpdatetT_Account.jsp");
requestDispatcher.forward (request,response);
}
}
与 修改和回显 对应的页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
<style type="text/css">
#1{
color: red;
}
</style>
</head>
<body>
<h1>修改个人信息</h1>
<%--${requestScope.t_account.carNum}
<%= request.getAttribute(t_account.carNum)%>--%>
<form action="/t_Account/ServletUpdate" method="post">
<center>
<table width="60%" height="60%" align="conter" bgcolor="#00ffff">
<tr>
<td align="right" width="300px">
卡号
</td>
<td>
<!--readonly="readonly" 将文本框的内容设置为只读模式,不可修改,但是可以传到后台-->
<input type="text" readonly="readonly" name="cardNum" value="${requestScope.t_account.cardNum}"/>
</td>
</tr></br>
<tr>
<td align="right" width="300px">
用户名
</td>
<td>
<input type="text" name="username" value="${requestScope.t_account.username}"/>
</td>
</tr></br>
<tr>
<td align="right" width="300px">
密码
</td>
<td>
<input type="password" name="password" value="${requestScope.t_account.password}"/>
</td>
</tr></br>
<tr>
<td align="right" width="300px">
账户余额
</td>
<td>
<input type="text" name="balabce" value="${requestScope.t_account.balabce}" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
电话号码
<td>
<input type="text" name="mobile" value="${requestScope.t_account.mobile}" />
</td>
</tr></br>
<tr>
<td align="right" width="300px">
<td>
<input type="submit" value="提交" />
<input type="reset" value="提交" />
</td>
</tr></br>
</table>
</center>
</form>
</body>
</html>
第二步 修改
package com.servlet;
import com.entity.T_Account;
import com.service.T_AccountService;
import com.service.T_AccountServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//修改
public class ServletUpdate extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
//设置应答类型
response.setContentType ("text/html");
//设置 响应与请求 的编码格式
response.setCharacterEncoding ("utf-8");
request.setCharacterEncoding ("utf-8");
//接收参数
String cardNum = request.getParameter ("cardNum");
System.out.println ("接收的卡号"+cardNum);
String username = request.getParameter ("username");
String password = request.getParameter ("password");
String balabce = request.getParameter ("balabce");
System.out.println ("账户余额"+balabce);
//将字符串 转换为 double 类型
//将 String 类型 转换 为 double 类型
double balabce1 = Double.parseDouble (balabce);
String mobile = request.getParameter ("mobile");
T_Account t_account = new T_Account ();
t_account.setCardNum (cardNum);
t_account.setUsername (username);
t_account.setPassword (password);
t_account.setBalabce (balabce1);
t_account.setMobile (mobile);
System.out.println ("接收需要修改的参数"+t_account);
//调用业务
T_AccountService t_accountService = new T_AccountServiceImpl ();
t_accountService.UpdateAllService (t_account);
// 流程跳转 修改完之后 跳到展示所有的界面 不带参数
response.sendRedirect ("/t_Account/ServletFinaAll");
}
}
8 web.xml 文件
//解释说明
serlvet程序中的url-pattern,就是web.xml中的<url-pattern>
与 每个 servlet 对应的 url-pattern
正式文件内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
<!-- 继承HttpServlet-->
<!-- 登录-->
<servlet>
<servlet-name>httpServlet</servlet-name>
<servlet-class>com.servlet.T_AccountServletLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>httpServlet</servlet-name>
<url-pattern>/h</url-pattern>
</servlet-mapping>
<!--注册业务-->
<servlet>
<servlet-name>addone</servlet-name>
<servlet-class>com.servlet.ServletRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addone</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
<!--展示所有-->
<servlet>
<servlet-name>fiandAll</servlet-name>
<servlet-class>com.servlet.ServletFinaAll</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fiandAll</servlet-name>
<url-pattern>/ServletFinaAll</url-pattern>
</servlet-mapping>
<!--根据卡号删除-->
<servlet>
<servlet-name>deleteServlet</servlet-name>
<servlet-class>com.servlet.ServletDeleteOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>deleteServlet</servlet-name>
<url-pattern>/deleteServlet</url-pattern>
</servlet-mapping>
<!--根据卡号查询 返回一个对象 用于回显-->
<servlet>
<servlet-name>ServletFinaOne</servlet-name>
<servlet-class>com.servlet.ServletFinaOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletFinaOne</servlet-name>
<url-pattern>/ServletFinaOne</url-pattern>
</servlet-mapping>
<!-- 修改功能 -->
<servlet>
<servlet-name>ServletUpdate</servlet-name>
<servlet-class>com.servlet.ServletUpdate</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletUpdate</servlet-name>
<url-pattern>/ServletUpdate</url-pattern>
</servlet-mapping>
</web-app>