diff --git a/IoC/src/ActorArrangable.java b/IoC/src/ActorArrangable.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea347aa62c28f131cbbcb81ea3b148a7a3affb16
--- /dev/null
+++ b/IoC/src/ActorArrangable.java
@@ -0,0 +1,14 @@
+public class ActorArrangable {
+ void injectGeli(GeLi geli);
+
+}
+public class MoAttack implements ActorArrangable{
+ public GeLi geli;
+ public void injectGeli(GeLi geli){
+ this.geli = geli;
+
+ }
+ public void cityGateAsk(){
+ geli.responseAsk("墨者革离")
+ }
+}
diff --git a/IoC/src/MoAttack.java b/IoC/src/MoAttack.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffcf703db4bd4fa14aa04ffbc44bde7a73681c73
--- /dev/null
+++ b/IoC/src/MoAttack.java
@@ -0,0 +1,16 @@
+public class MoAttack {
+ private GeLi geli;
+ public MoAttack(GeLi geeli){
+ this.geli = geli;
+ }
+ public void cityGateAsk(){
+ geli.responseAsk("墨者革离!");
+ }
+}
+public class Director{
+ public void director(){
+ GEli geli =new LiuDeHua();
+ MoAttack moAttack = new MoAttack(geki);
+ moAttack.cityGateAsk();
+ }
+}
diff --git a/IoC/src/MoAttack1.java b/IoC/src/MoAttack1.java
new file mode 100644
index 0000000000000000000000000000000000000000..f700b41314b14cf4ad873523ebd0167e6f51888b
--- /dev/null
+++ b/IoC/src/MoAttack1.java
@@ -0,0 +1,18 @@
+public class MoAttack1 {
+ private GeLi;
+ public void setGeli(Geli geli){
+ this,geli = geli;
+ }
+ public void cityGateAsk(){
+ geli.responceAsk("墨者革离");
+ }
+}
+public class Director{
+ public void director(){
+ GeLi goli =new LiuDeHua();
+ MoAttack moAttack = new MoAttack();
+ moAttack.setGeli(gili);
+ moAttack.cityGateAsk();
+ }
+
+}
diff --git a/chapter1/chapter1.iml b/chapter1/chapter1.iml
new file mode 100644
index 0000000000000000000000000000000000000000..8e8594b54c7b9540fe34562d6615b9805f39075f
--- /dev/null
+++ b/chapter1/chapter1.iml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/chapter1/src/main/java/com/smart/dao/LoginLogDao.java b/chapter1/src/main/java/com/smart/dao/LoginLogDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..d276058362405f42727d2001393e112a6d42bb50
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/dao/LoginLogDao.java
@@ -0,0 +1,21 @@
+package com.smart.dao;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Repository;
+
+import com.smart.domain.LoginLog;
+
+@Repository
+public class LoginLogDao {
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ public void insertLoginLog(LoginLog loginLog) {
+ String sqlStr = "INSERT INTO t_login_log(user_id,ip,login_datetime) "
+ + "VALUES(?,?,?)";
+ Object[] args = {loginLog.getUserId(), loginLog.getIp(),
+ loginLog.getLoginDate()};
+ jdbcTemplate.update(sqlStr, args);
+ }
+}
\ No newline at end of file
diff --git a/chapter1/src/main/java/com/smart/dao/UserDao.java b/chapter1/src/main/java/com/smart/dao/UserDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e36bb8d33ac9d2b09fb2e453630a2458fe3a03d
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/dao/UserDao.java
@@ -0,0 +1,46 @@
+package com.smart.dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowCallbackHandler;
+import org.springframework.stereotype.Repository;
+
+import com.smart.domain.User;
+
+@Repository
+public class UserDao {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+
+ public int getMatchCount(String userName, String password) {
+ String sqlStr = " SELECT count(*) FROM t_user "
+ + " WHERE user_name =? and password=? ";
+ return jdbcTemplate.queryForInt(sqlStr, new Object[]{userName, password});
+ }
+
+ public User findUserByUserName(final String userName) {
+ String sqlStr = " SELECT user_id,user_name "
+ + " FROM t_user WHERE user_name =? ";
+ final User user = new User();
+ jdbcTemplate.query(sqlStr, new Object[]{userName},
+ new RowCallbackHandler() {
+ public void processRow(ResultSet rs) throws SQLException {
+ user.setUserId(rs.getInt("user_id"));
+ user.setUserName(userName);
+ }
+ });
+ return user;
+ }
+
+ public void updateLoginInfo(User user) {
+ String sqlStr = " UPDATE t_user SET last_visit=?,last_ip=?"
+ + " WHERE user_id =?";
+ jdbcTemplate.update(sqlStr, new Object[]{user.getLastVisit(),
+ user.getLastIp(), user.getUserId()});
+ }
+}
diff --git a/chapter1/src/main/java/com/smart/domain/LoginLog.java b/chapter1/src/main/java/com/smart/domain/LoginLog.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c89fcb9929cd4da3490d3af66a8f9e9ae787134
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/domain/LoginLog.java
@@ -0,0 +1,47 @@
+package com.smart.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class LoginLog implements Serializable {
+ private int loginLogId;
+
+ private int userId;
+
+ private String ip;
+
+ private Date loginDate;
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public Date getLoginDate() {
+ return loginDate;
+ }
+
+ public void setLoginDate(Date loginDate) {
+ this.loginDate = loginDate;
+ }
+
+ public int getLoginLogId() {
+ return loginLogId;
+ }
+
+ public void setLoginLogId(int loginLogId) {
+ this.loginLogId = loginLogId;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+}
diff --git a/chapter1/src/main/java/com/smart/domain/User.java b/chapter1/src/main/java/com/smart/domain/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..61eb641e08c27bcab1f4b3c5a42d0bdcfac775e1
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/domain/User.java
@@ -0,0 +1,57 @@
+package com.smart.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class User implements Serializable {
+ private int userId;
+
+ private String userName;
+
+ private String password;
+
+ private String lastIp;
+
+ private Date lastVisit;
+
+ public String getLastIp() {
+ return lastIp;
+ }
+
+ public void setLastIp(String lastIp) {
+ this.lastIp = lastIp;
+ }
+
+ public Date getLastVisit() {
+ return lastVisit;
+ }
+
+ public void setLastVisit(Date lastVisit) {
+ this.lastVisit = lastVisit;
+ }
+
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ 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;
+ }
+
+}
diff --git a/chapter1/src/main/java/com/smart/service/UserService.java b/chapter1/src/main/java/com/smart/service/UserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..28abe85cb375a217b296df86dec7cd7360de72a1
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/service/UserService.java
@@ -0,0 +1,37 @@
+package com.smart.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.smart.dao.LoginLogDao;
+import com.smart.dao.UserDao;
+import com.smart.domain.LoginLog;
+import com.smart.domain.User;
+
+@Service
+public class UserService {
+
+ @Autowired
+ private UserDao userDao;
+
+ @Autowired
+ private LoginLogDao loginLogDao;
+
+ public boolean hasMatchUser(String userName, String password) {
+ int matchCount = userDao.getMatchCount(userName, password);
+ return matchCount > 0;
+ }
+
+ public User findUserByUserName(String userName) {
+ return userDao.findUserByUserName(userName);
+ }
+
+ public void loginSuccess(User user) {
+ LoginLog loginLog = new LoginLog();
+ loginLog.setUserId(user.getUserId());
+ loginLog.setIp(user.getLastIp());
+ loginLog.setLoginDate(user.getLastVisit());
+ loginLogDao.insertLoginLog(loginLog);
+ }
+
+}
diff --git a/chapter1/src/main/java/com/smart/web/LoginCommand.java b/chapter1/src/main/java/com/smart/web/LoginCommand.java
new file mode 100644
index 0000000000000000000000000000000000000000..eda36557f52924e4cfbdb73faa4ada20de5a2ea9
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/web/LoginCommand.java
@@ -0,0 +1,24 @@
+package com.smart.web;
+
+public class LoginCommand {
+
+ private String userName;
+
+ private String password;
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+}
diff --git a/chapter1/src/main/java/com/smart/web/LoginController.java b/chapter1/src/main/java/com/smart/web/LoginController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d147de2ddda1da9d738ad3ad17125651aac046c8
--- /dev/null
+++ b/chapter1/src/main/java/com/smart/web/LoginController.java
@@ -0,0 +1,45 @@
+package com.smart.web;
+
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.smart.domain.User;
+import com.smart.service.UserService;
+
+@Controller
+@RequestMapping(value = "/admin")
+public class LoginController {
+
+ @Autowired
+ private UserService userService;
+
+ @RequestMapping(value = "/login.html")
+ public String loginPage() {
+ return "login";
+ }
+
+ @RequestMapping(value = "/loginCheck.html")
+ public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) {
+ boolean isValidUser =
+ userService.hasMatchUser(loginCommand.getUserName(),
+ loginCommand.getPassword());
+ if (!isValidUser) {
+ return new ModelAndView("login", "error", "用户名或密码错误。");
+ } else {
+ User user = userService.findUserByUserName(loginCommand
+ .getUserName());
+ user.setLastIp(request.getLocalAddr());
+ user.setLastVisit(new Date());
+ userService.loginSuccess(user);
+ request.getSession().setAttribute("user", user);
+ return new ModelAndView("main");
+ }
+ }
+}
diff --git a/chapter1/src/main/webapp/WEB-INF/jsp/main.jsp b/chapter1/src/main/webapp/WEB-INF/jsp/main.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..3233e23e7826671b70e79f7da0082faca59c2325
--- /dev/null
+++ b/chapter1/src/main/webapp/WEB-INF/jsp/main.jsp
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
+
+
+
+ 景区网站管理
+
+
+${user.userName},欢迎您进入景区网站后台管理!
+
+
\ No newline at end of file
diff --git a/chapter1/src/main/webapp/WEB-INF/web.xml b/chapter1/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eca96aed6fb3eeb7c876376d6b1ffa44a633e08d
--- /dev/null
+++ b/chapter1/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,29 @@
+
+
+
+ contextConfigLocation
+ classpath:applicationContext.xml
+
+
+
+ org.springframework.web.context.ContextLoaderListener
+
+
+
+
+ viewspace
+
+ org.springframework.web.servlet.DispatcherServlet
+
+ 3
+
+
+
+ viewspace
+ *.html
+
+