每天记录学习,每天会有好心情。*^_^*

今天将为大家分析一个文档管理系统(现有的文档管理系统虽然保证了文档的安全管理,但是对文件夹的权限进行设置后,该种权限就作用于该文件夹下的文件,而不能对文件夹里的文件进行单独的权限设置。随着文档数量的增多,管理者已经不再满足于文档与用户访问权限的单一设置,而希望能对存放文件的文件夹以及单个文件设置访问控制权限,以便达到信息的及时共享。显然,现有的文档管理系统不能满足管理者的需求。),该项目使用框架为SSM(MYECLIPSE),选用开发工具为MYECLIPSE。文档管理系统为一个 后台项目。
为了完成该系统,我们首先需要对该系统进行需求分析。一个文档管理系统应包含用户角色有管理员。为了能让用户顺利登陆系统完成相关操作,需要为每种登陆角色设置账户和密码字段。

总结得出该系统所有数据为:管理员(admin)、文档(wendang)

管理员表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 管理员id
username | VARCHAR(255) | | 账号
passowrd | VARCHAR(255) | | 密码

文档表

字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 文档id
mingcheng | VARCHAR(255) | | 名称
miaoshu | VARCHAR(255) | | 描述
wenjian | VARCHAR(255) | | 文件
package org.mypro.front;

import java.io.File;

import java.io.IOException;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Collections;

import java.util.Date;

import java.util.List;

import javax.jms.Session;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.mypro.dao.WendangMapper;

import org.mypro.entity.Wendang;

import org.mypro.entity.WendangExample;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.multipart.MultipartFile;

@Controller

@RequestMapping(VALUE = "/")

public class WendangController {

private static final Log logger = LogFactory.getLog(WendangController.class);

@Autowired
private WendangMapper wendangdao;

//定义方法tianjiawendang,响应页面tianjiawendang请求

@RequestMapping(VALUE = "tianjiawendang")

public String tianjiawendang(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,String backurl) {

logger.debug("WendangController.tianjiawendang ......");

IF(backurl != NULL && backurl.indexOf("tianjiawendang.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "tianjiawendang";

}

@RequestMapping(VALUE = "tianjiawendangact")

public String tianjiawendangact(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,Wendang wendang,String backurl,MultipartFile wenjianfile) throws IOException {

logger.debug("WendangController.tianjiawendangact ......");

IF(!wenjianfile.isEmpty()){

String wenjian = uploadUtile(wenjianfile, request);

wendang.setWenjian(wenjian);

}

wendangdao.insert(wendang);

request.setAttribute("message", "添加文档成功");

IF(backurl != NULL && backurl.indexOf("tianjiawendangact.action") == -1){

RETURN "forward:/" + backurl; }

//返回tianjiawendang方法

RETURN "forward:/tianjiawendang.action";

}

//定义wendangguanli方法响应页面请求

@RequestMapping(VALUE = "wendangguanli")

public String wendangguanli(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,String backurl) {

logger.debug("WendangController.wendangguanli ......");

WendangExample example = NEW WendangExample();

List wendangall = wendangdao.selectByExample(example);

request.setAttribute("wendangall", wendangall);

IF(backurl != NULL && backurl.indexOf("wendangguanli.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "wendangguanli";

}

// 定义 wendangchakan方法

@RequestMapping(VALUE = "wendangchakan")

public String wendangchakan(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,String backurl) {

logger.debug("WendangController.wendangchakan ......");

WendangExample example = NEW WendangExample();

List wendangall = wendangdao.selectByExample(example);

request.setAttribute("wendangall", wendangall);

IF(backurl != NULL && backurl.indexOf("wendangchakan.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "wendangchakan";

}

// 定义 xiugaiwendang方法

@RequestMapping(VALUE = "xiugaiwendang")

public String xiugaiwendang(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,INT id,String backurl){

logger.debug("WendangController.xiugaiwendang ......");

Wendang wendang = wendangdao.selectByPrimaryKey(id);

request.setAttribute("wendang", wendang);

IF(backurl != NULL && backurl.indexOf("xiugaiwendang.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "xiugaiwendang";

}

// 定义xiugaiwendangact处理文档修改

@RequestMapping(VALUE = "xiugaiwendangact")

public String xiugaiwendangact(HttpServletRequest request, HttpServletResponse response,Wendang wendang,HttpSession SESSION,String backurl,MultipartFile wenjianfile) throws IOException {

logger.debug("WendangController.xiugaiwendangact ......");

IF(!wenjianfile.isEmpty()){

String wenjian = uploadUtile(wenjianfile, request);

wendang.setWenjian(wenjian);

}

wendangdao.updateByPrimaryKeySelective(wendang);

request.setAttribute("message", "修改文档信息成功");

IF(backurl != NULL && backurl.indexOf("xiugaiwendangact.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "forward:/wendangguanli.action";

}

// 定义shanchuwendang,处理删除文档

@RequestMapping(VALUE = "shanchuwendang")

public String shanchuwendang(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,INT id,String backurl){

logger.debug("WendangController.shanchuwendang ......");

wendangdao.deleteByPrimaryKey(id);

request.setAttribute("message", "删除文档成功");

IF(backurl != NULL && backurl.indexOf("shanchuwendang.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "forward:/wendangguanli.action";

}

// 定义sousuowendang方法,处理搜索操作

@RequestMapping(VALUE = "sousuowendang")

public String sousuowendang(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,String SEARCH,String backurl) {

logger.debug("WendangController.sousuowendang ......");

WendangExample example = NEW WendangExample();

WendangExample.Criteria criteria = example.createCriteria();

IF(SEARCH != NULL){

criteria.andMingchengLike("%" + SEARCH + "%");

}

List wendangall = wendangdao.selectByExample(example);

request.setAttribute("wendangall", wendangall);

IF(backurl != NULL && backurl.indexOf("sousuowendang.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "sousuowendang";

}

// 定义WendangpinglunMapper@RequestMapping

(VALUE = "wendangxiangqing")public String wendangxiangqing

(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,INT id,String backurl) {logger

.debug("WendangController.wendangxiangqing ......");Wendang wendang

= wendangdao.selectByPrimaryKey(id);request

.setAttribute("wendang", wendang);

IF(backurl != NULL && backurl.indexOf("wendangxiangqing.action") == -1){

RETURN "forward:/" + backurl; }

RETURN "wendangxiangqing";

}

// 上传文件图片等public String uploadUtile

(MultipartFile file, HttpServletRequest request) throws IOException {

// 根据当前时间生成时间字符串SimpleDateFormat sdf 

= NEW SimpleDateFormat("yyyyMMddHHmmssSS");String res

= sdf.format(NEW DATE());

// uploads文件夹位置String rootPath 

= request.getSession().getServletContext().getRealPath("resource/uploads/");

// 原始名称String originalFileName 

= file.getOriginalFilename();

// 新文件名String newFileName 

= "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf("."));

// 创建年月文件夹Calendar 

DATE = Calendar.getInstance();File dateDirs

= NEW File(DATE.get(Calendar.YEAR) + File.separator + (DATE.get(Calendar.MONTH)+1));

// 新文件File newFile 

= NEW File(rootPath + File.separator + dateDirs + File.separator + newFileName);

// 判断目标文件所在目录是否存在

IF( !newFile.getParentFile().exists()) {

// 如果目标文件所在的目录不存在,则创建父目录newFile

.getParentFile().mkdirs();

}System

.out.println(newFile);

// 将内存中的数据写入磁盘file

.transferTo(newFile);

// 完整的urlString fileUrl 

= DATE.get(Calendar.YEAR) + "/" + (DATE.get(Calendar.MONTH)+1) + "/" + newFileName;

RETURN fileUrl;

}}

添加文档模块:

系统中存在添加文档功能,通过点击添加文档可以跳转到该功能模块,在该功能模块中,填写对应的文档信息。文档包含信息名称,描述,文件,填写完所有信息后,通过post方法将数据提交到tianjiawendang.action中,该地址将在服务器中wendangController类中的tianjiawendangact方法中进行响应。响应结果为,获取所有的文档信息,封装一个wendang类,使用wendangController类中定义的wendangdao的insert方法,将文档数据插入到数据库的wendang表中。并给出用户提示信息,添加文档成功,将该信息保存到request的message中,该信息将在页面中进行展示。该部分核心代码如下:

通过wendangdao的insert方法将页面传输的文档添加到数据库中 wendangdao.insert(wendang);

将添加文档成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "添加文档成功");

返回文档管理界面

return "forward:/tianjiawendang.action";

查询文档模块:

在浏览器中进入文档查询页面时,此时浏览器的地址栏为wendangguanli.action,该地址将响应wendangController类中的wendangguanli,在该方法中,通过selectByexample方法获取所有的文档信息,并将该信息保存到request中,在页面进行循环展示。该部分核心代码如下:

生成文档样例类,通过example定义查询条件 WendangExample example = new WendangExample();

通过wendangdao的selectByExample方法查询出所有的文档信息 List wendangall = wendangdao.selectByExample(example);

将文档信息,保存到request中,在页面通过foreach方法进行展示 request.setAttribute("wendangall", wendangall);

返回文档管理界面

return "forward:/wendangguanli.action";

修改文档模块:

点击修改按钮,可以跳转到文档修改页面。在文档修改页面中,将初始化该文档的所有信息,并将信息一一对应填充到对应编辑栏中。编辑完文档信息后,页面通过post方法将数据封装为一个文档实体,传入到wendangController中。在xiugaiwendang中进行接收,接收完毕后,调用wendangMapper中的updateByPrimaryKeySelective方法进行修改。该部分代码如下:

通过wendangdao的修改方法根据id修改对应的文档 wendangdao.updateByPrimaryKeySelective(wendang);

将修改文档成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "修改文档信息成功");

返回文档管理界面

return "forward:/wendangguanli.action";

删除文档模块:

在管理页面中,点击删除。页面将通过a标签的href属性,使用get方法将该文档

的id上传到服务器中,在服务器中通过wendangController类中的shanchuwendang进行接收,之后调用wendangMapper中的deleteByPrimaryKey方法根据ID进行删除。将删除信息保存到request的message中,在页面给出用户删除成功的提示信息,该部分核心代码如下:

通过wendangdao的删除方法根据id删除对应的文档 wendangdao.deleteByPrimaryKey(id);

将删除文档成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "删除文档成功");

返回文档管理界面

return "forward:/wendangguanli.action";

02-14 02:38