MailUitls.javahtml
package cn.itcast.shop.utils;java
import java.util.Properties;spring
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;數據庫
/**
* 郵件發送工具類
*
*/
public class MailUitls {
/**
* 發送郵件的方法
* @param to :收件人
* @param code :激活碼
*/
public static void sendMail(String to,String code){
/**
* 1.得到一個Session對象.
* 2.建立一個表明郵件的對象Message.
* 3.發送郵件Transport
*/
// 1.得到鏈接對象
Properties props = new Properties();
props.setProperty("mail.host", "localhost");
Session session = Session.getInstance(props, new Authenticator() {apache
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("service@shop.com", "111");
}
});
// 2.建立郵件對象:
Message message = new MimeMessage(session);
// 設置發件人:
try {
message.setFrom(new InternetAddress("service@shop.com"));
// 設置收件人:
message.addRecipient(RecipientType.TO, new InternetAddress(to));
// 抄送 CC 密送BCC
// 設置標題
message.setSubject("來自購物天堂傳智商城官方激活郵件");
// 設置郵件正文:
message.setContent("<h1>購物天堂傳智商城官方激活郵件!點下面連接完成激活操做!</h1><h3><a href='http://192.168.36.103:8080/shop/user_active.action?code="+code+"'>http://192.168.36.103:8080/shop/user_active.action?code="+code+"</a></h3>", "text/html;charset=UTF-8");
// 3.發送郵件:
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
//測試
public static void main(String[] args) {
sendMail("aaa@shop.com","11111111111111");
}
}session
二、UserService.javaapp
package cn.itcast.shop.user.service;異步
import java.util.List;ide
import org.springframework.transaction.annotation.Transactional;工具
import cn.itcast.shop.order.vo.Order;
import cn.itcast.shop.user.dao.UserDao;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.MailUitls;
import cn.itcast.shop.utils.PageBean;
import cn.itcast.shop.utils.UUIDUtils;
/**
* 用戶名模塊業務層代碼
*
*/
@Transactional
public class UserService {
// 注入UserDao
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// 按用戶名查詢用戶的方法:
public User findByUsername(String username){
return userDao.findByUsername(username);
}
// 業務層完成用戶註冊代碼:
public void save(User user) {
// 將數據存入到數據庫
user.setState(0); // 0:表明用戶未激活. 1:表明用戶已經激活.
String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();
user.setCode(code);
userDao.save(user);
// 發送激活郵件;
MailUitls.sendMail(user.getEmail(), code);
}
// 業務層根據激活碼查詢用戶
public User findByCode(String code) {
return userDao.findByCode(code);
}
// 修改用戶的狀態的方法
public void update(User existUser) {
userDao.update(existUser);
}
// 用戶登陸的方法
public User login(User user) {
return userDao.login(user);
}
// 業務層用戶查詢全部
public PageBean<User> findByPage(Integer page) {
PageBean<User> pageBean = new PageBean<User>();
// 設置當前頁數:
pageBean.setPage(page);
// 設置每頁顯示記錄數:
// 顯示5個
int limit = 5;
pageBean.setLimit(limit);
// 設置總記錄數:
int totalCount = 0;
totalCount = userDao.findCount();
pageBean.setTotalCount(totalCount);
// 設置總頁數
int totalPage = 0;
if(totalCount % limit == 0){
totalPage = totalCount / limit;
}else{
totalPage = totalCount / limit + 1;
}
pageBean.setTotalPage(totalPage);
// 設置每頁顯示數據集合:
int begin = (page - 1)*limit;
List<User> list = userDao.findByPage(begin,limit);
pageBean.setList(list);
return pageBean;
}
public User findByUid(Integer uid) {
return userDao.findByUid(uid);
}
public void delete(User existUser) {
userDao.delete(existUser);
}
}
三、UserActon.java
package cn.itcast.shop.user.action;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import cn.itcast.shop.user.service.UserService;
import cn.itcast.shop.user.vo.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 用戶模塊Action的類
*
*
*/
public class UserAction extends ActionSupport implements ModelDriven<User> {
// 模型驅動使用的對象
private User user = new User();
public User getModel() {
return user;
}
// 接收驗證碼:
private String checkcode;
public void setCheckcode(String checkcode) {
this.checkcode = checkcode;
}
// 注入UserService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 跳轉到註冊頁面的執行方法
*/
public String registPage() {
return "registPage";
}
/**
* AJAX進行異步校驗用戶名的執行方法
*
* @throws IOException
*/
public String findByName() throws IOException {
// 調用Service進行查詢:
User existUser = userService.findByUsername(user.getUsername());
// 得到response對象,項頁面輸出:
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
// 判斷
if (existUser != null) {
// 查詢到該用戶:用戶名已經存在
response.getWriter().println("<font color='red'>用戶名已經存在</font>");
} else {
// 沒查詢到該用戶:用戶名能夠使用
response.getWriter().println("<font color='green'>用戶名能夠使用</font>");
}
return NONE;
}
/**
* 用戶註冊的方法:
*/
public String regist() {
// 判斷驗證碼程序:
// 從session中得到驗證碼的隨機值:
String checkcode1 = (String) ServletActionContext.getRequest()
.getSession().getAttribute("checkcode");
if(!checkcode.equalsIgnoreCase(checkcode1)){
this.addActionError("驗證碼輸入錯誤!");
return "checkcodeFail";
}
userService.save(user);
this.addActionMessage("註冊成功!請去郵箱激活!");
return "msg";
}
/**
* 用戶激活的方法
*/
public String active() {
// 根據激活碼查詢用戶:
User existUser = userService.findByCode(user.getCode());
// 判斷
if (existUser == null) {
// 激活碼錯誤的
this.addActionMessage("激活失敗:激活碼錯誤!");
} else {
// 激活成功
// 修改用戶的狀態
existUser.setState(1);
existUser.setCode(null);
userService.update(existUser);
this.addActionMessage("激活成功:請去登陸!");
}
return "msg";
}
/**
* 跳轉到登陸頁面
*/
public String loginPage() {
return "loginPage";
}
/**
* 登陸的方法
*/
public String login() {
User existUser = userService.login(user);
// 判斷
if (existUser == null) {
// 登陸失敗
this.addActionError("登陸失敗:用戶名或密碼錯誤或用戶未激活!");
return LOGIN;
} else {
// 登陸成功
// 將用戶的信息存入到session中
ServletActionContext.getRequest().getSession()
.setAttribute("existUser", existUser);
// 頁面跳轉
return "loginSuccess";
}
}
/**
* 用戶退出的方法
*/
public String quit(){
// 銷燬session
ServletActionContext.getRequest().getSession().invalidate();
return "quit";
}
}
四、UserDao.java
package cn.itcast.shop.user.dao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.PageHibernateCallback;
/**
* 用戶模塊持久層代碼:
*
*/
public class UserDao extends HibernateDaoSupport {
// 按名次查詢是否有該用戶:
public User findByUsername(String username) {
String hql = "from User where username = ?";
List<User> list = this.getHibernateTemplate().find(hql, username);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
// 註冊用戶存入數據庫代碼實現
public void save(User user) {
this.getHibernateTemplate().save(user);
}
// 根據激活碼查詢用戶
public User findByCode(String code) {
String hql = "from User where code = ?";
List<User> list = this.getHibernateTemplate().find(hql, code);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
// 修改用戶狀態的方法
public void update(User existUser) {
this.getHibernateTemplate().update(existUser);
}
// 用戶登陸的方法
public User login(User user) {
String hql = "from User where username = ? and password = ? and state = ?";
List<User> list = this.getHibernateTemplate().find(hql,
user.getUsername(), user.getPassword(), 1);
if (list != null && list.size() > 0) {
return list.get(0);
}
return null;
}
public int findCount() {
String hql = "select count(*) from User";
List<Long> list = this.getHibernateTemplate().find(hql);
if (list != null && list.size() > 0) {
return list.get(0).intValue();
}
return 0;
}
public List<User> findByPage(int begin, int limit) {
String hql = "from User";
List<User> list = this.getHibernateTemplate().execute(
new PageHibernateCallback<User>(hql, null, begin, limit));
return list;
}
public User findByUid(Integer uid) {
return this.getHibernateTemplate().get(User.class, uid);
}
public void delete(User existUser) {
this.getHibernateTemplate().delete(existUser);
}
}
五、User.java
package cn.itcast.shop.user.vo;
import java.util.HashSet;
import java.util.Set;
import cn.itcast.shop.order.vo.Order;
/**
* 用戶名模塊實體類:
*CREATE TABLE `user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
`addr` varchar(255) DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`code` varchar(64) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
*/
public class User {
private Integer uid;
private String username;
private String password;
private String name;
private String email;
private String phone;
private String addr;
private Integer state;
private String code;
// 一個用戶對應多個訂單:
private Set<Order> orders = new HashSet<Order>();
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
}
六、User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.shop.user.vo.User" table="user">
<id name="uid">
<generator class="native"/>
</id>
<property name="username"/>
<property name="password"/>
<property name="name"/>
<property name="email"/>
<property name="phone"/>
<property name="addr"/>
<property name="state"/>
<property name="code"/>
<set name="orders" cascade="delete">
<key column="uid"/>
<one-to-many class="cn.itcast.shop.order.vo.Order"/>
</set>
</class>
</hibernate-mapping>
七、UserAdminAction.java
package cn.itcast.shop.user.adminaction;
import cn.itcast.shop.user.service.UserService;
import cn.itcast.shop.user.vo.User;
import cn.itcast.shop.utils.PageBean;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 後臺用戶管理的Action類
*
*/
public class UserAdminAction extends ActionSupport implements ModelDriven<User>{
// 模型驅動使用的類
private User user = new User();
public User getModel() {
return user;
}
// 注入用戶的Service
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
// 接受page參數
private Integer page;
public void setPage(Integer page) {
this.page = page;
}
// 後臺查詢全部用戶的方法帶分頁: public String findAll(){ PageBean<User> pageBean = userService.findByPage(page); ActionContext.getContext().getValueStack().set("pageBean", pageBean); return "findAll"; } // 後臺用戶的刪除 public String delete(){ User existUser = userService.findByUid(user.getUid()); userService.delete(existUser); return "deleteSuccess"; } // 後臺用戶的編輯 public String edit(){ user = userService.findByUid(user.getUid()); return "editSuccess"; } // 後臺用戶的修改: public String update(){ userService.update(user); return "updateSuccess"; } }