工作也有半年了,工作中也有搭建过ssh环境,这里做一下总结,给以后做一个参考。
说明:本文只是搭建一个简单的ssh框架,像hibernate的一些高级特性,struts2的国际化,spring的AOP这里不做讨论
准备工作:
1、Java环境、Eclipse。
2、使用tomcat7.0。
3、ssh需要的jar包。
搭建完成的结构图:
不多说了,下面开始。
第一步:Eclipse创建一个Dynamic Web project工程,名字随自己喜欢,这里我用s2sh2.0。
第二步:将jar包复制到lib目录下,并在WEB-INF下创建web.xml文件。
1.编写web.xml文件
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/META-INF/spring/applicationContext-*.xml,</param-value>
</context-param>
<!-- 监听Spring容器的创建(读取Spring配置文件的位置) -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 中文乱码过滤器,这里使用tomcat提供的过滤器 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2前端控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
第三步:编写配置文件
新建两个源文件夹,src/java/main(用来存在Java源文件)和src/java/resource(用来存在配置文件),可能需要删除新建工程时产生的src源文件夹或者rename一下。
然后:工程右键-->source folder-->输入名称src/java/main,工程右键-->source folder-->输入名称src/java/resource,并在其下面创建META-INF(名字可以随意取)目录。
1、struts2配置文件
在src/java/resource创建struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd"> -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"struts-2.1.dtd"><!-- 这里我吧struts的dtd去出来放到src/java/resource目录下,struts-2.1.dtd可以在strutsjar下找到 -->
<struts>
<package name="user" extends="struts-default">
<action name="userList" class="com.action.UserListAction">
<result name="success">userList.jsp</result>
<!-- <param name="pageSize">5</param> -->
</action>
<action name="userRegist" class="com.action.UserRegistAction">
<result name="success">login.jsp</result>
<result name="fail">regist.jsp</result>
</action>
<action name="userLogin" class="com.action.UserLoginAction">
<result name="success" type="redirectAction">userList</result>
<result name="fail">login.jsp?error='no'</result>
</action>
<action name="*_*_*" class="com.action.{1}Action" method="{2}">
<result name="success">/{3}.jsp</result>
</action>
</package>
</struts>
2.hibernate映射文件
在src/java/resource/META-INF目录下创建hibernate文件夹,用来存在hibernate映射文件
编写User.hbm.xml,创建SQL的文件我找不到了,只是几个字段而已,可以自己创建,本文使用的是MySQL数据库。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.modul.User" table="db_user">
<id name="id" column="id" type="integer">
<generator class="increment"></generator>
</id>
<property name="email" column="email" type="string"></property>
<property name="nickName" column="nickName" type="string"></property>
<property name="password" column="password" type="string"></property>
<property name="age" column="age" type="integer"></property>
<property name="lastLogin" column="lastLogin" type="date"></property>
</class>
</hibernate-mapping>
3.spring配置文件
在src/java/resource/META-INF目录下创建spring文件夹,用来存在spring文件。
在spring文件创建下面的配置文件!
创建applicationContext-hibernate.xml文件,这里主要关注连接池配置和映射文件配置,其他可以不管:
<?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:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
">
<!-- 连接池配置 -->
<bean id="mysql_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${hibernate.connection.mysql_driver_class}</value>
</property>
<property name="url">
<value>${hibernate.connection.mysql_url}</value>
</property>
<property name="username">
<value>${hibernate.connection.mysql_username}</value>
</property>
<property name="password">
<value>${hibernate.connection.mysql_password}</value>
</property>
<!-- 连接池自身属性配置 -->
<property name="maxActive" value="10"/>
<property name="initialSize" value="2"/>
<property name="minIdle" value="2"/>
<property name="maxIdle" value="3"></property>
</bean>
<bean id="oracle_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<!-- ${hibernate.connection.mysql_driver_class}是从jdbc.properties读取的,稍后给出 -->
<value>${hibernate.connection.oracle_driver_class}</value>
</property>
<property name="url">
<value>${hibernate.connection.oracle_url}</value>
</property>
<property name="username">
<value>${hibernate.connection.oracle_username}</value>
</property>
<property name="password">
<value>${hibernate.connection.oracle_password}</value>
</property>
<!-- 连接池自身属性配置 -->
<property name="maxActive" value="10"/>
<property name="initialSize" value="2"/>
<property name="minIdle" value="2"/>
<property name="maxIdle" value="3"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="mysql_dataSource"></property>
<!-- 配置映射文件目录 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/META-INF/hibernate/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.mysql_dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
<!-- 自动建表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!--1:配置一个JdbcTemplate实例-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="mysql_dataSource" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 拦截代理对象,为了给业务逻辑对象增加事务处理 -->
<!--
transactionAttributes属性可以设置事务处理的方式,事务隔离级别,是否只读三个属性,用逗号隔开
事务隔离级别各数据库系统不完全支持,一般不设置,用默认的即可 事务处理选项有如下几个:(前面2个常用)
PROPAGATION_REQUIRED - 需要事务处理。如果当前不存在事务环境,则创建一个 PROPAGATION_SUPPORTS -
如果当前存在事务环境,则作为其中的一部分。如果不存在,则按非事务方式执行 PROPAGATION_REQUIRES_NEW -
需要事务处理。并总是开启一个新事务。如果已经存在事务环境,则挂起之 PROPAGATION_MANDATORY -
执行到指定方法时,必须已经存在事务环境,否则出错 PROPAGATION_NEVER - 不支持事务操作,如果存在事务环境会出错
PROPAGATION_NOT_SUPPORTED - 不支持事务操作。如果存在事务,则挂起
-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="execute*">PROPAGATION_REQUIRED</prop>
<prop key="cast*">PROPAGATION_REQUIRES_NEW</prop>
<prop key="*">PROPAGATION_SUPPORTS</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames" value="*Service" />
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor" />
</bean>
</beans>
创建applicationContext-resources.xml,用来读取properties文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 读取properties文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/META-INF/spring/jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
</beans>
创建jdbc.properties:
hibernate.connection.mysql_driver_class=com.mysql.jdbc.Driver
hibernate.connection.mysql_url=jdbc:mysql://localhost:3306/ssh
hibernate.connection.mysql_username=root
hibernate.connection.mysql_password=123456
hibernate.connection.oracle_driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.oracle_url=jdbc:oracle:thin:@localhost:1521:orcl
hibernate.connection.oracle_username=orcl
hibernate.connection.oracle_password=123456
hibernate.mysql_dialect=org.hibernate.dialect.MySQLDialect
hibernate.oracle_dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.jdbc.batch_size=50
hibernate.jdbc.fetch_size=50
hibernate.show_sql=false
hibernate.format_sql=false
hibernate.use_sql_comments=false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true
hibernate.cache.use_second_level_cache=true
创建applicationContext-dao.xml:
<?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:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
">
<bean id="parentDao" abstract="true">
<description>
父dao Bean后面的dao bean只需要继承及此父bean即可,不需要再注入sessionFactory
</description>
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="userDAO" class="com.dao.impl.UserDAOHibImpl" parent="parentDao"/>
</beans>
创建applicationContext-service.xml:
<?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:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
">
<bean id="userService" class="com.service.impl.UserServiceImpl">
<property name="dao" ref="userDAO"></property>
</bean>
</beans>
4.其他配置文件
日志文件log4j.properties,直接放在src/main/resource目录下,这个可有可无,没的话启动tomcat会有警告,但是不影响程序。
#log4j.rootLogger=DEBUG,A1,R
log4j.rootLogger=ERROR,A1
#log4j.category.com.laoer=INFO,A1,R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D\:\\ht.log
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=debug
log4j.logger.org.hibernate.transaction=debug
### log schema export/update ###
#log4j.logger.org.hibernate.tool.hbm2ddl=warn
配置文件编写到这里就结束,下面就是Java源文件。
第四步:Java源文件,直接贴代码
目录结构:
BaseAction类:
package com.action;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
/**
* 如果需要获取request、response、session、Application等,可以让Action继承此类
* @author WF
* @since 2015-2-5 上午10:31:19
*/
public class BaseAction implements SessionAware, ServletContextAware,
ServletRequestAware, ServletResponseAware {
public ServletContext application;
public Map<String, Object> session;
public HttpServletRequest request;
public HttpServletResponse response;
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext application) {
this.application = application;
}
}
UserListAction类:
package com.action;
import java.util.List;
import com.modul.PageModul;
import com.modul.User;
import com.service.UserService;
public class UserListAction extends BaseAction{
private UserService userService;
private PageModul modul;
private List<User> users;
public String execute(){
int pageSize = 10;
int offset = 0;
if(request.getParameter("pager.offset") != null) {
offset = Integer.parseInt(request.getParameter("pager.offset"));
}
modul = userService.getModul(User.class, offset, pageSize);
users = userService.getPage(1, 100);
return "success";
}
public PageModul getModul() {
return modul;
}
public void setModul(PageModul modul) {
this.modul = modul;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
UserLoginAction类:
package com.action;
import java.util.Date;
import com.modul.User;
import com.service.UserService;
public class UserLoginAction extends BaseAction{
private UserService userService;
private User user;
public String execute(){
User loginUser = null;
try {
loginUser = userService.login(user);
} catch (Exception e) {
e.printStackTrace();
}
if(loginUser != null){
session.put("loginUser", loginUser);
loginUser.setLastLogin(new Date());
userService.update(loginUser);
return "success";
} else {
return "fail";
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
UserRegistAction:
package com.action;
import java.util.Date;
import com.modul.User;
import com.service.UserService;
public class UserRegistAction {
private UserService userService;
private User user;
public String execute(){
user.setLastLogin(new Date());
int i = userService.resist(user);
if(i == 1){
return "success";
} else {
return "fail";
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
UserDAO:
package com.dao;
import java.util.List;
import com.modul.User;
public interface UserDAO {
public User fingByEmail(String email) throws Exception;
public List<User> findAll();
public void save(User user);
public void update(User user);
public User findById(Integer id);
public int delete(Integer id);
public List<User> findAllPage(int nowPage,int pageSize);
public int count();
}
UserDAOHibImpl:
package com.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dao.UserDAO;
import com.modul.User;
public class UserDAOHibImpl extends HibernateDaoSupport implements UserDAO{
@SuppressWarnings("unchecked")
@Override
public User fingByEmail(String email) throws Exception {
User user = null;
HibernateTemplate template = this.getHibernateTemplate();
String hql = "from User where email = ?";
List<User> list = template.find(hql, new Object[]{email});
if(list.size() != 0){
user = list.get(0);
}
return user;
}
@SuppressWarnings("unchecked")
@Override
public List<User> findAll() {
HibernateTemplate template = this.getHibernateTemplate();
String hql = "from User";
List<User> users = template.find(hql);
return users;
}
@Override
public void save(User user) {
HibernateTemplate template = this.getHibernateTemplate();
template.save(user);
}
@Override
public void update(User user) {
HibernateTemplate template = this.getHibernateTemplate();
template.update(user);
}
@Override
public User findById(Integer id) {
HibernateTemplate template = this.getHibernateTemplate();
User user = (User)template.get(User.class, id);
return user;
}
@Override
public int delete(Integer id) {
HibernateTemplate template = this.getHibernateTemplate();
User user = (User)template.get(User.class, id);
int i = 0;
if(user != null){
template.delete(user);
i = 1;
}
return i;
}
@SuppressWarnings("unchecked")
@Override
public List<User> findAllPage(int nowPage,int pageSize) {
HibernateTemplate template = this.getHibernateTemplate();
final int first = (nowPage-1)*pageSize;
final int maxSize = pageSize;
List<User> users = template.executeFind(new HibernateCallback() {
List<User> list ;
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
String hql = "from User";
Query query = session.createQuery(hql);
query.setFirstResult(first);
query.setMaxResults(maxSize);
list = query.list();
return list;
}
});
return users;
}
@SuppressWarnings("unchecked")
@Override
public int count() {
String hql = "select count(*) from User";
HibernateTemplate template = this.getHibernateTemplate();
List<User> list = template.find(hql);
Object count = list.get(0);
return Integer.parseInt(count.toString());
}
}
RequestDumperFilter和SetCharacterEncodingFilter:这两个类在tomcat目录下webapps\examples\WEB-INF\classes\filters可以找到
PageModul:
package com.modul;
import java.util.List;
/**
* 分页控件Model
* @author WF
* @since 2014-7-25 下午3:31:58
*/
public class PageModul {
/**
* 记录总数
*/
private Integer total;
/**
* 记录结果集
*/
private List<Object> objects;
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public List<Object> getObjects() {
return objects;
}
public void setObjects(List<Object> objects) {
this.objects = objects;
}
}
User:
package com.modul;
import java.util.Date;
public class User {
private Integer id;
private String email;
private String nickName;
private String password;
private Integer age;
private Date lastLogin;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public User(Integer id, String email, String nickName, String password,
Integer age, Date lastLogin) {
super();
this.id = id;
this.email = email;
this.nickName = nickName;
this.password = password;
this.age = age;
this.lastLogin = lastLogin;
}
public User() {
super();
}
@Override
public String toString() {
return "User [id=" + id + ", email=" + email + ", nickName=" + nickName
+ ", password=" + password + ", age=" + age + ", lastLogin="
+ lastLogin + "]";
}
}
UserService:
package com.service;
import java.util.List;
import com.modul.PageModul;
import com.modul.User;
public interface UserService {
public User login(User user) throws Exception;
public List<User> findAll();
public int resist(User user);
public int update(User user);
public User fingById(Integer id);
public void deleteUser(String idsStr);
public User checkEmail(String email);
public int count();
public List<User> getPage(int nowPage,int pageSize);
public PageModul getModul(Class<?> clz, int offset, int pageSize);
public void test();
}
UserServiceImpl:
package com.service.impl;
import java.util.Date;
import java.util.List;
import com.dao.UserDAO;
import com.modul.PageModul;
import com.modul.User;
import com.service.UserService;
public class UserServiceImpl implements UserService{
private UserDAO dao;
public UserDAO getDao() {
return dao;
}
public void setDao(UserDAO dao) {
this.dao = dao;
}
@Override
public User login(User user) throws Exception {
User loginUser = dao.fingByEmail(user.getEmail());
if(loginUser != null){
if(loginUser.getPassword().equals(user.getPassword())){
return loginUser;
} else {
return null;
}
} else {
return null;
}
}
@Override
public List<User> findAll() {
return dao.findAll();
}
@Override
public int resist(User user) {
int i = 0;
try {
dao.save(user);
i = 1;
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
@Override
public int update(User user) {
int i = 0;
try {
dao.update(user);
i = 1;
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
@Override
public User fingById(Integer id) {
return dao.findById(id);
}
@Override
public void deleteUser(String idsStr) {
String[] ids = idsStr.split("-");
for (String id : ids) {
dao.delete(Integer.parseInt(id));
}
}
@Override
public User checkEmail(String email) {
User user = null;
try {
user = dao.fingByEmail(email);
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
@Override
public int count() {
return dao.count();
}
@Override
public List<User> getPage(int nowPage,int pageSize) {
return dao.findAllPage(nowPage, pageSize);
}
@Override
public PageModul getModul(Class<?> clz, int offset, int pageSize) {
PageModul modul = new PageModul();
// Map<String, Object> map2 = new HashMap<>();
// map2.put("password", "245");
// Map<String, Object> map = generalDao.findForPage(clz, map2, offset, pageSize);
// modul.setTotal(Integer.parseInt(map.get(GeneralDao.COUNT).toString()));
// modul.setObjects((List<Object>) map.get(GeneralDao.RESULISET));
return modul;
}
@Override
public void test() {
User entity = new User(120, "sassa@qq.com", "zhangsan", "123", 11, new Date());
dao.save(entity);
}
}
第五步:编写前台页面,这里只是简单的页面测试
login.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="userLogin.action" method="post">
email:<input name="user.email"><br>
password:<input type="password" name="user.password"><br>
<input type="submit" value="确定">
</form>
</body>
</html>
regist.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8" />
</head>
<body topMargin="10">
<form action="userRegist.action" method="post">
email:<input name="user.email"><br>
nickName:<input name="user.nickName"><br>
password:<input type="password" name="user.password"><br>
age:<input name="user.age"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
userList.jsp:这里本来有用到一个分页控件,后来为了简单删除了,不影响显示
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8" />
<style type="text/css" title="currentStyle">
@import "media/css/demo_page.css";
@import "media/css/demo_table.css";
@import "media/css/demo_table_jui.css";
</style>
<script type="text/javascript" language="javascript" src="media/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" language="javascript" src="media/js/jquery.dataTables.min.js"></script>
<style type="text/css">
.ssss{
font-size: 14px;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
$("#example").dataTable({
// "bDeferRender": false,
// "bJQueryUI": true, //开关,是否启用JQueryUI风,要开启的话,分页样式sPaginationType得为:full_numbers
// "bScrollInfinite": false,
// "sScrollY": "800px", //是否开启垂直滚动,以及指定滚动区域大小,可设值:'disabled','2000px'
// "sScrollX": "100%", //是否开启水平滚动,以及指定滚动区域大小,可设值:'disabled','2000%'
// "aoColumnDefs": [{ "bVisible": false, "aTargets": [1]}],//隐藏0列
"bPaginate": true, //开关,是否显示分页器
"bInfo": true, //开关,是否显示表格的一些信息,false不显示此句话:当前显示 1 到 10 条,共 32 条记录
"bFilter": true, //开关,是否启用客户端过滤器,是否显示搜索
"bLengthChange": true, //开关,是否显示每页显示多少的下拉框
// "iDisplayLength": 8, //每页显示8条数据
"bProcessing": true,//加载数据时显示正在加载信息
"bSort": true, //开关,是否启用各列具有按列排序的功能
"bAutoWidth": true, //自适应宽度
"sPaginationType": "two_button",//分页样式,支持两种内置方式,two_button 和 full_numbers, 默认使用 two_button。
"oLanguage": {
"sProcessing": "正在加载中......",
"sLengthMenu": "<span class='ssss'>每页显示 _MENU_ 条记录</span>",
"sZeroRecords": "对不起,查询不到相关数据!",
"sEmptyTable": "表中无数据存在!",
"sInfo": "<span class='ssss'>当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录</span>",
"sInfoFiltered": "<span class='ssss'>数据表中共为 _MAX_ 条记录</span>",
"sSearch": "<span class='ssss'>搜索:</span>",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "<span class='ssss'>上一页</span>",
"sNext": "<span class='ssss'>下一页</span>",
"sLast": "末页"
}
},
});
});
</script>
</head>
<body topMargin="10">
<c:if test="${loginUser==null}">
<c:redirect url="login.jsp"></c:redirect>
</c:if>
<div id="append_parent"></div>
<table cellpadding="0" cellspacing="0" border="1 solid red">
<tr>
<th>编号</th>
<th>昵称</th>
<th>Email</th>
<th>年龄</th>
<th>最后登陆</th>
</tr>
<c:forEach items="${modul.objects}" var="user">
<tr>
<th>${user.id}</th>
<th>${user.nickName}</th>
<th>${user.email}</th>
<th>${user.age}</th>
<th>${user.lastLogin}</th>
</tr>
</c:forEach>
</table>
<pg:pager url="userList.action" items="${modul.total}"
export="currentPageNumber=pageNumber" maxPageItems="2">
<pg:first>
<a href="${pageUrl}">首页</a>
</pg:first>
<pg:prev>
<a href="${pageUrl}">上一页</a>
</pg:prev>
<pg:pages>
<c:choose>
<c:when test="${currentPageNumber eq pageNumber}">
<font color="red">${pageNumber}</font>
</c:when>
<c:otherwise>
<a href="${pageUrl}">${pageNumber}</a>
</c:otherwise>
</c:choose>
</pg:pages>
<pg:next>
<a href="${pageUrl}">下一页</a>
</pg:next>
<pg:last>
<a href="${pageUrl}">尾页</a>
</pg:last>
</pg:pager>
<br><br>
<table cellpadding="0" cellspacing="0" border="1 solid" class="display" id="example">
<thead>
<tr>
<th>编号</th>
<th>昵称</th>
<th>Email</th>
<th>年龄</th>
<th>最后登陆</th>
</tr>
</thead>
<tbody>
<c:forEach items="${users}" var="user">
<tr class="odd gradeX">
<td>${user.id}</td>
<td>${user.nickName}</td>
<td class="center">${user.email}</td>
<td>${user.age}</td>
<td>${user.lastLogin}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
到此,所有文件编写完毕!
启动MySQL,将项目添加到tomcat,启动tomcat,在浏览器输入:http://localhost:8080/s2sh2.0/regist.jsp,输入相关信息,点击注册,成功后会跳到登录页面!
查询下数据库,数据已经插入到数据库中了,表示框架已经搭建成功: