SSH集成开发应用(基于注解的Demo实例详细)
为什么要用SSH框架?
在这我不做过多解释,有兴趣可以移步:使用SSH框架的意义。
第一步配置pom.xml
要注意的是struts2要使用注解必须引入注解相关依赖(不只是core):
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
View Code
第二步ssh集成配置文件
(1)applicationContext.xml
最核心的部分就是hibernate与spring的集成相关了,包括数据库连接池c3p0的配置以及事务配置(必须的)。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> location="classpath:db.properties" /> class="com.mchange.v2.c3p0.ComboPooledDataSource"> value="${db.initialPoolSize}"> value="${db.acquireIncrement}" /> value="${db.idleConnectionTestPeriod}" /> value="${db.acquireRetryAttempts}" /> value="${db.breakAfterAcquireFailure}" /> value="${db.breakAfterAcquireFailure}" /> class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> class="org.springframework.orm.hibernate5.HibernateTransactionManager"> transaction-manager="transactionManager"> read-only="true" /> read-only="true" /> read-only="true" /> read-only="true" /> pointcut="execution(* *..*Biz.*(..))" /> class="org.springframework.orm.hibernate5.HibernateTemplate"> abstract="true"> abstract="true"> abstract="true">
View Code
(2)db.properties(需要修改自己的用户名和mysql密码,以及要连接的数据库URL)
db.username=root
db.password=123456
db.driverClass=com.mysql.jdbc.Driver
db.jdbcUrl=jdbc:mysql://localhost:3306/crm?useSSL=false
db.initialPoolSize=10
db.maxPoolSize=20
db.minPoolSize=5
db.maxIdleTime=60
db.acquireIncrement=5
db.maxStatements=0
db.idleConnectionTestPeriod=60
db.acquireRetryAttempts=30
db.breakAfterAcquireFailure=true
db.testConnectionOnCheckout=false
View Code
(3)struts.xml(里面讲的很详细了)
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
View Code
(4)ehcache.xml(一个缓存框架,可选)
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/> overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="3000" memoryStoreEvictionPolicy="LRU">
View Code
(5)log4j2.xml(日志调试相关)
onMismatch="DENY" /> pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> onMismatch="DENY" /> pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> modulate="true" /> filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"> onMismatch="DENY" /> pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log"> onMismatch="DENY" /> pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> modulate="true" /> View Code 第三步编写基础代码 首先是自定义的业务BaseDao(数据查询操作): package com.zking.base.dao; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate5.HibernateCallback; import org.springframework.orm.hibernate5.HibernateTemplate; import com.zking.base.util.PageBean; public abstract class BaseDao{ @Autowired protected HibernateTemplate hibernateTemplate; /** * 设置Query的查询参数 * @param params * @param query * @return */ @SuppressWarnings("rawtypes") protected void setParamters(Map if(null==params||0==params.size()) return; Set String name=null; Object value=null; for (Entry name=entry.getKey(); value=entry.getValue(); //判断参数是否是Collection,一般用于List/Set集合参数时使用 if(value instanceof Collection) query.setParameterList(name, (Collection)value); //判断参数是否是Object[] else if(value instanceof Object[]) query.setParameterList(name, (Object[])value); else query.setParameter(name, value); } } /** * 将普通hql语句转换成查询总记录数的hql语句 * @param hql * @return */ public String countSql(String hql) { int start=hql.toUpperCase().indexOf("FROM"); return "select count(1) "+hql.substring(start); } public String getCountSql(String sql) { return "select count(1) from ("+sql+") temp"; } /** * 通用分页的原生sql查询 * @param sql 查询语句 * @param params 查询参数map * @param pageBean 分页对象 * @return */ public List Map return hibernateTemplate.execute(new HibernateCallback @SuppressWarnings({ "deprecation", "unchecked" }) @Override public List @SuppressWarnings("rawtypes") Query query=null; if(null!=pageBean&&pageBean.isPagintaion()) { String countSql=getCountSql(sql); query=session.createNativeQuery(countSql); setParamters(params, query); List pageBean.setTotal(Integer.parseInt(list.get(0).toString())); } query=session.createNativeQuery(sql); if(null!=pageBean&&pageBean.isPagintaion()) { query.setFirstResult(pageBean.getStartIndex()); query.setMaxResults(pageBean.getRows()); } setParamters(params, query); query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP); return query.list(); } }); } /** * 查询(支持分页) * @param hql 普通hql语句 * @param params 请求参数 * @param pageBean 分页对象 * @return */ @SuppressWarnings("rawtypes") public List executeQuery(String hql,Map return hibernateTemplate.execute(new HibernateCallback @Override public List doInHibernate(Session session) throws HibernateException { Query query=null; //1.根据满足条件查询总记录数 if(null!=pageBean&&pageBean.isPagintaion()) { String countHql=countSql(hql); Query createQuery = session.createQuery(countHql); setParamters(params, createQuery); List list = createQuery.list(); pageBean.setTotal(Integer.parseInt(list.get(0).toString())); } query=session.createQuery(hql); //2.根据满足条件查询分页记录 if(null!=pageBean&&pageBean.isPagintaion()) { query.setFirstResult(pageBean.getStartIndex()); query.setMaxResults(pageBean.getRows()); } setParamters(params, query); System.out.println(query.getQueryString()); return query.list(); } }); } } View Code BaseAction(操作servlet): package com.zking.base.action; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import com.fasterxml.jackson.databind.ObjectMapper; public abstract class BaseAction implements ServletRequestAware, ServletResponseAware { protected HttpServletRequest request; protected HttpServletResponse response; protected HttpSession session; protected ServletContext application; //响应json private ObjectMapper mapper=new ObjectMapper(); @Override public void setServletResponse(HttpServletResponse response) { this.response=response; // 设置浏览器字符集编码. this.response.setContentType("application/json;charset=UTF-8"); // 设置response的缓冲区的编码. this.response.setCharacterEncoding("UTF-8"); } @Override public void setServletRequest(HttpServletRequest request) { this.request=request; this.session=request.getSession(); this.application=request.getServletContext(); } /** * 响应更新数据消息 * @param msg * @param success */ public void toJSONMessage(String msg,boolean success){ try { Map json.put("msg", msg); json.put("success", success); mapper.writeValue(response.getOutputStream(), json); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 分页查询数据 * @param msg 消息 * @param success 成功标记 * @param total 总记录数 * @param data 数据 */ public void toJSONPager(String msg,boolean success, int total,Object data){ try { Map json.put("msg", msg); json.put("success", success); json.put("total", total); json.put("rows", data); mapper.writeValue(response.getOutputStream(),json); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 普通数据响应 * @param success * @param data * @param msg */ public void toJSONObject(boolean success,Object data,String msg){ try { Map json.put("success", success); json.put("msg", msg); json.put("data", data); mapper.writeValue(response.getOutputStream(),json); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } View Code 第四步编写业务代码 (1)User实体类(要注意hibernate5之后的版本已经不推荐使用hibernate扩展的注解了,而是javax.persistence包下的注解): package com.zking.system.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; @Entity //表明实体 @Table(name="t_user") //连接表名 public class User implements Serializable{ /** * 序列化id */ private static final long serialVersionUID = -2631210706189779079L; @Column(name="user_id") //对应表中的列 @Id //ID主键 @GeneratedValue(generator = "myuuid") //主键生成策略 @GenericGenerator(name="myuuid",strategy="uuid")//主键为uuid时的定义方式 private String userId; @Column(name = "user_name") private String userName; @Column(name = "user_pwd") private String userPwd; @Column(name = "user_roleid") private String userRoleid; @Basic(fetch = FetchType.EAGER,optional = true)//立即加载,防止懒加载报错的方式 @Column(name = "user_flag") private Integer userFlag; @Temporal(TemporalType.TIMESTAMP) @Column(name = "user_create") private Date userCreate;//可用通过注解切换类型 @Transient private Role role;//序列化时忽略此属性 public Role getRole() { return role; } public void setRole(Role role) { this.role = role; } public Date getUserCreate() { return userCreate; } public void setUserCreate(Date userCreate) { this.userCreate = userCreate; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } public String getUserRoleid() { return userRoleid; } public void setUserRoleid(String userRoleid) { this.userRoleid = userRoleid; } public Integer getUserFlag() { return userFlag; } public void setUserFlag(Integer userFlag) { this.userFlag = userFlag; } public static long getSerialversionuid() { return serialVersionUID; } @Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + ", userRoleid=" + userRoleid + ", userFlag=" + userFlag + ", userCreate=" + userCreate + "]"; } public User() { // TODO Auto-generated constructor stub } } User (2)定义接口及实现(接口是正常的定义,注解是加在具体的实现类上的): package com.zking.system.dao; import java.util.List; import java.util.Map; import com.zking.base.util.PageBean; import com.zking.system.entity.User; public interface IUserDao { /** * 根据条件分页查询用户列表 * * @param User 用户信息 * @return 用户信息集合信息 */ public List /** * 查询所有的角色为客户经理的用户 * @return */ List /** * 通过用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ public User selectUserByUserName(String userName); /** * 通过用户ID查询用户 * * @param userId 用户ID * @return 用户对象信息 */ public User selectUserById(String userId); /** * 新增用户信息 * * @param user 用户信息 * @return 结果 */ public int addUser(User user); /** * 更新用户状态 * @param user */ void updateUserState(User user); /** * 修改用户信息 * * @param user 用户信息 * @return 结果 */ public int updateUser(User user); /** * 修改用户头像 * * @param userName 用户名 * @param avatar 头像地址 * @return 结果 */ public int updateUserAvatar(String userName, String avatar); /** * 重置用户密码 * * @param userName 用户名 * @param password 密码 * @return 结果 */ public int resetUserPwd(User user); /** * 通过用户ID删除用户 * * @param userId 用户ID * @return 结果 */ public int deleteUserById(String userId); /** * 批量删除用户信息 * * @param userIds 需要删除的用户ID * @return 结果 */ public int deleteUserByIds(String[] userIds); /** * 校验用户名称是否唯一 * * @param userName 用户名称 * @return 结果 */ public boolean checkUserNameUnique(String userName); /** * 校验手机号码是否唯一 * * @param phonenumber 手机号码 * @return 结果 */ public boolean checkPhoneUnique(String phonenumber); /** * 校验email是否唯一 * * @param email 用户邮箱 * @return 结果 */ public boolean checkEmailUnique(String email); } IuserDao package com.zking.system.dao.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.hibernate.query.Query; import org.springframework.orm.hibernate5.HibernateCallback; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; import com.zking.base.dao.BaseDao; import com.zking.base.util.PageBean; import com.zking.base.util.StringUtils; import com.zking.system.dao.IUserDao; import com.zking.system.entity.User; @Repository("userDao") //声明spring注解,与Component等价 public class UserDaoImpl extends BaseDao implements IUserDao { @Override public int addUser(User user) { int n = 0; try { super.hibernateTemplate.save(user); n = 1; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return n; } @Override public List String sql="select u.user_id userId,u.user_name userName,u.user_pwd userPwd,u.user_roleid userRoleid,u.user_flag userFlag,u.user_create userCreate,r.role_name roleName from t_user u left join t_role r on u.user_roleid=r.role_id where 1=1"; Map if(StringUtils.isNotBlank(user.getUserName())) { sql+=" and u.user_name like :username"; params.put("username", "%"+user.getUserName()+"%"); } if(user.getUserFlag()!=null&&user.getUserFlag()>-1) { sql += " and u.user_flag = :flag"; params.put("flag", user.getUserFlag()); } System.out.println(sql); return this.executeQueryMap(sql, params, pageBean); } @Override public User selectUserByUserName(String username) { System.out.println(super.hibernateTemplate); System.out.println(this.hibernateTemplate); return this.hibernateTemplate.execute(new HibernateCallback @SuppressWarnings("rawtypes") @Override public User doInHibernate(Session session) throws HibernateException { String hql = "from User where userName = :name"; Query query = session.createQuery(hql); query.setParameter("name", username); return (User) query.list().get(0); } }); } /** * 重置密码操作 */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public int resetUserPwd(User user) { // TODO Auto-generated method stub int n = 0; try { super.hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { // TODO Auto-generated method stub String sql = "update t_user set user_pwd = :pwd where user_name = :uname"; NativeQuery query = session.createNativeQuery(sql); query.setParameter("pwd", user.getUserPwd()); query.setParameter("uname", user.getUserName()); return query.executeUpdate(); } }); n = 1; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return n; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void updateUserState(User user) { // TODO Auto-generated method stub Object execute = super.hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { // TODO Auto-generated method stub String sql = "update t_user set user_flag = :flag where user_id = :uid"; NativeQuery query = session.createNativeQuery(sql); query.setParameter("flag", user.getUserFlag()); query.setParameter("uid", user.getUserId()); return query.executeUpdate(); } }); System.out.println("用户状态更新结果:"+execute); } @Override public List // TODO Auto-generated method stub String sql = "select ur.user_id userId,ur.user_name userName from t_user ur left join t_role ro on ur.user_roleid = ro.role_id where ro.role_name = '客户经理' and ur.user_flag = 1"; return super.executeQueryMap(sql, null, null); } @Override public User selectUserById(String userId) { // TODO Auto-generated method stub return super.hibernateTemplate.execute(new HibernateCallback @Override public User doInHibernate(Session session) throws HibernateException { // TODO Auto-generated method stub String sql = "select * from t_user where user_id = :uid"; NativeQuery query.setParameter("uid", userId); return query.list().get(0); } }); } @Override public int updateUser(User user) { // TODO Auto-generated method stub int n = 0; try { User u = super.hibernateTemplate.get(User.class,user.getUserId()); if(null!=u) { u.setUserName(user.getUserName()); u.setUserRoleid(user.getUserRoleid()); u.setUserFlag(user.getUserFlag()); super.hibernateTemplate.update(u); n = 1; } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return n; } @Override public int updateUserAvatar(String userName, String avatar) { // TODO Auto-generated method stub return 0; } @Override public int deleteUserById(String userId) { int n = 0; User u = super.hibernateTemplate.get(User.class, userId); if(u!=null) { super.hibernateTemplate.delete(u); n = 1; } return n; } @Override public int deleteUserByIds(String[] userIds) { int n = 0; try { List list.forEach(obj ->{ deleteUserById(obj); }); n = 1; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return n; } @SuppressWarnings("rawtypes") @Override public boolean checkUserNameUnique(String userName) { // TODO Auto-generated method stub String sql = "select user_name from t_user where user_name = :username"; List list = super.hibernateTemplate.execute(new HibernateCallback @Override public List doInHibernate(Session session) throws HibernateException { // TODO Auto-generated method stub NativeQuery query = session.createNativeQuery(sql); query.setParameter("username", userName); return query.list(); } }); return list!=null&&list.size()>0?true:false;//true可以插入,false不行 } @Override public boolean checkPhoneUnique(String phonenumber) { // TODO Auto-generated method stub return false; } @Override public boolean checkEmailUnique(String email) { // TODO Auto-generated method stub return false; } } UserDaoImpl (3)定义逻辑层(Biz或Service): package com.zking.system.biz; import java.util.List; import java.util.Map; import com.zking.base.util.PageBean; import com.zking.system.entity.User; public interface IUserBiz { /** * 根据条件分页查询用户列表 * * @param User 用户信息 * @return 用户信息集合信息 */ public List /** * 查询所有的角色为客户经理的用户 * @return */ List /** * 通过用户名查询用户 * * @param userName 用户名 * @return 用户对象信息 */ public User selectUserByUserName(String userName); /** * 通过用户ID查询用户 * * @param userId 用户ID * @return 用户对象信息 */ public User selectUserById(String userId); /** * 新增用户信息 * * @param user 用户信息 * @return 结果 */ public int addUser(User user); /** * 更新用户状态 * @param user */ void updateUserState(User user); /** * 修改用户信息 * * @param user 用户信息 * @return 结果 */ public int updateUser(User user); /** * 修改用户头像 * * @param userName 用户名 * @param avatar 头像地址 * @return 结果 */ public int updateUserAvatar(String userName, String avatar); /** * 重置用户密码 * * @param userName 用户名 * @param password 密码 * @return 结果 */ public int resetUserPwd(User user); /** * 通过用户ID删除用户 * * @param userId 用户ID * @return 结果 */ public int deleteUserById(String userId); /** * 批量删除用户信息 * * @param userIds 需要删除的用户ID * @return 结果 */ public int deleteUserByIds(String[] userIds); /** * 校验用户名称是否唯一 * * @param userName 用户名称 * @return 结果 */ public boolean checkUserNameUnique(String userName); /** * 校验手机号码是否唯一 * * @param phonenumber 手机号码 * @return 结果 */ public boolean checkPhoneUnique(String phonenumber); /** * 校验email是否唯一 * * @param email 用户邮箱 * @return 结果 */ public boolean checkEmailUnique(String email); } IuserBiz package com.zking.system.biz.impl; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zking.base.util.PageBean; import com.zking.system.biz.IUserBiz; import com.zking.system.dao.IRoleDao; import com.zking.system.dao.IUserDao; import com.zking.system.entity.User; @SuppressWarnings("all") @Service("userBiz") //等价与Component注解,名字必须唯一 public class UserBizImpl implements IUserBiz { @Autowired private IUserDao userDao;//自动装配依赖 @Override public List // TODO Auto-generated method stub return userDao.selectUserList(user, pg); } @Override public List // TODO Auto-generated method stub return userDao.queryCustomerManagerUser(); } @Override public User selectUserByUserName(String userName) { // TODO Auto-generated method stub return userDao.selectUserByUserName(userName); } @Override public User selectUserById(String userId) { // TODO Auto-generated method stub return userDao.selectUserById(userId); } @Override public int addUser(User user) { // TODO Auto-generated method stub int n = userDao.addUser(user);//新增用户 return n; } @Override public void updateUserState(User user) { // TODO Auto-generated method stub userDao.updateUserState(user); } @Override public int updateUser(User user) { // TODO Auto-generated method stub return userDao.updateUser(user); } @Override public int updateUserAvatar(String userName, String avatar) { // TODO Auto-generated method stub return 0; } @Override public int resetUserPwd(User user) { // TODO Auto-generated method stub return userDao.resetUserPwd(user); } @Override public int deleteUserById(String userId) { // TODO Auto-generated method stub return userDao.deleteUserById(userId); } @Override public int deleteUserByIds(String[] userIds) { // TODO Auto-generated method stub return userDao.deleteUserByIds(userIds); } @Override public boolean checkUserNameUnique(String userName) { // TODO Auto-generated method stub return userDao.checkUserNameUnique(userName); } @Override public boolean checkPhoneUnique(String phonenumber) { // TODO Auto-generated method stub return false; } @Override public boolean checkEmailUnique(String email) { // TODO Auto-generated method stub return false; } } IuserBizImpl (4)定义控制层(Controller),注意命名空间的限制百度有很多,这里不做过多解释: package com.zking.system.action; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ModelDriven; import com.zking.base.action.BaseAction; import com.zking.base.entity.StrEnum; import com.zking.base.jwt.JwtUtils; import com.zking.base.util.MD5; import com.zking.base.util.PageBean; import com.zking.system.biz.IUserBiz; import com.zking.system.entity.User; @Controller("userAction") @Scope("prototype") //多例的 @Namespace("/") public class UserAction extends BaseAction implements ModelDriven private static final Integer MODULE_ID = 1501; private User user = new User(); @Autowired private IUserBiz userBiz; @Override public User getModel() { // TODO Auto-generated method stub return user; } /** * 用户登录的方法 * @return */ @Action(value="userAction_userLogin") public String userLogin() { User u = userBiz.selectUserByUserName(user.getUserName()); try { String msg = ""; boolean f = false; if(null==u) { msg = "用户名不存在,登录失败!"; }else if(u.getUserPwd().equals(new MD5().getMD5ofStr(user.getUserPwd()))) { //生成令牌 Map json.put("userName",user.getUserName()); json.put("userId", user.getUserId()); json.put("roleId", user.getUserRoleid()); json.put("loginTime", System.currentTimeMillis()); String jwt=JwtUtils.createJwt(json, JwtUtils.JWT_WEB_TTL); response.setHeader(JwtUtils.JWT_HEADER_KEY, jwt); msg = "用户登录成功"; f = true; }else { msg = "用户密码错误,登录失败!"; } super.toJSONObject(f, u,msg); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); super.toJSONMessage("系统错误,请重新登陆", false); } return null; } /** * 添加用户 * @return */ @Action(value="userAction_addUser") public String addUser() { //jwt令牌校验,并且获取当前登录对象 User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); try { if(null==u) { super.toJSONMessage("添加用户失败", false); throw new RuntimeException("用户未登录!"); } user.setUserId(UUID.randomUUID().toString().replace("-", "")); user.setUserPwd(new MD5().getMD5ofStr(user.getUserPwd())); userBiz.addUser(user); super.toJSONMessage("添加用户成功",true); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONMessage("添加用户失败", false); e.printStackTrace(); } return null; } /** * 删除用户 * @return */ @Action(value="userAction_delUser") public String delUser() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); boolean f= false; String str = "删除用户失败"; try { int n = userBiz.deleteUserById(user.getUserId()); if(n>0) { f = true; str = "删除用户成功!"; } super.toJSONMessage(str,f); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONMessage(str, f); e.printStackTrace(); } return null; } /** * 编辑用户 * @return */ @Action(value="userAction_editUser") public String editUser() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); boolean f= false; String str = StrEnum.EDIT.getName()+"用户失败"; try { int n = userBiz.deleteUserById(user.getUserId()); if(n>0) { f = true; str.replaceAll("失败", "成功"); } super.toJSONMessage(str,f); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONMessage(str, f); e.printStackTrace(); } return null; } /** * 分页查询用户 * @return */ @Action(value="userAction_queryUserPager") public String queryUserPager() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); try { PageBean pg = new PageBean(); pg.setRequest(request); List super.toJSONPager("分页查询用户成功", true, pg.getTotal(), list); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONPager("分页查询用户失败", false, 0, null); e.printStackTrace(); } return null; } /** * 重置用户密码 * @return */ @Action(value="userAction_resetUserPwd") public String resetUserPwd() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); try { if(null==u) { super.toJSONMessage("重置密码失败", false); throw new RuntimeException("用户未登录!"); } userBiz.resetUserPwd(user); super.toJSONMessage("重置用户密码成功",true); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONMessage("重置用户密码失败", false); e.printStackTrace(); } return null; } /** * 重置用户状态 * @return */ @Action(value="userAction_updateUserState") public String updateUserState() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); try { if("admin".equals(u.getUserName())) { userBiz.updateUserState(user); super.toJSONMessage("更新用户状态成功",true); } } catch (Exception e) { // TODO Auto-generated catch block super.toJSONMessage("更新用户状态失败", false); e.printStackTrace(); } return null; } /** * 查询所有的客户经理并且状态正常 * @return */ @Action(value="userAction_queryCustomerManagerUser") public String queryCustomerManagerUser() { User u = JwtUtils.getUser(response.getHeader(JwtUtils.JWT_HEADER_KEY)); String str = StrEnum.SELECT.getName()+"所有的状态正常的客户经理数据"; try { if(null==u) { super.toJSONMessage(str+"失败", false); throw new RuntimeException("用户未登录!"); } List super.toJSONObject(true, list, str+"成功!"); } catch (Exception e) { // TODO Auto-generated catch block super.toJSONObject(false, null, str+"失败!"); e.printStackTrace(); } return null; } } ; UserAction 第五步配置web.xml文件 xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> org.springframework.web.util.IntrospectorCleanupListener org.springframework.web.context.request.RequestContextListener 第六步启动tomcat浏览器访问 服务器启动成功应该是这样的: 然后在浏览器输入你的项目地址(注意你的端口号,我的是80,这里截图时浏览器省略了端口): 可以看到请求状态码200,成功访问。 控制台应该有hibernate的sql输出: 以上就是SSH集成(基于注解)相关的实例展示。 转载注明出处,谢谢。>>() {
() {
() {
三届世界杯连庄!海信体育营销背后的全球化布局