一,先登录,登录成功后显示操作界面,根据界面的提示,执行注册,登录,增加,修改,删除,查询的功能
1、实现用户的注册功能
2、实现用户的登陆功能
3、实现用户的增加功能。
3、实现用户的修改,但要考虑用户是否真实存在
4、实现用户的删除功能,查询功能。
5、实现用户的查询功能,查询全部及根据userName名去查询
二,实现增删改查四个功能
1,增加功能
新增成功都要检查返回页(若有)和数据库记录于新增的是否一致,新增失败检查提示是否合理。
1、填充全部要素,增加成功
2、检查每一个必填项如果不填添加,会发生什么(报错提示还是新增成功?)
3、检查字段的业务规则。比如:ID只能为数字(为啥?ID是int类型啊)
4、弹窗确定,取消,看流程是否新增或者取消
<html>
<head>
<title>商品信息添加</title>
</head>
<body>
<h2>商品添加</h2>
<form action="addGoods" method="post">
商品名称:<input type="text" name="gname" value="" placeholder="商品名称" /> <br/>
商品价格:<input type="number" step="0.01" name="price" value="" placeholder="商品价格" /> <br/>
商品说明:<input type="text" name="mark" value="" placeholder="商品说明" /> <br/>
<input type="submit" value="添加">
</form>
</body>
</html>
public int add(Goods goods){
try {
Class.forName(JDBCdriver);
con=DriverManager.getConnection(JDBCurl,JDBCusername,JDBCpassword);
String sql="insert into t_goods(gname,price,mark) values(?,?,?)";
pstm=con.prepareStatement(sql);
pstm.setObject(1,goods.getGname());
pstm.setObject(2,goods.getPrice());
pstm.setObject(3,goods.getMark());
row = pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return row;
}
@WebServlet("/addGoods")
public class AddGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取请求参数并封装到Goods对象中
Goods goods = new Goods();
goods.setGname(request.getParameter("gname"));
//使用Double包装类把字符串数字转换为double数据
goods.setPrice(Double.parseDouble(request.getParameter("price")));
goods.setMark(request.getParameter("mark"));
//执行JDBC的添加操作
GoodsDao goodsDao = new GoodsDao();
int row = goodsDao.add(goods);
if(row>0){
//添加成功,请求selectAllGoods地址,执行对应的Servlet(查询商品信息,存入session中,转到主页)
request.getRequestDispatcher("selectAllGoods").forward(request,response);
}else {
request.setAttribute("error_msg","添加商品出错啦");
}
}
}
2,删除功能
删除成功都要检查返回页(若有)和数据库记录
1、软删除还是硬删除(硬删除就是物理删除,看看数据库记录是否存在。软删除的话看看对应数据库字段是否改了,比如:status字段值改为disable)
2、删除提示
3、弹窗确定,取消,看流程是否删除或者取消
4、关联关系:比如,你的系统用户删掉了。看看用这个用户还能不能登录对应系统
5、删除权限。无权限到有权限,有权限到无权限,注意权限的变化
@WebServlet("/dell")
public class DellGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int gid=Integer.parseInt(request.getParameter("gid"));
GoodsDao goodsDao = new GoodsDao();
int row = goodsDao.delete(gid);
if(row>0){
request.getRequestDispatcher("selectAllGoods").forward(request,response);
}else {
request.setAttribute("error.msg","删除出现了问题");
request.getRequestDispatcher("error.jsp").forward(request,response);
}
}
}
public int delete(int gid){
try {
Class.forName(JDBCdriver);
con=DriverManager.getConnection(JDBCurl,JDBCusername,JDBCpassword);
String sql="delete from t_goods where gid=?";
pstm=con.prepareStatement(sql);
pstm.setObject(1,gid);
row = pstm.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return row;
}
3,修改功能
1、对应字段能修改的和不能修改的检查,比如很多时候ID是不能修改的
2、每一个能修改的字段都需要修改后提交,检查返回页和数据库的值修改得是否正确
3、修改还原,修改后的东西又改为修改之前的,关注页面变化
4、关联关系:比如权限系统,对应修改了用户的权限,那么对应的模块访问的权限就被修改
备注信息的长度等,这些有确定要求再提
<html>
<head>
<title>商品信息修改</title>
</head>
<body>
<h2>商品修改</h2>
<form action="updateGoods" method="post">
商品编号:<input type="text" name="gid" value="${goods.gid}" placeholder="商品编号" readonly="readonly"/> <br/>
商品名称:<input type="text" name="gname" value="${goods.gname}" placeholder="商品名称" /> <br/>
商品价格:<input type="number" step="0.01" name="price" value="${goods.price}" placeholder="商品价格" /> <br/>
商品说明:<input type="text" name="mark" value="${goods.mark}" placeholder="商品说明" /> <br/>
<input type="submit" value="修改">
</form>
</body>
</html>
@WebServlet("/findById")
public class FindGoodsById extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int gid = Integer.parseInt(request.getParameter("gid"));
//根据gid查询该商品信息
GoodsDao goodsDao = new GoodsDao();
Goods goods = goodsDao.selectById(gid);
if(goods!=null){
//把数据存储到request域对象中,然后请求转发到页面
request.setAttribute("goods",goods);
request.getRequestDispatcher("showGoods.jsp").forward(request,response);
}else {
request.setAttribute("error.msg","修改出现了问题");
request.getRequestDispatcher("error.jsp").forward(request,response);
}
}
}
@WebServlet("/updateGoods")
public class UpdateGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取表单请求的数据,封装到goods对象中
Goods goods = new Goods();
goods.setGid(Integer.parseInt(request.getParameter("gid")));
goods.setGname(request.getParameter("gname"));
goods.setPrice(Double.parseDouble(request.getParameter("price")));
goods.setMark(request.getParameter( "mark"));
System.out.println(goods);
GoodsDao goodsDao = new GoodsDao();
int row = goodsDao.update(goods);
if(row>0){
request.getRequestDispatcher("selectAllGoods").forward(request,response);
}else {
request.setAttribute("error.msg","修改出现了问题");
request.getRequestDispatcher("error.jsp").forward(request,response);
}
}
}
public Goods selectById(int gid){
Goods goods=null;
try {
Class.forName(JDBCdriver);
con = DriverManager.getConnection(JDBCurl, JDBCusername, JDBCpassword);
String sql = "select * from t_goods where gid=?";
pstm = con.prepareStatement(sql);
pstm.setObject(1,gid);
rs = pstm.executeQuery();
if (rs.next()) {
//从结果集中获取数据,封装到Goods对象中
goods = new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getDouble("price"));
goods.setMark(rs.getString("mark"));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return goods;
}
public int update(Goods goods){
try {
Class.forName(JDBCdriver);
con = DriverManager.getConnection(JDBCurl, JDBCusername, JDBCpassword);
String sql = "update t_goods set gname=?,price=?,mark=? where gid=?";
pstm = con.prepareStatement(sql);
pstm.setObject(1,goods.getGname());
pstm.setObject(2,goods.getPrice());
pstm.setObject(3,goods.getMark());
pstm.setObject(4,goods.getGid());
row=pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return row;
}
4,查询功能
1、直接点击查询默认查找所有
2、看需求是否实现了对应字段的查询,对应字段是否支持模糊查询
3、字段交叉查询,比如日志信息,同时输入操作人和时间看查询的结果是否正确
4、一般页面会有重置查询条件的按钮,要看看每一个输入框或者下拉框的内容是否被清空
一些查询框输入字母、字符、等这些案例只有在有要求或者是凑案例数的时候需要吧。一般没人管你这些东西
@WebServlet("/selectAllGoods")
public class SelectAllGoods extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("SelectAllGoods...doPost");
//查询所有商品信息
GoodsDao goodsDao = new GoodsDao();
List<Goods> goodsList = goodsDao.selectAll();
System.out.println(goodsList);
//把数据传递到前端页面
//通过request获取session对象,该对象可以向前端传输数据的容器
HttpSession session = request.getSession();
//向session中存入商品信息集合
session.setAttribute("goodsList",goodsList);
//登录成功,跳转到主页
response.sendRedirect("zhuye.jsp");
}
}
public List<Goods> selectAll() {
List<Goods> goodsList = new ArrayList<>();
try {
Class.forName(JDBCdriver);
con = DriverManager.getConnection(JDBCurl, JDBCusername, JDBCpassword);
String sql = "select * from t_goods";
pstm = con.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()) {
//从结果集中获取数据,封装到Goods对象中
Goods goods = new Goods();
goods.setGid(rs.getInt("gid"));
goods.setGname(rs.getString("gname"));
goods.setPrice(rs.getDouble("price"));
goods.setMark(rs.getString("mark"));
//把当前行对应的对象储存到集合中
goodsList.add(goods);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return goodsList;
}
最后查询修改四个功能就完成啦!