简介

今天整理的是一个结合Struts2做的一个人员查询管理系统。开发历程没有写太多。整体项目开发比较简单,基于模版进行修改页面,编写action类

 

开发前奏

开发前奏
1. 导入人员管理项目
2. 建立数据库、表
	drop databse if exists struts;
	create database alice;
	create user alice@localhost identified by '123'; //添加用户
	grant all on struts.* to alice@localhost//授权
	oracle一个数据代表一个服务,在这个库中有很多用户,每个用户有个表空间
	
	set character_set_client = gbk;
# 用户表
	CREATE TABLE S_User(
	userID INT  NOT NULL AUTO_INCREMENT, #主键ID
	userName VARCHAR(50)   NULL,  #用户姓名
	logonName VARCHAR(50)   NULL, #登录名
	logonPwd VARCHAR(50)  NULL,   #密码#
	sex VARCHAR(10)  NULL,        #性别(例如:男,女)
	birthday VARCHAR(50) NULL,    #出生日期
	education VARCHAR(20)  NULL,  #学历(例如:研究生、本科、专科、高中)
	telephone VARCHAR(50)  NULL,  #电话 
	interest VARCHAR(20)  NULL,   #兴趣爱好(例如:体育、旅游、逛街)
	path VARCHAR(500)  NULL,      #上传路径(path路径)
	filename VARCHAR(100)  NULL,  #上传文件名称(文件名)
	remark VARCHAR(500)  NULL,    #备注
	PRIMARY KEY (userID)
	) 
	
目标功能:

搭建开发环境
struts2+javabean+DAO+DBCP+DBUtils+Mysql
导入jar包和配置文件
	web.xml
		index.jsp/index.html;
		<filter>加入核心控制器StrutsPrepareAndExecuteFilter
	struts.xml
	dbcpconfig.properties

SERVICE层/DAO层实现

1. 定义业务接口(根据功能需求来做)
BusinessService
	User login(String logonName, String logonPwd);
	List<User> findAllUsers();
	List<User> findUsersByCondition(String userName, String sex,String education,String filename);
	void addUser(User user);
	void editUser(User user);
	User findUserById(Integer userId);
	void delUser(User user);
2. 后台业务代码实现、测试
UserDao
	void save(User user);
	void del(User user);
	void update(User user);
	List<User> findUserByCoditions(Integer userID,String logonName,String logonPwd,String sex,String education, String filename);
	User findUserByUsernamePassword(String logonName, String logonPwd);
	List<User> findAllUsers();
	List<User> findUsersByCondition(String userName, String sex,String education,String filename);
	User findUserById(Integer userId);
	
3. 添加实现类UserDaoMysqlImpl
	1). 删除/更新用户判断传入的用户和用户id是否为空,如果为空抛出无效参数异常
	2). List<User> findUserByCoditions(Integer userID,String userName,String sex,String education, String filename);
		判断传入的参数是否为空,如果全部为空代表查询全部
		至少一个参数不为空
		List<Object> parameters = new ArrayList<Object>();
		if(userId != null) {
			sb.append("and userID=? ")
		}
		if(StringUtils.isNotBlank(username)) {
			sb.apppend("and userName like ? ")
		}
		if(StringUtils.isNotBlank(filename)) {
			if("true".equals(filename)) {
				sb.append("and filename is not null");
			} else {
				sb.append("and filename is null");
			}
		}
	
4. 业务实现类
	BusinessServiceImpl
	private UserDao dao = new UserDaoMysqlImpl();
5. 测试业务实现类	

 

功能实现

一、 登录功能
	1. 改造登录页面login.jsp
		# 修改主题:struts.ui.theme=simple
		<s:form action="userLogin">
		logonName/logonPwd/submit/reset
	2. struts-user.xml
		<action name="userLogin">重定向到登录之后转向的页面home.jsp,错误转到login.jsp
	3. UserAction类	
		1). 使用ModelDrivern进行封装User数据
		2). 在applicationContext.xml中配置Spring容器进行注入业务实现类
		3). 建立用户登录方法
			调用业务方法获取用户,如果为空添加错误动作消息,返回input视图
			否则设置session域中,返回success
	4. top.jsp,修改用户名:<s:property value="#session.user.usernaName">	
		
二、 查询所有用户
1. 改造left.jsp
	<s:url action="findAllUser" namespace="/user" var="findAllUserUrl">
2. 添加<action anem="findAllUser"> 节点
		<result>转到list.jsp
3. 	改造list.jsp
	<s:iterator value="users" var="user">
	/用户名/性别/电话/学历
4. 查询用户改造,建立一个findUserByUsernamePassword();

三、 按条件查询
1. list.jsp-->
	<s:form action="listByCondition" namespace="/user">
	<s:textfield>用户姓名/性别<s:select list="#{}" headerkey=""
	学历/是否上传学历
	submit
2. struts-user.xml配置文件
	<action name="listByCondition">
3. 改造UserAction
	listByCondition();
四、 添加用户
1. list.jsp修改提交
	<s:submit type="button" >
2. add.jsp修改
	导入struts标签库
	<s:form action="addUser" enctype="">
	登录名/密码/用户姓名/性别<s:radio list="#{}" value={'male'}>
	学历/出生日期/电话/兴趣爱好<s:checkboxlist list="{''}"/
	简历资料<s:file>
3. 添加<action>节点,重定向动作到redirectAction --->findAllUser
4. UserAction---addUser()
	isUpload/interests[]/upload/uploadFileName/
	1). 数据已经封装到了User对象中,除了爱好和简历存放路径
	2). 判断interests不为空并且长度大于0,
		遍历interest,拼接爱好,隔开。拼接后的字符串设置到user中
	3). 得到真实路径,将路径设置到user中
	4). 利用TokenHelper.generateGUID()生成新文件名称,设置到user中
	5). FileUtils拷贝到目的FileUtils拷贝到目的地
	6). 调用业务方法,将user对象添加到数据库中
	
五、 编辑功能
1. list.jsp
	<s:a namespace="/user" action="findOneUser">
		<s:param name="userID" value="<s:property value="#user.userID">
2. 添加action节点 name="findOneUser"
3. UserAction---->findOneUser()
	调用业务方法findOneUser();
	将user压入栈顶
	return SUCCESS;
4. edit.jsp页面
	兴趣爱好value="%{interest.split(',')}"
	简历资料
	下载
	重新上传
5. <action>中添加download动作
	<result type="stream">
		<param name="inputName">
		<param name="contentType">application/octet-stream</param>
		<param name="contentDisposition">attachment;filename=${}
6. 动作类中添加download方法
	根据id查询用户
	得到用户中的真实路径
	关联该路径文件,创建流对象
7. action节点中t添加editUser动作
8. UserAction类中添加editUser()方法
	如果upload不为空,重新上传
	否则的话
		用户没有选择重新上传,保持住原有的文件名和路径名
	调用业务方法editUser()方法
9. 查看功能
	list.jsp,<s:a namespace="/user" action="viewUser">
	viewUser动作方法
	view.jsp,改变为struts标签
10. 删除功能
	list.jsp
11. 空指针异常的问题
	如果文件不为空,才进行上传
	
六、 拦截器判断登录
	LogonCheckInterceptor实现MethodFilterInterceptor
	从session中获取user,判断是否为空,
	
	定义<interceptors>
			<interceptor name="logonCheckInterceptor">
				<param name="excludeMethods">userLogin</param>
			</interceptor>	
			<interceptor-stack name="mydefault">
				defaultStack
				logonCheckInterceptor
	<global-results>