搭建ssh(Struts2)环境

工作也有半年了,工作中也有搭建过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,输入相关信息,点击注册,成功后会跳到登录页面!





查询下数据库,数据已经插入到数据库中了,表示框架已经搭建成功:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值