基于SSH的个人信息管理系统

###前言:

项目源码GitHub地址:https://github.com/hlk-1135/SSH_PersonInformation

(如果喜欢,请给我点个Star,欢迎一起交流,共同进步!)


功能模块:登录,注册,个人信息管理,通讯录管理,日程安排,文件管理。
要求:
(1) 登录及注册页面要有输入校验,采取struts2的校验框架实现,即-validation.xml配置文件的形式。
(2) 通讯录的查询功能必须支持模糊查询。
注意:注册需采用模型驱动的形式。

这是老师给出的要求,其实目前的实验,一直处于Struts2的小案例,逻辑不是很复杂,功能模块单一,类似于上次的图书管理系统,如果想要完善,后续的工作量还是很大的,由于一直采用Jdbc进行数据库的操纵,在这个项目中,决定使用Spring+Struts2+Hibernate。


####功能模块:

  1. 个人用户的登录及注册,注册信息时使用js进行校验。(其中使用了拦截器,只有登录后才可以进行联系人、文件等相关操作,否则只能访问主页。)
  2. 对通讯录中联系人的增删改查,支持通过姓名或者手机号进行模糊查询。(更新:完成了好友的批量删除)
  3. 对日程安排的增删改查。(和联系人增删改查没区别,所以没实现)
  4. 对文件的管理(上传文件,并将文件信息保存到数据库中)

####一、环境搭建:
使用MyEclipsel。后端框架使用Struts2+Spring+Hibernate,前端框架使用BootStrap。
####1、数据库:
user表以及friends表的创建以及数据的插入:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `userId` int(100) NOT NULL AUTO_INCREMENT,
  `userName` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  `work` varchar(100) NOT NULL,
  `realName` varchar(100) NOT NULL,
  `phone` varchar(100) NOT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for `friends`
-- ----------------------------
DROP TABLE IF EXISTS `friends`;
CREATE TABLE `friends` (
  `friendId` int(100) NOT NULL AUTO_INCREMENT,
  `userId` int(100) NOT NULL,
  `friendName` varchar(100) NOT NULL,
  `friendPhone` varchar(100) NOT NULL,
  `friendCompany` varchar(100) NOT NULL,
  `friendQQ` varchar(100) NOT NULL,
  PRIMARY KEY (`friendId`),
  KEY `user_id` (`userId`),
  CONSTRAINT `user_id` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'hlk1135', '123456', '学生', '王五', '17862828631');

-- ----------------------------
-- Records of friends
-- ----------------------------
INSERT INTO `friends` VALUES ('1', '1', '张三', '17862821111', '阿里巴巴', '862186722');
INSERT INTO `friends` VALUES ('2', '1', '李四', '17862821111', '百度', '111111111');

####2、项目结构搭建:

基于SSH的个人信息管理系统_第1张图片

最初搭建SSH环境的时候,使用了Myeclipse中的Add自行自动导入,但是由于jar包之间的冲突,改为自己全部手动导入。给大家一个SSH整合之后的jar包,虽然有几个jar包是多余的,但是我可以保证绝对没有冲突,而且绝对的可以使SSH项目很好的跑起来。
Struts2+Spring3+Hibernate4整合jar包下载

1)web.xml:



  	
  
    index.jsp
  
    
    
    org.springframework.web.context.ContextLoaderListener  
    
    
    contextConfigLocation  
    /WEB-INF/classes/applicationContext.xml  
    
  
  	struts2
  	
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	
      
      
      actionPackages  
      com.hlk.action  
     
  
  
  	struts2
  	/*
  
 

注:如果这里xml文件的contextConfigLocation使用classpath: 报类似于如下的错误:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/beans.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/beans.xml]  
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/beans.xml] 

最后经过不断的测试,调整,得到了如下结论,仅供参考:


 
 
  contextConfigLocation
  
  
  
  
  
  
  
  
  
  classpath:beans.xml,classpath:action-beans.xml
 
 
 
  org.springframework.web.context.ContextLoaderListener
 

stackoverflow中有这样一句话:

Do not use classpath. This may cause problems with different ClassLoaders (container vs. application). WEB-INF is always the better choice.

2)applicationContext.xml:(Spring的配置文件)

      
  

    
	
	
	
	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	
	
		
			
		
		
			
				update
				org.hibernate.dialect.MySQLDialect
				true
				true
			
		
		    
        
        	
				com.hlk.model
			
         
	
	    
        
                  
    
      
     

这里使用了druid数据库连接池,代码注释很详细,这里不再做介绍。

3)属性文件config.properties:

hibernate.dialect=org.hibernate.dialect.MySQLDialect
driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://127.0.0.1:3306/information?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
jdbc_username=root
jdbc_password=

hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true

4)struts2的配置文件struts.xml:





	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

4)Hibernate反向工程生成User和Friends两个Java实体类。

基于SSH的个人信息管理系统_第2张图片

基于SSH的个人信息管理系统_第3张图片

我不会使用MyEclipse中的Hibernate反向工程怎么办?没问题!请点击这里!
点击这个告诉你!!!

####好啦,以上这些工作都搞定,那么我们就可以敲代码来实现我们的需求啦。


####二、各模块功能的实现:

1、用户模块

1)用户登录

基于SSH的个人信息管理系统_第4张图片

登录拦截:

获取我们url执行的操作,如果不是login,则查看session中是否有登录的用户对象,如果为null,则返回到登录页面。

public class UserInterceptor extends AbstractInterceptor{
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//获取当前执行的方法
		String methodName = invocation.getProxy().getMethod();
		ActionContext ac = invocation.getInvocationContext();
		//从session中获取登录的用户对象
		Object obj = ac.getSession().get("userInfo");
		
		if(!"login".equals(methodName)) {
			if(obj == null) { //如果session中userInfo对象为null
				return "login";
			} else {
				return invocation.invoke();//允许执行操作
			}
		}
		return invocation.invoke(); 
	}
}

2)用户注册(使用js进行校验)

基于SSH的个人信息管理系统_第5张图片

2、登录成功主页面

登录成功后将登录信息存入session中,方便进行显示以及后续其它模块中的查找。

基于SSH的个人信息管理系统_第6张图片

3、联系人管理模块

由于user表的id为friends表的外键,所以在这里只显示和查询登录用户的联系人,不可对其它用户的联系人进行操作。因此上面将user存入session则起到了作用。

基于SSH的个人信息管理系统_第7张图片

1)添加联系人

这里要注意一个问题是,我们添加联系人时,一条联系人的记录,还包括了userId,因此我们需要先查出user对象,将其设置到联系人对象中,再保存联系人。

	public String save() {
		//先根据userId,查出user对象;再设置到联系人对象中
		User user = userService.findUserById(userId);
		friends.setUser(user);
		// 调用Service,保存联系人
		friendService.save(friends);
		return "frilistAction";
	}

基于SSH的个人信息管理系统_第8张图片

2)查看联系人详细信息

这里再次使用了BootStrap的模态框,具体操作,可以借鉴一下上个小Demo中的具体介绍。------Struts2简单的图书管理系统

基于SSH的个人信息管理系统_第9张图片

3)修改联系人信息

基于SSH的个人信息管理系统_第10张图片

4)通过姓名和手机号进行模糊查询
这里的模糊查询支持 只使用手机号、只使用姓名、两者都使用。

	/**
	 * 根据姓名和手机号模糊查询
	 */
	@Override
	public List getAll(String friendName, String friendPhone) {
		HttpServletRequest request = ServletActionContext.getRequest();
		User user = (User)request.getSession().getAttribute("userInfo");
		int uid = user.getUserId();
		return this.getCurrentSession()
				.createQuery("from Friends where friendName like ? and friendPhone like ? and userId=?")
				.setParameter(0, "%" + friendName + "%")
				.setParameter(1, "%" + friendPhone + "%")
				.setInteger(2, uid)
				.list();
	}

输入查询信息:

这里写图片描述

查询结果:

这里写图片描述

5)批量删除联系人

复选框的获取;将拼接的字符串进行分割;for循环执行删除操作

"/>
function delchecked() {
		var ids="";
		var obj=$("input[name='checkboxes']");
		
		for(var i=0;i

FriendAction.java:

public String deletemany() {
		//获取出需要删除的联系人的id
		String str = ServletActionContext.getRequest().getParameter("ids");
		String[] s = str.trim().split(",");
		for (int i = 0; i < s.length; i++) {
			int id = Integer.parseInt(s[i]);
			Friends f = friendService.findById(id);
			friendService.delete(f);
		}
		return "frilistAction";
	}

4、文件管理模块

1)上传文件

基于SSH的个人信息管理系统_第11张图片

2)文件列表显示

基于SSH的个人信息管理系统_第12张图片


###后续功能模块继续完善中,代码更新后会整理上传到Github。

基于SSH的个人信息管理系统项目源代码

你可能感兴趣的:(Spring系列框架,项目实践)