<span ><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 定義數據源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置HibernateSessionFactory工廠 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> <!-- 自動掃描註解方式配置的hibernate類文件 --> <property name="packagesToScan"> <list> <value>com.tonly.entity</value> </list> </property> </bean> <!-- 配置Hibernate事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 配置事務傳播特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="new*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="load*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <!-- 配置參與事務的類 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.tonly.service.*.*(..))" /> <!-- 切面事務歸txAdvice處理,把上面咱們所配置的事務管理兩部分屬性整合起來 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> </aop:config> <!-- 自動加載構建JavaBean,直接使用註解的話能夠免去配置bean的麻煩,實體類能夠被自動掃描 --> <context:component-scan base-package="com.tonly" /> </beans> </span>
<span ><?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration></span>
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_teststudio
jdbc.username=root
jdbc.password=123
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.action.extension" value="action" /> <constant name="struts.i18n.encoding" value="utf-8"></constant> <constant name="struts.multipart.maxSize" value="10000000"/> <!-- 大約10M --> <package name="ebuy" namespace="/" extends="struts-default"> <action name="user_*" method="{1}" class="com.tonly.action.UserAction"> <result name="error">login.jsp</result> <result name="loginSuccess">main.jsp</result> </action> </package> </struts>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="com.tonly.entity.User"%> <% if(request.getAttribute("user") == null){//說明是用戶首次登陸,而非服務端跳轉,這時候再在cookies中進行取值操做 String userName = null; String password = null; Cookie[] cookies = request.getCookies(); for(int i=0; cookies!=null && i<cookies.length; i++){ if(cookies[i].getName().equals("user")){ userName = cookies[i].getValue().split("-")[0]; password = cookies[i].getValue().split("-")[1]; } } if(userName == null) userName = ""; if(password == null) password = ""; pageContext.setAttribute("user", new User(userName, password));//EL表達式取值範圍爲page request session application } %> <html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DQA - Test Studio</title> <link href="${pageContext.request.contextPath}/bootstrap/css/bootstrap.css" rel="stylesheet"> <link href="${pageContext.request.contextPath}/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"> <script src="${pageContext.request.contextPath}/bootstrap/js/jquery.js"></script> <script src="${pageContext.request.contextPath}/bootstrap/js/bootstrap.js"></script> <style type="text/css"> body { padding-top: 10px; padding-bottom: 40px; background-color: #D6D6D6; } .form-signin-heading { text-align: center; padding-bottom: 10; } .head{ width:100%; height:200px; } .form-signin { max-width: 390px; padding: 19px 29px 0px; margin: 0 auto 20px; background-color: #fff; border: 1px solid #e5e5e5; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -moz-box-shadow: 1 1px 2px rgba(0, 0, 0, .05); box-shadow: 0 1px 2px rgba(0, 0, 0, .05); } .form-signin .form-signin-heading,.form-signin .checkbox { margin-bottom: 10px; } .form-signin input[type="text"],.form-signin input[type="password"] { font-size: 12px; height: 13px; margin-bottom: 15px; padding: 7px 9px; width:100%; } </style> <script type="text/javascript"> function resetForm(){ $("#userName").val(""); $("#password").val(""); } function checkForm(){ var userName = $("#userName").val(); var password = $("#password").val(); if(userName == ""){ $("#error").html("Please enter username"); return false; } if(password == ""){ $("#error").html("Please enter password"); return false; } return true; } </script> </head> <body> <div id="head" class="head"> <div > <font size=6 color="#E50914"> </font> </div> <div > <hr size=12 color=#E50914 width=100%> </div> </div> <div class="container"> <form name="myForm" class="form-signin" action="user_login.action" method="post" onsubmit="return checkForm()"> <h2 class="form-signin-heading">Welcome to Test Studio</h2> <input id="userName" name="user.userName" type="text" value="${user.userName }" class="input-block-level" placeholder="Username"> <input id="password" name="user.password" type="password" value="${user.password }" class="input-block-level" placeholder="Password"> <label class="checkbox"> <input id="remember" name="remember" type="checkbox" value="remember-me">Remember me <font id="error" color="red">${error}</font> </label> <div align="center"> <button class="btn btn-default btn-primary" type="submit">Login</button> <button class="btn btn-default btn-primary" type="button" onclick="javascript:resetForm()">Reset</button> </div> <br> </form> </div> </body> </html>
package com.tonly.service.impl; import java.util.LinkedList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.tonly.dao.BaseDao; import com.tonly.entity.PageBean; import com.tonly.entity.User; import com.tonly.service.UserService; import com.tonly.util.StringUtil; @Service("userService") public class UserServiceImpl implements UserService { @Resource private BaseDao<User> baseDao; @Override public User login(User user) { List<Object> param = new LinkedList<Object>(); StringBuffer hql = new StringBuffer("from User u where u.userName = ? and u.password = ?"); if (user != null) { param.add(user.getUserName()); param.add(user.getPassword()); return baseDao.get(hql.toString(), param); }else { return null; } } }
package com.tonly.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.tonly.dao.BaseDao; import com.tonly.entity.PageBean; @Repository("baseDao") @SuppressWarnings("all") public class BaseDaoImpl<T> implements BaseDao<T> { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } @Autowired public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } private Session getCurrentSession() { return sessionFactory.getCurrentSession(); } public T get(Class<T> c, Serializable id) { return (T) this.getCurrentSession().get(c, id); } }
package com.tonly.service.impl; import java.util.LinkedList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.tonly.dao.BaseDao; import com.tonly.entity.PageBean; import com.tonly.entity.User; import com.tonly.service.UserService; import com.tonly.util.StringUtil; @Service("userService") public class UserServiceImpl implements UserService { @Resource private BaseDao<User> baseDao; @Override public User login(User user) { List<Object> param = new LinkedList<Object>(); StringBuffer hql = new StringBuffer("from User u where u.userName = ? and u.password = ?"); if (user != null) { param.add(user.getUserName()); param.add(user.getPassword()); return baseDao.get(hql.toString(), param); }else { return null; } } }
package com.tonly.action; import javax.annotation.Resource; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import com.tonly.entity.User; import com.tonly.service.UserService; @Controller public class UserAction extends ActionSupport implements ServletRequestAware{ /** * */ private static final long serialVersionUID = 1L; private HttpServletRequest request; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Resource private UserService userService; private String error; private User user; private String remember; public String getRemember() { return remember; } public void setRemember(String remember) { this.remember = remember; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getError() { return error; } public void setError(String error) { this.error = error; } public String login() throws Exception{ HttpSession session = request.getSession(); User currentUser = userService.login(user); if (currentUser == null) { request.setAttribute("user",user); error = "incorrect username or password"; return ERROR; }else { if ("remember-me".equals(remember)) { remember(currentUser, ServletActionContext.getResponse()); } session.setAttribute("currentUser", currentUser); return "loginSuccess"; } } private void remember(User user, HttpServletResponse response) throws Exception{ Cookie cookie = new Cookie("user", user.getUserName()+"-"+user.getPassword()); cookie.setMaxAge(1*60*60*24*7);//設置有效期一週 response.addCookie(cookie); } }
package com.tonly.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="t_user") public class User { private int id; private String userName; private String password; private String sex; private String email; private String mobile; private String address; private int status = 1; //普通用戶爲1,管理員爲2 public User() { super(); } public User(String userName, String password) { super(); this.userName = userName; this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } @Id @GeneratedValue(generator="_native") @GenericGenerator(name="_native",strategy="native") public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(length=20) 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; } }