实验资源、课设报告和源码请加QQ:2309636835
一 实验目的
通过联合使用本学期所学理论知识,进一步掌握和理解MVC模型结构,并掌握常用实用开发技术的用法。
二 实验内容与要求
实现基于springMVC的实验室设备管理系统。
2.1 整体结构需求
本实验室设备管理系统分为用户模式(即前台端)和管理员模式(即后台端),网站采取会员制,即登录后才能查看内容,故查看网页除登录、注册页外内容均需进行登录验证(用过滤器实现)。无账号用户可以由用户登录页进入注册页注册,管理员只能大后端添加,无法注册。
用户模式(即前台端)可以根据设备名称、分类和厂家查询设备并外借设备,用户可以查看个人信息,用户还可以查看本人目前的在借设备并进行归还。在用户进行外借和归还操作后,设备信息中设备余量和设备外借数量要能进行相应的变化。
管理员模式(即后台端)可以进行设备管理、外借管理和用户管理。设备管理可以查看、修改、增加设备信息。外借管理可以查看所有用户的外借信息,其中包括已归还的设备的外借信息。用户管理可以查看所有用户的个人信息。
2.2 环境需求
CSS框架:bootstrap
所用设计模式: SpringMVC
语言: Java + HTML
数据库: MySQL
Web服务器: Tomcat
Action: Controller
View: Jsp
2.3 用户模式需求
......
2.4 管理员模式需求
......
三 实现思想及程序说明
3.1 系统总体结构设计
......
3.3.1 用户注册功能
用户在首页点击注册,进入UserRegister.jsp页面,输入相应信息后点击注册发起user/userRegister请求,交由UserController.java处理,注册成功后也可以进入系统。对于用户头像的存储,这里使用的方法是在数据库中存储图像的文件名,并将用户头像图像文件上传至服务器路径:Tomcat7.0\webapps\Library\Avatar下。
UserController.java实现用户注册功能的代码如下:
//用户注册请求 注册成功后跳转至main页面
@RequestMapping("/userRegister")
public String addUser(User user,HttpSession session,Model model,HttpServletRequest request) throws Exception{
//加入用户头像上传功能
System.out.println("接收前端==="+user);
//保存数据库的路径
String sqlPath = null;
//定义文件保存的本地路径
//String localPath="D:\\File\\";
String localPath = request.getServletContext().getRealPath("/Avatar");
//定义 文件名
String filename = null;
if(!user.getAvatar_file().isEmpty()){
//生成uuid作为文件名称
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
//获得文件类型(可以判断如果不是图片 禁止上传)
String contentType = user.getAvatar_file().getContentType();
//获得文件后缀名
String suffixName = contentType.substring(contentType.indexOf("/")+1);
//获得 文件名
filename = uuid+"."+suffixName;
//文件保存路径
String path = "/AvatarImage" + filename;
user.getAvatar_file().transferTo(new File(localPath+path));
}
//把图片的相对路径保存到数据库
sqlPath = "AvatarImage"+filename;
System.out.println("用户传入头像的路径"+sqlPath); //打印测试
user.setUser_avatar(sqlPath);
//添加新用户 至数据库
int count = userService.insertUser(user);
if(count > 0){
//插入成功
System.out.println("插入用户成功==="+user);
session.setAttribute("user_id", user.getUser_id());
model.addAttribute("user_name", user.getUser_name());
return "User/UserMain";
}
System.out.println("插入用户失败==="+user);
String errorMsg = "用户注册失败";
model.addAttribute("msg", errorMsg);
return "tip";
}
3.3.2 用户登录功能
用户在UserLogin.jsp页面输入账号以及密码发起user/userLogin请求,交由UserController.java进行处理。如果与数据库中的数据匹配成功,则用户登入成功进入页面jsp/User/UserMain.jsp。
UserController.java实现用户登录功能的代码如下:
//用户登录请求
@RequestMapping("/userLogin")
public String userLogin(HttpSession session,int user_id,String user_password,Model model) throws Exception{
//根据传入的 id 和 密码 在数据库中进行查询
User user = userService.selectUserByIDPW(user_id, user_password);
if(user != null){
System.out.println("接收前端用户id==="+user_id);
session.setAttribute("user_id", user.getUser_id());
model.addAttribute("user_name", user.getUser_name());
return "User/UserMain";
}
String errorMsg = "用户登录失败";
model.addAttribute("msg", errorMsg);
return "tip";
}
3.3.3 显示个人信息
在UserMain.jsp页面中设置超链接请求:<a href="user/userInfo" target="iframeMainRight">个人中心</a>,由UserController.java接收,并将查询结果返回至视图User/UserInfo.jsp。
UserController.java显示个人信息的功能实现代码如下:
//用户请求账户详情信息
@RequestMapping("/userInfo")
public String userInfo(HttpSession session,Model model){
int user_id = (int)session.getAttribute("user_id");
User user = null;
user = userService.selectUserByID(user_id);
if(user != null){
System.out.println("查找到用户==="+user);
model.addAttribute("userInfo", user);
}
return "User/UserInfo";
}
3.3.4 设备查询功能
用户可以根据设备的名称、厂家、种类对设备信息进行查询。在UserAllBook.jsp页面设计三个查询框,分别用于输入名称、厂家、种类,产生请求交予BookController.java处理,控制器将查询的结果放在Model对象中再返回给UserAllBook.jsp页面用于显示。
UserAllBook.jsp主要代码如下:
<div class="search">
<div class="SearchByName">
<form class="form-search" action="book/selectBookByName" method="post">
<input type="text" class="input-medium search-query" placeholder="输入查询设备的名称" name="book_name">
<button type="submit" class="btn">Search</button>
</form>
</div>
<div class="SearchByType">
<form class="form-search" action="book/selectBookByType" method="post">
<input type="text" class="input-medium search-query" placeholder="输入查询设备的类型" name="book_type">
<button type="submit" class="btn">Search</button>
</form>
</div>
<div class="SearchByWriter">
<form class="form-search" action="book/selectBookByWriter" method="post">
<input type="text" class="input-medium search-query" placeholder="输入查询设备的厂家" name="book_writer">
<button type="submit" class="btn">Search</button>
</form>
</div>
</div>
......