一、搭建开发环境
1、第一步:创建web项目,引入jar包
2、第二步:引入配置文件
struts2的框架:
- web.xml:配置struts2的核心过滤器
<!--Struts2的核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!--修改常量======== -->
<!-- <init-param> <param-name>struts.action.extension</param-name> <param-value>xyz</param-value>
</init-param> -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- struts.xml
spring的框架:
- jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/crm
jdbc.username=root
jdbc.password=123456
- log4j.properties
- applicationContext.xml–引入外部属性文件、配置C3P0连接池
<!--通过context标签引入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!--配置C3P0 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 属性注入(name与前面两个连接池不一样了) -->
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
- web.xml:配置spring的核心监听器
<!--Spring的核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--加载Spring的配置文件的路径,默认加载的/WEB_INF/applicationContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
hibernate的框架:
- hibernate.cfg.xml --交给spring管理
3、第三步:创建相关包结构
4、第四步:引入相关页面
5、第五步:创建相关的类
第六步:将相关的类配置到Spring中
<!--配置Action -->
<bean id="userAction" class="crm.web.action.UserAction" scope="prototype">
</bean>
<!--配置Service -->
<bean id="userService" class="crm.service.impl.UserServiceImpl">
</bean>
<!--配置DAO -->
<bean id="userDao" class="crm.dao.impl.UserDaoImpl">
</bean>
二、用户模块-用户注册代码实现
1、提供一个注册页面
2、创建表和实体
CREATE TABLE `sys_user` (
`user_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`user_code` VARCHAR(32) NOT NULL COMMENT '用户账号',
`user_name` VARCHAR(64) NOT NULL COMMENT '用户名称',
`user_password` VARCHAR(32) NOT NULL COMMENT '用户密码',
`user_state` CHAR(1) NOT NULL COMMENT '1:正常,0:暂停',
PRIMARY KEY (`user_id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
3、创建映射
<?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="crm.domain.User" table="sys_user">
<!--建立类中属性与表中的主键对应 -->
<id name="user_id" column="user_id">
<generator class="native"></generator>
</id>
<!--建立类中的普通属性与表中的字段对应,非主键用property -->
<property name="user_code" column="user_code"></property>
<property name="user_name" column="user_name"></property>
<property name="user_password" column="user_password"></property>
<property name="user_state" column="user_state"></property>
</class>
</hibernate-mapping>
4、编写Action
编写regist的方法
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
@Override
public User getModel() {
return user;
}
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 用户注册的方法:regist
*
* @return
*/
public String regist() {
// 修正:用户名或密码不能为空;密码至少是6位且不低于12位
userService.regist(user);
return LOGIN;
}
}
在Action中注入Service
配置Action的访问
编写Service
/**
* 用户业务层接口
*
* @author Administrator
*
*/
public interface UserService {
void regist(User user);
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
// 业务层注册用户的方法
public void regist(User user) {
// 对密码进行加密处理
String password = MD5Utils.md5(user.getUser_password());
user.setUser_password(password);
user.setUser_state("1");
// 调用DAO
userDao.save(user);
}
}
MD5加密算法
public class MD5Utils {
/**
* 使用md5的算法进行加密
*/
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
在Service中注入UserDao
编写DAO
- 整合Hibernate
<!--配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!--注入连接池 -->
<property name="dataSource" ref="dataSource"></property>
<!--配置Hibernate的相关属性 -->
<property name="hibernateProperties">
<props>
<!-- 配置Hibernate的方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 打印SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 格式化SQL -->
<prop key="hibernate.format_sql">true</prop>
<!-- 自动创建表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!--引入映射文件 -->
<property name="mappingResources">
<list>
<value>crm/domain/User.hbm.xml</value>
</list>
</property>
</bean>
- 在DAO中继承HibernateDaoSupport类
/**
* 用户实体的DAO接口
*
* @author Administrator
*
*/
public interface UserDao {
void save(User user);
}
/**
* 用户实体的DAO实现类
*
* @author Administrator
*
*/
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
@Override
// DAO中保存用户的方法
public void save(User user) {
this.getHibernateTemplate().save(user);
}
}
- 在DAO中注入sessionFactory
5、配置Spring的事务管理
配置事务管理器
开启注解事务
在业务层添加事务注解
三、用户模块-用户登录代码实现
1、修改登录页面
2、编写Action中的login方法
/**
* 用户登录的方法:login
*
* @return
*/
public String login() {
// 调用业务层查询用户
User existUser = userService.login(user);
if (existUser == null) {
// 登录失败
// 添加错误信息:
this.addActionError("用户名或者密码错误!");
return LOGIN;
} else {
// 登录成功
// ServletActionContext.getRequest().getSession().setAttribute("existUser",existUser);
ActionContext.getContext().getSession().put("existUser", existUser);
return SUCCESS;
}
}
3、编写Service
@Override
//业务层用户登录的方法
public User login(User user) {
String password=MD5Utils.md5(user.getUser_password());
user.setUser_password(password);
user.setUser_state("1");
//调用DAO
return userDao.login(user);
}
4、编写DAO
@Override
// DAO中根据用户名和密码进行查询的方法
public User login(User user) {
List<User> list = (List<User>) this.getHibernateTemplate()
.find("from User where user_code=? and user_password=?",
user.getUser_code(), user.getUser_password());
// 判断一下
if (list.size() > 0) {
return list.get(0);
}
return null;
}
5、配置页面的跳转
6、在页面中显示数据
- 在成功页面上显示用户信息
- 在失败的页面上显示错误信息