[原创]java WEB学习笔记25:MVC案例完整实践(part 6)---新增操作的设计与实现

时间:2021-07-30 01:54:05

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

新增操作:

  思路:在index.jsp 页面下,点击Add New Customer 超链接,转向newcustomer.jsp 。在添加的操作有两个需求:

    1.保证name的唯一性,也就是说,在新增的用户中,先进行查询name在数据库中是否存在。

       若存在,则通过转发发送到newcustomer.jsp 一条提示信息;

       若不存,则将请求的信息name,address,phone封装为一个Customer的对象,在通过调用customerDAO的save(),将信息添加到数据库,并且通过重定向的方式跳转到 success.jsp,加上提示 和 超链接 返回 querey.do

    2.在index.jsp 页面要有回显的功能。也就是说不过成功添加还是不成功添加,都要将输入的信息显示到输入框中,达到回显的功能。

  

  关键代码:

  1.index.jsp 中的 Add New Customer 超链接

 

 <body>

     <form action="query.do" method="post">
<table>
<tr>
<td>CustomerName:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>Address:</td>
<td><input type="text" name="address"/></td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" name="phone"/></td>
</tr>
<tr>
<td><input type="submit" value="Query"/></td>
<td><a href="newcustomer.jsp">Add New Customer</a></td>
</tr>
</table>
</form>
<br><br>

  

  2.newcustomer.jsp 页面

   说明:① 通过   value="<%= request.getParameter("name") == null ? "" : request.getParameter("name") %>" 方式 达到回显的效果

      ② 当添加的name 在数据库从在,servlet 会返回一个message 信息。通过 <h2><font color="red"><%=request.getAttribute("message") == null ? "" : request.getAttribute("message")%></font></h2> 方式

        达到提示的效果

 <%@ 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>
<body>
<%--可以用来回显 <%= request.getParameter("name") %> 若为空 则赋为 空串儿 ; 反之 ,赋原值 --%> <h2><font color="red"><%=request.getAttribute("message") == null ? "" : request.getAttribute("message")%></font></h2> <form action="addCustomer.do" method="post">
<table>
<tr>
<td>CustomerName:</td>
<td><input type="text" name="name"
value="<%= request.getParameter("name") == null ? "" : request.getParameter("name") %>"/></td>
</tr>
<tr>
<td>Address:</td>
<td><input type="text" name="address"
value="<%= request.getParameter("address") == null ? "" : request.getParameter("address")%>"/></td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" name="phone"
value="<%= request.getParameter("phone") == null ? "" : request.getParameter("phone") %>"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="submit"/></td>
</tr>
</table>
</form> </body>
</html>

  

  3.success,jsp :提示信息和返回index.jsp 的超链接

 <body>

     <h1>操作成功</h1>
<a href="index.jsp">return ....</a> </body>

  3.CustomerServlet2 中的addCustomer()方法

  

 private void addCustomer(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { System.out.println("add function");
request.setCharacterEncoding("UTF-8");
// 1.获取表单参数:name,address,phone
String name = request.getParameter("name");
String address = request.getParameter("address");
String phone = request.getParameter("phone"); // 2.检验 name 是否已经被占用
// 2.1调用 CustomerDAO 的 getCountWithName(String name) 获取 name 在数据库中是否存在 long rel = customerDAO.getCountWithName(name);
// 2.2 若返回值大于0,则响应newcustomer.jsp 页面:
if (rel > 0) {
// 2.2.1 要求在newcustomer.jsp 页面显示一条消息:用户名 name 已经被占用了,请重新选择
// 在request 中放入一个属性 message:用户名 name
// 已经被占用,请重新选择!在页面通过request.getAttribute("message") 的方式来显示
// 2.2.2 newcustomer.jsp 的表单值可以回显
// value="<%= request.getParameter("name") == null ? "" : request.getParameter("name") %>"
// 进行回显
request.setAttribute("message", "用户名 " + name + " 已经被占用了,请重新选择!");
// 通过转发的方式来响应 newcustomer.jsp
request.getRequestDispatcher("/newcustomer.jsp").forward(request,
response);
// 2.2.3 结束方法:return
return;
}
// 3.把表单参数封装为一个Customer 对象
Customer customer = new Customer(name, address, phone); // 4.调用 customerDAO 的 save(Customer customer) 方法执行保存
customerDAO.save(customer); // 5.重定向到success.jsp 页面:使用重定向可以避免出现表单的重复提交
response.sendRedirect("success.jsp");
}
}

  4.CustomerDAO 中的 save 声明 ,getCountWithName()

 //保存操作
public void save(Customer coustomer); //查看与参数相同的名字有多少个记录数
public long getCountWithName(String name);

 

  5.CustomerDAOJdbcImpl 对CustomerDAO 的 save()具体实现 ,  getCountWithName

 @Override
public void save(Customer customer) {
String sql = "INSERT INTO customers(name, address, phone) VALUES(?,?,? )";
update(sql,customer.getName(),customer.getAddress(),customer.getPhone());
} @Override
public long getCountWithName(String name) {
String sql = "SELECT count(id) FROM customers WHERE name = ?";
return getForValue(sql, name);
}

  6.DAO 中的update() ,getForValue

  

    /**
* @param sql
* : sql语句
* @param ags
* : sql语句的占位符
* @description:该方法封装了 INSERT ,DELETE,UPDATE 操作
*/
public void update(String sql, Object... ags){ Connection connection = null;
try {
connection = JdbcUtils.getConnection();
queryRunner.update(connection, sql, ags); } catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseConnection(connection);
}
} /**
* @param sql
* @param args
* @description:返回某一个字段的值,例如:返回某一条记录的customerName
*/
public <E> E getForValue(String sql, Object... args) { Connection connection = null;
try {
connection = JdbcUtils.getConnection();
return (E) queryRunner.query(connection, sql, new ScalarHandler(), args); } catch (Exception e) {
e.printStackTrace();
} finally{
JdbcUtils.releaseConnection(connection);
}
return null;
}

  7.总结

  1)从代码层次理解MVC

  2)对于添加:一方面 要验证;一方面要更新数据库

  

[原创]java WEB学习笔记25:MVC案例完整实践(part 6)---新增操作的设计与实现的更多相关文章

  1. &lbrack;原创&rsqb;java WEB学习笔记24:MVC案例完整实践&lpar;part 5&rpar;---删除操作的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. &lbrack;原创&rsqb;java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. &lbrack;原创&rsqb;java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. &lbrack;原创&rsqb;java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作&lpar; 查看 &sol; 删除&sol; 添加&rpar; 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. &lbrack;原创&rsqb;java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. &lbrack;原创&rsqb;java WEB学习笔记21:MVC案例完整实践&lpar;part 2&rpar;---DAO层设计

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. &lbrack;原创&rsqb;java WEB学习笔记20:MVC案例完整实践&lpar;part 1&rpar;---MVC架构分析

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. &lbrack;原创&rsqb;java WEB学习笔记26:MVC案例完整实践&lpar;part 7&rpar;---修改的设计和实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. &lbrack;原创&rsqb;java WEB学习笔记23:MVC案例完整实践&lpar;part 4&rpar;---模糊查询的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. QQ邮箱

    yourTEXThere

  2. ANDROID&lowbar;MARS学习笔记&lowbar;S01原始版&lowbar;015&lowbar;Socket

    一.代码1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  3. ASP&period;NET MVC 4&period;0 学习2-留言板實現

    新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案   2,添加數據庫文件message.mdf   Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊&quo ...

  4. 应用层协议系列(两)——HTTPserver之http协议分析

    上一篇文章<抄nginx Httpserver设计与实现(一)--多进程和多通道IO现>中实现了一个仿照nginx的支持高并发的server.但仅仅是实现了port监听和数据接收.并没有实 ...

  5. POJ 3342 Party at Hali-Bula &sol; HDU 2412 Party at Hali-Bula &sol; UVAlive 3794 Party at Hali-Bula &sol; UVA 1220 Party at Hali-Bula(树型动态规划)

    POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 12 ...

  6. Java进阶&lpar;五十三&rpar;屡试不爽之正则表达式

    Java进阶(五十三)屡试不爽之正则表达式 在线测试网址: http://tool.oschina.net/regex/# 上面的在线测试网址,含有正则表达式的生成,非常实用.大家共勉之! 匹配中文: ...

  7. javascript学习(三)——常用方法&lpar;2&rpar;

    一.兼容性较高的浏览器页面关闭 //关闭网页,不支持火狐(火狐返回上次浏览页面)   //FireFox非window.open()等弹出页面,需要在地址栏中输入about:config, 然后将do ...

  8. android常犯错误记录(一)

    错误:Error:Error: Found item Attr/border_width more than one time 这个容易,属性相同了,按照提示查询一下找出来删了就行了,注意大小写很容易 ...

  9. 【Teradata SQL】使用SQL将多个逗号分隔改为一个逗号分隔

    1.问题说明: //将如下字符串改为一个逗号分隔 张三,李四,王五,,,,,,六,,,,其,,,,,,,,,,,把 ==> 张三,李四,王五,六,其,把 2.解决方法 sel oreplace( ...

  10. ant&lowbar;&lowbar;&lowbar;&lowbar;&lt&semi;project&gt&semi;标签的使用与含义

    <project> 标记项目,例如: <project name = "java-ant project" default = "run"&g ...