為什么要學習這個框架,因為在實際的項目開發中,大多都是互聯網項目,現在這些項目對性能的要求比較高,所以有必要學習一下這個框架。
首先是項目的整體結構:
login.html
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head lang="en"> 6 <meta charset="UTF-8"> 7 <title>系統登錄 - 超市訂單管理系統</title> 8 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/statics/css/style.css" /> 9 <script type="text/javascript"> 10 /* if(top.location!=self.location){ 11 top.location=self.location; 12 } */ 13 </script> 14 </head> 15 <body class="login_bg"> 16 <section class="loginBox"> 17 <header class="loginHeader"> 18 <h1>超市訂單管理系統</h1> 19 </header> 20 <section class="loginCont"> 21 <form class="loginForm" action="${pageContext.request.contextPath }/user/doLogin.html" name="actionForm" id="actionForm" method="post" > 22 <div class="info">${error }</div> 23 <div class="inputbox"> 24 <label for="user">用戶名:</label> 25 <input type="text" class="input-text" id="userCode" name="userCode" placeholder="請輸入用戶名" required/> 26 </div> 27 <div class="inputbox"> 28 <label for="mima">密碼:</label> 29 <input type="password" id="userPassword" name="userPassword" placeholder="請輸入密碼" required/> 30 </div> 31 <div class="subBtn"> 32 <input type="submit" value="登錄"/> 33 <input type="reset" value="重置"/> 34 </div> 35 </form> 36 </section> 37 </section> 38 </body> 39 </html>
foot.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3
4 <footer class="footer">
5 版權歸北大青鳥 6 </footer>
7 <script type="text/javascript" src="${pageContext.request.contextPath }/statics/js/time.js"></script>
8 <script type="text/javascript" src="${pageContext.request.contextPath }/statics/js/jquery-1.8.3.min.js"></script>
9 <script type="text/javascript" src="${pageContext.request.contextPath }/statics/js/common.js"></script>
10 <script type="text/javascript" src="${pageContext.request.contextPath }/statics/calendar/WdatePicker.js"></script>
11 </body>
12 </html>
head.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
4 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
5 <!DOCTYPE html>
6 <html>
7 <head lang="en">
8 <meta charset="UTF-8">
9 <title>超市訂單管理系統</title>
10 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/statics/css/style.css" />
11 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/statics/css/public.css" />
12 </head>
13 <body>
14 <!--頭部-->
15 <header class="publicHeader">
16 <h1>超市訂單管理系統</h1>
17 <div class="publicHeaderR">
18 <p><span>下午好!</span><span style="color: #fff21b"> ${userSession.userName }</span> , 歡迎你!</p>
19 <a href="${pageContext.request.contextPath }/jsp/logout.do">退出</a>
20 </div>
21 </header>
22 <!--時間-->
23 <section class="publicTime">
24 <span id="time">2015年1月1日 11:11 星期一</span>
25 <a href="#">溫馨提示:為了能正常瀏覽,請使用高版本瀏覽器!(IE10+)</a>
26 </section>
27 <!--主體內容-->
28 <section class="publicMian ">
29 <div class="left">
30 <h2 class="leftH2"><span class="span1"></span>功能列表 <span></span></h2>
31 <nav>
32 <ul class="list">
33 <li ><a href="${pageContext.request.contextPath }/jsp/bill.do?method=query">訂單管理</a></li>
34 <li><a href="${pageContext.request.contextPath }/jsp/provider.do?method=query">供應商管理</a></li>
35 <li><a href="${pageContext.request.contextPath }/jsp/user.do?method=query">用戶管理</a></li>
36 <li><a href="${pageContext.request.contextPath }/jsp/pwdmodify.jsp">密碼修改</a></li>
37 <li><a href="${pageContext.request.contextPath }/jsp/logout.do">退出系統</a></li>
38 </ul>
39 </nav>
40 </div>
41 <input type="hidden" id="path" name="path" value="${pageContext.request.contextPath }"/>
42 <input type="hidden" id="referer" name="referer" value="<%=request.getHeader("Referer")%>"/>
frame.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@include file="/WEB-INF/jsp/common/head.jsp"%>
3 <div class="right">
4 <img class="wColck" src="${pageContext.request.contextPath }/statics/images/clock.jpg" alt=""/>
5 <div class="wFont">
6 <h2>${userSession.userName }</h2>
7 <p>歡迎來到超市訂單管理系統!</p>
8 </div>
9 </div>
10 </section>
11 <%@include file="/WEB-INF/jsp/common/foot.jsp" %>
UserController.java
1 package cn.smbms.controller; 2 import javax.annotation.Resource; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpSession; 5
6 import org.apache.log4j.Logger; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestParam; 11
12 import cn.smbms.tools.Constants; 13
14 import cn.smbms.pojo.User; 15 import cn.smbms.service.user.UserService; 16
17 @Controller 18 @RequestMapping("/user") 19 public class UserController{ 20 private Logger logger = Logger.getLogger(UserController.class); 21 @Resource 22 private UserService userService; 23 /* @RequestMapping({"/welcome","/"}) 24 public String welcome(String username){ 25 logger.info("welcome, username:" + username); 26 return "index"; 27 }*/
28 @RequestMapping(value="/login.html") 29 public String login(){ 30 logger.info("進入UserController login=========="); 31 return "login";//要跳轉到的邏輯視圖 32 } 33 //實現用戶的登錄 34 //如果用戶登錄成功之后,將用戶信息放在session中 35 //如果用戶登陸失敗,將用戶頁面錄入的信息放入到request作用域中 36 @RequestMapping(value="/doLogin.html",method=RequestMethod.POST) 37 public String doLogin(@RequestParam String userCode,@RequestParam String userPassword,HttpSession session,HttpServletRequest request){ 38 logger.info("進入UserController doLogin=========="); 39 //調用service方法進行用戶匹配 40 User user = userService.login(userCode, userPassword); 41 if(user==null){ 42 //如果用戶登陸失敗的話,跳轉到登錄頁面 43 request.setAttribute("error", "用戶名或密碼不正確"); 44 return "login"; 45 }else{ 46 session.setAttribute(Constants.USER_SESSION, user); 47 return "redirect:/user/main.html"; 48 } 49
50 } 51
52 @RequestMapping(value="main.html") 53 public String main(HttpSession session){ 54 //用session進行判斷,如果session中有值,則可以讓其進行跳轉到系統首頁面 55 //如果session中沒有值,則讓用戶繼續跳轉到系統登陸頁面 56 if(session.getAttribute(Constants.USER_SESSION)==null){ 57 return "redirect:/user/login.html"; 58 } 59 logger.info("進入UserController doLogin=========="); 60 return "frame"; 61 } 62 }
UserDao.java
/**
* 通過userCode獲取User
* @param connection
* @param userCode
* @return
* @throws Exception
*/
public User getLoginUser(Connection connection,String userCode)throws Exception;
UserDaoImpl.java
1 @Override 2 public User getLoginUser(Connection connection, String userCode) 3 throws Exception { 4 // TODO Auto-generated method stub 5 PreparedStatement pstm = null; 6 ResultSet rs = null; 7 User user = null; 8 if(null != connection){ 9 String sql = "select * from smbms_user where userCode=?"; 10 Object[] params = {userCode}; 11 rs = BaseDao.execute(connection, pstm, rs, sql, params); 12 if(rs.next()){ 13 user = new User(); 14 user.setId(rs.getInt("id")); 15 user.setUserCode(rs.getString("userCode")); 16 user.setUserName(rs.getString("userName")); 17 user.setUserPassword(rs.getString("userPassword")); 18 user.setGender(rs.getInt("gender")); 19 user.setBirthday(rs.getDate("birthday")); 20 user.setPhone(rs.getString("phone")); 21 user.setAddress(rs.getString("address")); 22 user.setUserRole(rs.getInt("userRole")); 23 user.setCreatedBy(rs.getInt("createdBy")); 24 user.setCreationDate(rs.getTimestamp("creationDate")); 25 user.setModifyBy(rs.getInt("modifyBy")); 26 user.setModifyDate(rs.getTimestamp("modifyDate")); 27 } 28 BaseDao.closeResource(null, pstm, rs); 29 } 30 return user; 31 }
UserService.java
1 /**
2 * 用戶登錄 3 * @param userCode 4 * @param userPassword 5 * @return
6 */
7 public User login(String userCode,String userPassword);
UserServiceImpl.java
1 package cn.smbms.service.user; 2
3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.util.List; 6
7 import javax.annotation.Resource; 8
9 import org.springframework.stereotype.Service; 10 import cn.smbms.dao.BaseDao; 11 import cn.smbms.dao.user.UserDao; 12 import cn.smbms.dao.user.UserDaoImpl; 13 import cn.smbms.pojo.User; 14
15 /**
16 * service層捕獲異常,進行事務處理 17 * 事務處理:調用不同dao的多個方法,必須使用同一個connection(connection作為參數傳遞) 18 * 事務完成之后,需要在service層進行connection的關閉,在dao層關閉(PreparedStatement和ResultSet對象) 19 * @author Administrator 20 *
21 */
22 @Service 23 public class UserServiceImpl implements UserService{ 24 @Resource 25 private UserDao userDao; 26 //因為加上了注解之后,下面的這段代碼就不需要了,可以注釋掉,現在已經創建了new UserDaoImpl() 27 /*public UserServiceImpl(){ 28 userDao = new UserDaoImpl(); 29 }*/
30 @Override 31 public boolean add(User user) { 32 // TODO Auto-generated method stub 33
34 boolean flag = false; 35 Connection connection = null; 36 try { 37 connection = BaseDao.getConnection(); 38 connection.setAutoCommit(false);//開啟JDBC事務管理 39 int updateRows = userDao.add(connection,user); 40 connection.commit(); 41 if(updateRows > 0){ 42 flag = true; 43 System.out.println("add success!"); 44 }else{ 45 System.out.println("add failed!"); 46 } 47
48 } catch (Exception e) { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 try { 52 System.out.println("rollback=================="); 53 connection.rollback(); 54 } catch (SQLException e1) { 55 // TODO Auto-generated catch block 56 e1.printStackTrace(); 57 } 58 }finally{ 59 //在service層進行connection連接的關閉 60 BaseDao.closeResource(connection, null, null); 61 } 62 return flag; 63 } 64 @Override 65 public User login(String userCode, String userPassword) { 66 // TODO Auto-generated method stub 67 Connection connection = null; 68 User user = null; 69 try { 70 connection = BaseDao.getConnection(); 71 user = userDao.getLoginUser(connection, userCode); 72 } catch (Exception e) { 73 // TODO Auto-generated catch block 74 e.printStackTrace(); 75 }finally{ 76 BaseDao.closeResource(connection, null, null); 77 } 78
79 //匹配密碼 80 if(null != user){ 81 if(!user.getUserPassword().equals(userPassword)) 82 user = null; 83 } 84
85 return user; 86 } 87 @Override 88 public List<User> getUserList(String queryUserName,int queryUserRole,int currentPageNo, int pageSize) { 89 // TODO Auto-generated method stub 90 Connection connection = null; 91 List<User> userList = null; 92 System.out.println("queryUserName ---- > " + queryUserName); 93 System.out.println("queryUserRole ---- > " + queryUserRole); 94 System.out.println("currentPageNo ---- > " + currentPageNo); 95 System.out.println("pageSize ---- > " + pageSize); 96 try { 97 connection = BaseDao.getConnection(); 98 userList = userDao.getUserList(connection, queryUserName,queryUserRole,currentPageNo,pageSize); 99 } catch (Exception e) { 100 // TODO Auto-generated catch block 101 e.printStackTrace(); 102 }finally{ 103 BaseDao.closeResource(connection, null, null); 104 } 105 return userList; 106 } 107 @Override 108 public User selectUserCodeExist(String userCode) { 109 // TODO Auto-generated method stub 110 Connection connection = null; 111 User user = null; 112 try { 113 connection = BaseDao.getConnection(); 114 user = userDao.getLoginUser(connection, userCode); 115 } catch (Exception e) { 116 // TODO Auto-generated catch block 117 e.printStackTrace(); 118 }finally{ 119 BaseDao.closeResource(connection, null, null); 120 } 121 return user; 122 } 123 @Override 124 public boolean deleteUserById(Integer delId) { 125 // TODO Auto-generated method stub 126 Connection connection = null; 127 boolean flag = false; 128 try { 129 connection = BaseDao.getConnection(); 130 if(userDao.deleteUserById(connection,delId) > 0) 131 flag = true; 132 } catch (Exception e) { 133 // TODO Auto-generated catch block 134 e.printStackTrace(); 135 }finally{ 136 BaseDao.closeResource(connection, null, null); 137 } 138 return flag; 139 } 140 @Override 141 public User getUserById(String id) { 142 // TODO Auto-generated method stub 143 User user = null; 144 Connection connection = null; 145 try{ 146 connection = BaseDao.getConnection(); 147 user = userDao.getUserById(connection,id); 148 }catch (Exception e) { 149 // TODO: handle exception 150 e.printStackTrace(); 151 user = null; 152 }finally{ 153 BaseDao.closeResource(connection, null, null); 154 } 155 return user; 156 } 157 @Override 158 public boolean modify(User user) { 159 // TODO Auto-generated method stub 160 Connection connection = null; 161 boolean flag = false; 162 try { 163 connection = BaseDao.getConnection(); 164 if(userDao.modify(connection,user) > 0) 165 flag = true; 166 } catch (Exception e) { 167 // TODO Auto-generated catch block 168 e.printStackTrace(); 169 }finally{ 170 BaseDao.closeResource(connection, null, null); 171 } 172 return flag; 173 } 174 @Override 175 public boolean updatePwd(int id, String pwd) { 176 // TODO Auto-generated method stub 177 boolean flag = false; 178 Connection connection = null; 179 try{ 180 connection = BaseDao.getConnection(); 181 if(userDao.updatePwd(connection,id,pwd) > 0) 182 flag = true; 183 }catch (Exception e) { 184 // TODO: handle exception 185 e.printStackTrace(); 186 }finally{ 187 BaseDao.closeResource(connection, null, null); 188 } 189 return flag; 190 } 191 @Override 192 public int getUserCount(String queryUserName, int queryUserRole) { 193 // TODO Auto-generated method stub 194 Connection connection = null; 195 int count = 0; 196 System.out.println("queryUserName ---- > " + queryUserName); 197 System.out.println("queryUserRole ---- > " + queryUserRole); 198 try { 199 connection = BaseDao.getConnection(); 200 count = userDao.getUserCount(connection, queryUserName,queryUserRole); 201 } catch (Exception e) { 202 // TODO Auto-generated catch block 203 e.printStackTrace(); 204 }finally{ 205 BaseDao.closeResource(connection, null, null); 206 } 207 return count; 208 } 209
210 }
ConstantManager.java
1 package cn.smbms.tools; 2
3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Properties; 6
7 //讀取配置文件的工具類-單例模式 8 public class ConfigManager { 9 //創建私有的靜態變量,餓漢模式,類加載的時候,就完成初始化操作 10 private static ConfigManager configManager=new ConfigManager(); 11 private static Properties properties; 12 //私有構造器-讀取數據庫配置文件 13 private ConfigManager(){ 14 String configFile = "database.properties"; 15 properties = new Properties(); 16 InputStream is =
17 ConfigManager.class.getClassLoader().getResourceAsStream(configFile); 18 try { 19 properties.load(is); 20 is.close(); 21 } catch (IOException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 } 26 //全局訪問點 27 /*public static synchronized ConfigManager getInstance(){ 28 if(configManager == null){ 29 configManager = new ConfigManager(); 30 } 31 return configManager; 32 } 33 */
34 public static ConfigManager getInstance(){ 35 return configManager; 36 } 37
38 public String getValue(String key){ 39 return properties.getProperty(key); 40 } 41 }
Constants.java
1 package cn.smbms.tools; 2
3 public class Constants { 4 public final static String USER_SESSION = "userSession"; 5 public final static String SYS_MESSAGE = "message"; 6 public final static int pageSize = 5; 7 }
運行結果:
