当前位置:Gxlcms > 数据库问题 > 基于JSP+Serlvet+JDBC的开发(5)-- 商品功能

基于JSP+Serlvet+JDBC的开发(5)-- 商品功能

时间:2021-07-01 10:21:17 帮助过:3人阅读

<html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4 <%@ include file="top.jsp"%> 5 <title>商品展示</title> 6 </head> 7 <body> 8 <div class="main"> 9 <div> 10 <a href="${root}/send?url=goods-save.jsp">添加商品</a> 11 </div> 12 <table> 13 <tr> 14 <td>序号</td> 15 <td>商品名称</td> 16 <td>商品价格</td> 17 </tr> 18 <c:forEach items="${entities}" var="obj" varStatus="status"> 19 <tr> 20 <td>${status.index + 1 }</td> 21 <td>${obj.name}</td> 22 <td>${obj.price}</td> 23 </tr> 24 </c:forEach> 25 </table> 26 </div> 27 </body> 28 </html>

Controller层(Serlvet):

  1. <span style="color: #008080;"> 1</span> <span style="color: #0000ff;">package</span><span style="color: #000000;"> action;
  2. </span><span style="color: #008080;"> 2</span>
  3. <span style="color: #008080;"> 3</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> java.io.IOException;
  4. </span><span style="color: #008080;"> 4</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> java.util.List;
  5. </span><span style="color: #008080;"> 5</span>
  6. <span style="color: #008080;"> 6</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> javax.servlet.RequestDispatcher;
  7. </span><span style="color: #008080;"> 7</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> javax.servlet.ServletException;
  8. </span><span style="color: #008080;"> 8</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> javax.servlet.http.HttpServlet;
  9. </span><span style="color: #008080;"> 9</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> javax.servlet.http.HttpServletRequest;
  10. </span><span style="color: #008080;">10</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> javax.servlet.http.HttpServletResponse;
  11. </span><span style="color: #008080;">11</span>
  12. <span style="color: #008080;">12</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> model.Goods;
  13. </span><span style="color: #008080;">13</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> service.GoodsService;
  14. </span><span style="color: #008080;">14</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> service.impl.GoodsServiceImpl;
  15. </span><span style="color: #008080;">15</span>
  16. <span style="color: #008080;">16</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> GoodsAction <span style="color: #0000ff;">extends</span><span style="color: #000000;"> HttpServlet {
  17. </span><span style="color: #008080;">17</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> <span style="color: #0000ff;">long</span> serialVersionUID = 1L<span style="color: #000000;">;
  18. </span><span style="color: #008080;">18</span>
  19. <span style="color: #008080;">19</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> String[] action = { "tid", "save", "delete", "update"<span style="color: #000000;"> };
  20. </span><span style="color: #008080;">20</span> <span style="color: #0000ff;">private</span> GoodsService goodsService = <span style="color: #0000ff;">new</span><span style="color: #000000;"> GoodsServiceImpl();
  21. </span><span style="color: #008080;">21</span>
  22. <span style="color: #008080;">22</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> doGet(HttpServletRequest request, HttpServletResponse response)
  23. </span><span style="color: #008080;">23</span> <span style="color: #0000ff;">throws</span><span style="color: #000000;"> ServletException, IOException {
  24. </span><span style="color: #008080;">24</span> <span style="color: #000000;"> doPost(request, response);
  25. </span><span style="color: #008080;">25</span> <span style="color: #000000;"> }
  26. </span><span style="color: #008080;">26</span>
  27. <span style="color: #008080;">27</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> doPost(HttpServletRequest request, HttpServletResponse response)
  28. </span><span style="color: #008080;">28</span> <span style="color: #0000ff;">throws</span><span style="color: #000000;"> ServletException, IOException {
  29. </span><span style="color: #008080;">29</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 获取action</span>
  30. <span style="color: #008080;">30</span> String actionName = request.getParameter("action") != <span style="color: #0000ff;">null</span> ? request.getParameter("action") : ""<span style="color: #000000;">;
  31. </span><span style="color: #008080;">31</span> <span style="color: #0000ff;">int</span> actionIndex = 0<span style="color: #000000;">;
  32. </span><span style="color: #008080;">32</span> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0; i < action.length; i++<span style="color: #000000;">) {
  33. </span><span style="color: #008080;">33</span> <span style="color: #0000ff;">if</span><span style="color: #000000;"> (action[i].equals(actionName)) {
  34. </span><span style="color: #008080;">34</span> actionIndex =<span style="color: #000000;"> i;
  35. </span><span style="color: #008080;">35</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">;
  36. </span><span style="color: #008080;">36</span> <span style="color: #000000;"> }
  37. </span><span style="color: #008080;">37</span> <span style="color: #000000;"> }
  38. </span><span style="color: #008080;">38</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 保存action操作结果[d/r, url]</span>
  39. <span style="color: #008080;">39</span> String[] r = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
  40. </span><span style="color: #008080;">40</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据actionIndex调用对应的方法</span>
  41. <span style="color: #008080;">41</span> <span style="color: #0000ff;">switch</span><span style="color: #000000;"> (actionIndex) {
  42. </span><span style="color: #008080;">42</span> <span style="color: #0000ff;">case</span> 0<span style="color: #000000;">:
  43. </span><span style="color: #008080;">43</span> r =<span style="color: #000000;"> tip(request, response);
  44. </span><span style="color: #008080;">44</span> <span style="color: #0000ff;">break</span><span style="color: #000000;">;
  45. </span><span style="color: #008080;">45</span> <span style="color: #0000ff;">case</span> 1<span style="color: #000000;">:
  46. </span><span style="color: #008080;">46</span> r =<span style="color: #000000;"> save(request, response);
  47. </span><span style="color: #008080;">47</span> <span style="color: #000000;"> }
  48. </span><span style="color: #008080;">48</span>
  49. <span style="color: #008080;">49</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据action操作结果执行相应的操作</span>
  50. <span style="color: #008080;">50</span> <span style="color: #0000ff;">if</span> ("d".equals(r[0])) {<span style="color: #008000;">//</span><span style="color: #008000;"> 转发</span>
  51. <span style="color: #008080;">51</span> RequestDispatcher rd = request.getRequestDispatcher(r[1<span style="color: #000000;">]);
  52. </span><span style="color: #008080;">52</span> <span style="color: #000000;"> rd.forward(request, response);
  53. </span><span style="color: #008080;">53</span> } <span style="color: #0000ff;">else</span> {<span style="color: #008000;">//</span><span style="color: #008000;"> 重定向</span>
  54. <span style="color: #008080;">54</span> response.sendRedirect(r[1<span style="color: #000000;">]);
  55. </span><span style="color: #008080;">55</span> <span style="color: #000000;"> }
  56. </span><span style="color: #008080;">56</span> <span style="color: #000000;"> }
  57. </span><span style="color: #008080;">57</span>
  58. <span style="color: #008080;">58</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据类似ID获取商品</span>
  59. <span style="color: #008080;">59</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> String[] tip(HttpServletRequest request, HttpServletResponse response) {
  60. </span><span style="color: #008080;">60</span> Long tid = Long.parseLong(request.getParameter("tid"<span style="color: #000000;">));
  61. </span><span style="color: #008080;">61</span> List<Goods> gList =<span style="color: #000000;"> goodsService.findByTid(tid);
  62. </span><span style="color: #008080;">62</span> request.setAttribute("entities"<span style="color: #000000;">, gList);
  63. </span><span style="color: #008080;">63</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> String[] { "d", "WEB-INF/jsp/goods-index.jsp"<span style="color: #000000;"> };
  64. </span><span style="color: #008080;">64</span> <span style="color: #000000;"> }
  65. </span><span style="color: #008080;">65</span>
  66. <span style="color: #008080;">66</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 保存商品</span>
  67. <span style="color: #008080;">67</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> String[] save(HttpServletRequest request, HttpServletResponse response) {
  68. </span><span style="color: #008080;">68</span> String name = request.getParameter("name"<span style="color: #000000;">);
  69. </span><span style="color: #008080;">69</span> String price = request.getParameter("price"<span style="color: #000000;">);
  70. </span><span style="color: #008080;">70</span> <span style="color: #0000ff;">boolean</span> isNull = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
  71. </span><span style="color: #008080;">71</span> <span style="color: #0000ff;">if</span> (name == <span style="color: #0000ff;">null</span> || ""<span style="color: #000000;">.equals(name)) {
  72. </span><span style="color: #008080;">72</span> request.setAttribute("msg-name", "商品名称不能为空"<span style="color: #000000;">);
  73. </span><span style="color: #008080;">73</span> isNull = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
  74. </span><span style="color: #008080;">74</span> <span style="color: #000000;"> }
  75. </span><span style="color: #008080;">75</span> <span style="color: #0000ff;">if</span> (price == <span style="color: #0000ff;">null</span> || ""<span style="color: #000000;">.equals(price)) {
  76. </span><span style="color: #008080;">76</span> request.setAttribute("msg-price", "商品价格不能为空"<span style="color: #000000;">);
  77. </span><span style="color: #008080;">77</span> isNull = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
  78. </span><span style="color: #008080;">78</span> <span style="color: #000000;"> }
  79. </span><span style="color: #008080;">79</span> <span style="color: #0000ff;">try</span><span style="color: #000000;"> {
  80. </span><span style="color: #008080;">80</span> <span style="color: #000000;"> Double.parseDouble(price);
  81. </span><span style="color: #008080;">81</span> } <span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e) {
  82. </span><span style="color: #008080;">82</span> request.setAttribute("msg-price", "商品价格不能为字符"<span style="color: #000000;">);
  83. </span><span style="color: #008080;">83</span> isNull = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
  84. </span><span style="color: #008080;">84</span> <span style="color: #000000;"> }
  85. </span><span style="color: #008080;">85</span>
  86. <span style="color: #008080;">86</span> <span style="color: #0000ff;">if</span><span style="color: #000000;"> (isNull) {
  87. </span><span style="color: #008080;">87</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> String[] { "d", "WEB-INF/jsp/goods-save.jsp"<span style="color: #000000;"> };
  88. </span><span style="color: #008080;">88</span> <span style="color: #000000;"> }
  89. </span><span style="color: #008080;">89</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 保存实体</span>
  90. <span style="color: #008080;">90</span> Goods g = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Goods();
  91. </span><span style="color: #008080;">91</span> <span style="color: #000000;"> g.setName(name);
  92. </span><span style="color: #008080;">92</span> <span style="color: #000000;"> g.setPrice(Double.parseDouble(price));
  93. </span><span style="color: #008080;">93</span> g.setTid(Long.parseLong(request.getParameter("tid"<span style="color: #000000;">)));
  94. </span><span style="color: #008080;">94</span> <span style="color: #000000;"> goodsService.save(g);
  95. </span><span style="color: #008080;">95</span> String root =<span style="color: #000000;"> request.getContextPath();
  96. </span><span style="color: #008080;">96</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> String[] { "r", root + "/type"<span style="color: #000000;"> };
  97. </span><span style="color: #008080;">97</span> <span style="color: #000000;"> }
  98. </span><span style="color: #008080;">98</span>
  99. <span style="color: #008080;">99</span> }

Service层(这里GoodsService除了基本的增删查改外,还有自己的一个业务,就是根据商品类型ID获取所有该类型的商品):

  1. <span style="color: #008080;">1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span> GoodsService <span style="color: #0000ff;">extends</span> BaseServcice<Long, Goods><span style="color: #000000;">{
  2. </span><span style="color: #008080;">2</span>
  3. <span style="color: #008080;">3</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据类型ID查询所有商品</span>
  4. <span style="color: #008080;">4</span> List<Goods><span style="color: #000000;"> findByTid(Long tid);
  5. </span><span style="color: #008080;">5</span> }

Service的实现(直接调用DAO层)

  1. <span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> GoodsServiceImpl <span style="color: #0000ff;">extends</span> BaseServiceImpl<Long, Goods> <span style="color: #0000ff;">implements</span><span style="color: #000000;"> GoodsService{
  2. </span><span style="color: #008080;"> 2</span>
  3. <span style="color: #008080;"> 3</span> <span style="color: #0000ff;">private</span> GoodsDAO goodsDAO = <span style="color: #0000ff;">new</span><span style="color: #000000;"> GoodsDAOImpl();
  4. </span><span style="color: #008080;"> 4</span>
  5. <span style="color: #008080;"> 5</span> <span style="color: #000000;"> @Override
  6. </span><span style="color: #008080;"> 6</span> <span style="color: #0000ff;">protected</span> BaseDAO<Long, Goods><span style="color: #000000;"> getBaseDAO() {
  7. </span><span style="color: #008080;"> 7</span> <span style="color: #0000ff;">return</span><span style="color: #000000;"> goodsDAO;
  8. </span><span style="color: #008080;"> 8</span> <span style="color: #000000;"> }
  9. </span><span style="color: #008080;"> 9</span>
  10. <span style="color: #008080;">10</span> <span style="color: #000000;"> @Override
  11. </span><span style="color: #008080;">11</span> <span style="color: #0000ff;">public</span> List<Goods><span style="color: #000000;"> findByTid(Long tid) {
  12. </span><span style="color: #008080;">12</span> <span style="color: #0000ff;">return</span><span style="color: #000000;"> goodsDAO.findByTid(tid);
  13. </span><span style="color: #008080;">13</span> <span style="color: #000000;"> }
  14. </span><span style="color: #008080;">14</span> }

DAO层:

  1. <span style="color: #008080;">1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span> GoodsDAO <span style="color: #0000ff;">extends</span> BaseDAO<Long, Goods><span style="color: #000000;">{
  2. </span><span style="color: #008080;">2</span>
  3. <span style="color: #008080;">3</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据商品类型查询所有商品</span>
  4. <span style="color: #008080;">4</span> List<Goods><span style="color: #000000;"> findByTid(Long tid);
  5. </span><span style="color: #008080;">5</span> }

DAO的实现(由于DAO继承了BaseDAOImpl,所有普通的增删查改就不用实现了,只要实现自己的就可以了。)

  1. <span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> GoodsDAOImpl <span style="color: #0000ff;">extends</span> BaseDAOImpl<Long, Goods> <span style="color: #0000ff;">implements</span><span style="color: #000000;"> GoodsDAO{
  2. </span><span style="color: #008080;"> 2</span>
  3. <span style="color: #008080;"> 3</span> <span style="color: #000000;"> @Override
  4. </span><span style="color: #008080;"> 4</span> <span style="color: #0000ff;">public</span> List<Goods><span style="color: #000000;"> findByTid(Long tid) {
  5. </span><span style="color: #008080;"> 5</span> String findSQL = "select * from tb_goods where tid = ?"<span style="color: #000000;">;
  6. </span><span style="color: #008080;"> 6</span> List<Goods> gList = <span style="color: #0000ff;">new</span> ArrayList<Goods><span style="color: #000000;">();
  7. </span><span style="color: #008080;"> 7</span> <span style="color: #0000ff;">try</span><span style="color: #000000;"> {
  8. </span><span style="color: #008080;"> 8</span> conn =<span style="color: #000000;"> DBUtil.getConn();
  9. </span><span style="color: #008080;"> 9</span> pstmt =<span style="color: #000000;"> conn.prepareStatement(findSQL);
  10. </span><span style="color: #008080;">10</span> pstmt.setLong(1<span style="color: #000000;">, tid);
  11. </span><span style="color: #008080;">11</span> rs =<span style="color: #000000;"> pstmt.executeQuery();
  12. </span><span style="color: #008080;">12</span>
  13. <span style="color: #008080;">13</span> Goods g = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
  14. </span><span style="color: #008080;">14</span> <span style="color: #0000ff;">while</span><span style="color: #000000;"> (rs.next()) {
  15. </span><span style="color: #008080;">15</span> g = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Goods();
  16. </span><span style="color: #008080;">16</span> g.setName(rs.getString("name"<span style="color: #000000;">));
  17. </span><span style="color: #008080;">17</span> g.setPrice(rs.getDouble("price"<span style="color: #000000;">));
  18. </span><span style="color: #008080;">18</span> <span style="color: #000000;"> gList.add(g);
  19. </span><span style="color: #008080;">19</span> <span style="color: #000000;"> }
  20. </span><span style="color: #008080;">20</span> } <span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception e) {
  21. </span><span style="color: #008080;">21</span> <span style="color: #000000;"> LogUtil.log(e.getMessage());
  22. </span><span style="color: #008080;">22</span> <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> RuntimeException(e);
  23. </span><span style="color: #008080;">23</span> <span style="color: #000000;"> }
  24. </span><span style="color: #008080;">24</span> <span style="color: #0000ff;">return</span><span style="color: #000000;"> gList;
  25. </span><span style="color: #008080;">25</span> <span style="color: #000000;"> }
  26. </span><span style="color: #008080;">26</span> }

这里除了展示商品外依然提供了添加商品的连接:

  1. <span style="color: #008080;"> 1</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span>
  2. <span style="color: #008080;"> 2</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
  3. <span style="color: #008080;"> 3</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">meta </span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Type"</span><span style="color: #ff0000;"> content</span><span style="color: #0000ff;">="text/html; charset=UTF-8"</span><span style="color: #0000ff;">></span>
  4. <span style="color: #008080;"> 4</span> <span style="background-color: #ffff00; color: #000000;"><%</span><span style="background-color: #f5f5f5; color: #000000;">@ include file</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #f5f5f5; color: #800000;">top.jsp</span><span style="background-color: #f5f5f5; color: #800000;">"</span><span style="background-color: #ffff00; color: #000000;">%></span>
  5. <span style="color: #008080;"> 5</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>添加商品<span style="color: #0000ff;"></</span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>
  6. <span style="color: #008080;"> 6</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
  7. <span style="color: #008080;"> 7</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
  8. <span style="color: #008080;"> 8</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">form </span><span style="color: #ff0000;">action</span><span style="color: #0000ff;">="${root}/goods?action=save"</span><span style="color: #ff0000;"> method</span><span style="color: #0000ff;">="post"</span><span style="color: #0000ff;">></span>
  9. <span style="color: #008080;"> 9</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">table</span><span style="color: #0000ff;">></span>
  10. <span style="color: #008080;">10</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">caption</span><span style="color: #0000ff;">></span>添加商品<span style="color: #0000ff;"></</span><span style="color: #800000;">caption</span><span style="color: #0000ff;">></span>
  11. <span style="color: #008080;">11</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  12. <span style="color: #008080;">12</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>商品名称:<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  13. <span style="color: #008080;">13</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="name"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  14. <span style="color: #008080;">14</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>${msg}<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  15. <span style="color: #008080;">15</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  16. <span style="color: #008080;">16</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  17. <span style="color: #008080;">17</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>商品价格:<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  18. <span style="color: #008080;">18</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="price"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  19. <span style="color: #008080;">19</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>${msg}<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  20. <span style="color: #008080;">20</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  21. <span style="color: #008080;">21</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  22. <span style="color: #008080;">22</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>商品类型:<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  23. <span style="color: #008080;">23</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="type-select"</span><span style="color: #0000ff;">></span>
  24. <span style="color: #008080;">24</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  25. <span style="color: #008080;">25</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>${msg}<span style="color: #0000ff;"></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  26. <span style="color: #008080;">26</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  27. <span style="color: #008080;">27</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  28. <span style="color: #008080;">28</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">td </span><span style="color: #ff0000;">colspan</span><span style="color: #0000ff;">="3"</span><span style="color: #0000ff;">><</span><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="submit"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="添加"</span><span style="color: #0000ff;">/></</span><span style="color: #800000;">td</span><span style="color: #0000ff;">></span>
  29. <span style="color: #008080;">29</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">></span>
  30. <span style="color: #008080;">30</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">table</span><span style="color: #0000ff;">></span>
  31. <span style="color: #008080;">31</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">form</span><span style="color: #0000ff;">></span>
  32. <span style="color: #008080;">32</span>
  33. <span style="color: #008080;">33</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">script </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #ff0000;"> src</span><span style="color: #0000ff;">="${root}/resources/js/jquery-1.11.1.js"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">script</span><span style="color: #0000ff;">></span>
  34. <span style="color: #008080;">34</span> <span style="color: #0000ff;"><</span><span style="color: #800000;">script </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #ff0000;"> src</span><span style="color: #0000ff;">="${root}/resources/js/goods-save.js"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">script</span><span style="color: #0000ff;">></span>
  35. <span style="color: #008080;">35</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
  36. <span style="color: #008080;">36</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span>

技术分享

需要注意的是,这里的下拉框是在页面加载完后,异步向后台查询并添加的。这里使用了jQuery发送异步请求。

  1. $(<span style="color: #0000ff;">function</span><span style="color: #000000;">() {
  2. $.ajax({
  3. url : </span>"type?action=ajax-type"<span style="color: #000000;">,
  4. dataType : </span>"json"<span style="color: #000000;">,
  5. success : </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(r) {
  6. </span><span style="color: #008000;">//</span><span style="color: #008000;"> "<select><option value>"</span>
  7. <span style="color: #0000ff;">var</span> html = "<select name=‘tid‘>"<span style="color: #000000;">;
  8. </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">var</span> i = 0; i < r.total; i++<span style="color: #000000;">) {
  9. html </span>+= "<option value=‘" + r.data[i].id + "‘>"
  10. + r.data[i].name + "</option>"<span style="color: #000000;">;
  11. }
  12. html </span>+= "<select>"<span style="color: #000000;">;
  13. $(</span>"#type-select"<span style="color: #000000;">).html(html);
  14. }
  15. })
  16. });</span>

后台实现type这个Serlvet中的ajaxType方法负责这个请求并拼凑返回JSON数据:

  1. <span style="color: #008080;"> 1</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 异步拉取type数据</span>
  2. <span style="color: #008080;"> 2</span> <span style="color: #0000ff;">private</span><span style="color: #000000;"> String[] ajaxType(HttpServletRequest request, HttpServletResponse response) {
  3. </span><span style="color: #008080;"> 3</span> List<Type> tList =<span style="color: #000000;"> typeService.find();
  4. </span><span style="color: #008080;"> 4</span> StringBuffer json = <span style="color: #0000ff;">new</span> StringBuffer("{ \"total\" : ").append(tList.size()).append(", \"data\" : ["<span style="color: #000000;">);
  5. </span><span style="color: #008080;"> 5</span> <span style="color: #0000ff;">if</span> (!<span style="color: #000000;">tList.isEmpty()) {
  6. </span><span style="color: #008080;"> 6</span> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = 0, size = tList.size(); i < size - 1; i++<span style="color: #000000;">) {
  7. </span><span style="color: #008080;"> 7</span> json = json.append("{\"id\" : ").append(tList.get(i).getId()).append(", \"name\" : \""<span style="color: #000000;">)
  8. </span><span style="color: #008080;"> 8</span> .append(tList.get(i).getName()).append("\"},"<span style="color: #000000;">);
  9. </span><span style="color: #008080;"> 9</span> <span style="color: #000000;"> }
  10. </span><span style="color: #008080;">10</span> json = json.append("{\"id\" : ").append(tList.get(tList.size() - 1).getId()).append(", \"name\" : \""<span style="color: #000000;">)
  11. </span><span style="color: #008080;">11</span> .append(tList.get(tList.size() - 1).getName()).append("\"}"<span style="color: #000000;">);
  12. </span><span style="color: #008080;">12</span> <span style="color: #000000;"> }
  13. </span><span style="color: #008080;">13</span> json = json.append("]}"<span style="color: #000000;">);
  14. </span><span style="color: #008080;">14</span>
  15. <span style="color: #008080;">15</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">new</span> String[] { ""<span style="color: #000000;">, json.toString() };
  16. </span><span style="color: #008080;">16</span> }

这里的返回数组的第一个对象是“”,不是“r”,也不是“d”,所以第二个对象json.toString()会被直接输出都客户端,相关代码如下:

  1. <span style="color: #008080;"> 1</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据action操作结果执行相应的操作</span>
  2. <span style="color: #008080;"> 2</span> <span style="color: #0000ff;">if</span> ("d".equals(r[0])) {<span style="color: #008000;">//</span><span style="color: #008000;"> 转发</span>
  3. <span style="color: #008080;"> 3</span> RequestDispatcher rd = request.getRequestDispatcher(r[1<span style="color: #000000;">]);
  4. </span><span style="color: #008080;"> 4</span> <span style="color: #000000;"> rd.forward(request, response);
  5. </span><span style="color: #008080;"> 5</span> } <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> ("r".equals(r[0])) {<span style="color: #008000;">//</span><span style="color: #008000;"> 重定向</span>
  6. <span style="color: #008080;"> 6</span> response.sendRedirect(r[1<span style="color: #000000;">]);
  7. </span><span style="color: #008080;"> 7</span> } <span style="color: #0000ff;">else</span> {<span style="color: #008000;">//</span><span style="color: #008000;"> 直接输出r[1]的内容</span>
  8. <span style="color: #008080;"> 8</span> PrintWriter out =<span style="color: #000000;"> response.getWriter();
  9. </span><span style="color: #008080;"> 9</span> out.println(r[1<span style="color: #000000;">]);
  10. </span><span style="color: #008080;">10</span> <span style="color: #000000;"> out.flush();
  11. </span><span style="color: #008080;">11</span> <span style="color: #000000;"> out.close();
  12. </span><span style="color: #008080;">12</span> }

这样基本的功能都实现了,接下来的改善地方就是利用Filter统一解决乱码问题,利用Listener项目启动就加载类型并放在application中(这样项目就不会每个人访问的都去数据库查一次类型了,毕竟类型改变的几率很少,即使改变了,重新加载一次就可以了。)还有一点改善的地方就是自定义注解解决表名的约定。

昨天忙了一晚上还落枕了,脖子一天都不舒服,坑爹。好了周末又过了。

基于JSP+Serlvet+JDBC的开发(5)-- 商品功能

标签:

人气教程排行