基于SSM作业提交与批改的设计与实现
摘要
社会的进步导致人们对于学习的追求永不止境,那么追求学习的方式也从单一的书本教程变成了多样化的学习方式。多样化的学习方式不仅仅是需要人们智慧的依靠,还需要能够通过软件的加持进行信息化的价值体现。软件和系统的产生,从表面上来看是方便了某一行业和某一行业的用户,其实是从本质上来说是提高了社会的进步。就拿我们常见的出行而言,滴滴出行看似是为了打车和出行的人方便,但其实通过另外一种程度上来说,可以通过软件应用的调度和发展来为社会、城市出行的发展做出巨大的贡献。我们国家从最早的中国制造业演变到现在的“智造”,就是因为有软件信息系统的价值,能够将一些智慧的因素加入到制造的过程当中,而这一点就是软件系统来改变生产和现实的需求。在计算机时代日益发展的今天,计算机网络正快速融入这个社会的每一个领域。学习也成为大家生活当中必不可少的一种习惯,但面对学习的方式,我们往往是依靠书本或者是教师上课的形式进行讲解,老师批改作业的过程当中难能够将每一位学生的思路看明白,而且面对学生如此之多,老师的工作量也是非常大的,为此开发和设计SSM作业提交与批改,该系统内容丰富多彩,用户可以在线进行作业批改等。本文还是使用JSP的方式来进行管理的,但在系统建设过程当中也考虑了许许多多信息安全的保护。
系统实现页面
首页
后台管理系统页面
老师信息
作业信息添加
相关技术介绍
SSM技术
Java语言之所以能够被程序爱好者喜欢和使用,是因为它在语法和框架的不断演变中逐渐提升其强大的功能。此次的设计呢,我们采用的是SSM框架。那么SSM框架也是Java开发框架当中的一个典型,那么分别就将SSM这三个字母进行一个简单介绍。首先,第一个S是Spring。第二个S是SpringMVC。第三个M是MyBatis。它们三个字母分别代表折Java体系中的三大类型,那么spring是Java的黏合剂,他的思想就是控制反转和面向切片编程,那么spring mvc里边呢?无需多介绍,他的核心其实相当于SSH框架中的struts,其实起到一个三层架构访问的形式,提供的更多是一种规范约束。最后是MyBatis,它是持久化框架中的一种,通过它可以和数据库永久的交互,那么交互起来也更加方便。那么每一项技术的加持形成了框架的组合,给程序员带来的是框架性的解决问题。
MySQL数据库介绍
在关系型数据库当中有一种数据库对于技术的发展和贡献有着非常大的影响,它就是MYSQL数据库。之所以它的地位非常的重要是因为它本身所拥有的特性是我们所不能忽略的。首先做为开源而且免费的数据库之一来说,无论是用运在商业场景当中还是用在我们个人的毕业设计上都是没有问题的,其次,开源免费只是它的一个基本特征更重要的一点原因就是它可以轻松容易的上手解决各种各样的问题。无论是简单的增、删、改、查还是复杂的存储过程这些问题都不在话下。那么对于此次的设计而言呢如果遇到问题查找资料或者解决问题的方法相对来说也比较多一点,所以此次也就使用了MSYQL数据库。
网络安全环境
我们都知道,对于一个作业提交与批改系统来说,不仅系统功能和非常重要,高性能的网络安全环境也是非常重要,网络安全的环境是直接影响应用系统是否安全的关键因素,但网络安全的保证是要从软件、硬件等各个方面进行一个有效性的综合提升。在专业的应用服务器中所必要的防火墙以及网络设备是必须要存在的,且在应用服务器当中与应用无关的所有端口号都要进行一定的屏蔽。对于内外网之间也要进行一个有效的隔离。在应用服务器中,所有的操作日志需定期进行一个有效的记录,具备应用审计、审查等功能。同时,在应用服务器当中应该有足够大的存储空间来为应用服务器进行一个灾备。防止意外发生时,能够及时有效地将应用服务器当中的所有内容进行一个恢复。所以说,那么SSM作业提交与批改等网络环境安全方面,我们一定要有一个保障,才能安安心心的做网站的开发
部分源码
package com.controller;
import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.entity.Xinwentongzhi;
//import com.chengxusheji.po.News;
import com.server.XinwentongzhiServer;
import com.util.PageBean;
import net.sf.json.JSONObject;
@Controller
public class XinwentongzhiController {
@Resource
private XinwentongzhiServer xinwentongzhiService;
//
@RequestMapping("showXinwentongzhi.do")
public String showXinwentongzhi(int id,ModelMap map,HttpSession session){
/* Map<String,Object> bmap=new HashMap<String,Object>();
bmap.put("uid", id);*/
// map.put("blist", xinwentongzhiService.getAll(bmap));
map.put("xinwentongzhi", xinwentongzhiService.getById(id));
return "read";
}
@RequestMapping("addXinwentongzhi.do")
public String addXinwentongzhi(HttpServletRequest request,Xinwentongzhi xinwentongzhi,HttpSession session){
Timestamp time=new Timestamp(System.currentTimeMillis());
//Users u=(Users)session.getAttribute("user");
/*if(u==null||u.equals("")){
return "redirect:showIndex.do";
}else{*/
xinwentongzhi.setAddtime(time.toString().substring(0, 19));
xinwentongzhiService.add(xinwentongzhi);
session.setAttribute("backxx", "添加成功");
session.setAttribute("backurl", "xinwentongzhiList.do?lb="+request.getParameter("leibie"));
return "redirect:postback.jsp";
/*}*/
}
// 处理编辑
@RequestMapping("doUpdateXinwentongzhi.do")
public String doUpdateXinwentongzhi(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
xinwentongzhi=xinwentongzhiService.getById(id);
map.put("xinwentongzhi", xinwentongzhi);
return "xinwentongzhi_updt";
}
// 后台详细
@RequestMapping("XinwentongzhiDetail.do")
public String XinwentongzhiDetail(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
xinwentongzhi=xinwentongzhiService.getById(id);
map.put("xinwentongzhi", xinwentongzhi);
return "xinwentongzhi_detail";
}
// 前台详细
@RequestMapping("xwtzDetail.do")
public String xwtzDetail(int id,ModelMap map,Xinwentongzhi xinwentongzhi){
xinwentongzhi=xinwentongzhiService.getById(id);
map.put("xinwentongzhi", xinwentongzhi);
return "gg_detail";
}
//
@RequestMapping("updateXinwentongzhi.do")
public String updateXinwentongzhi(int id,ModelMap map,Xinwentongzhi xinwentongzhi,HttpServletRequest request,HttpSession session){
xinwentongzhiService.update(xinwentongzhi);
//return "redirect:xinwentongzhiList.do";
session.setAttribute("backxx", "修改成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";
}
// 所有List
// @RequestMapping("xinwentongzhiList.do")
// public String xinwentongzhiList(ModelMap map,HttpSession session){
// map.put("list", xinwentongzhiService.getAll(null));
// map.put("clist", xinwentongzhiService.getAll(null));
// return "xinwentongzhi";
// }
// 分页查询
@RequestMapping("xinwentongzhiList.do")
public String xinwentongzhiList(@RequestParam(value="page",required=false)String page,
ModelMap map,HttpSession session,Xinwentongzhi xinwentongzhi, String biaoti, String leibie, String neirong, String shouyetupian, String dianjilv, String tianjiaren,String lb){
/*if(session.getAttribute("user")==null){
return "login";
}*/
if(page==null||page.equals("")){
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 5);
Map<String, Object> pmap=new HashMap<String,Object>();
pmap.put("pageno", pageBean.getStart());
pmap.put("pageSize", 20);
if(biaoti==null||biaoti.equals("")){pmap.put("biaoti", null);}else{pmap.put("biaoti", biaoti);}
if(leibie==null||leibie.equals("")){pmap.put("leibie", null);}else{pmap.put("leibie", leibie);}
if(lb==null||lb.equals("")){pmap.put("lb", null);}else{pmap.put("lb", lb);}
if(neirong==null||neirong.equals("")){pmap.put("neirong", null);}else{pmap.put("neirong", neirong);}
if(shouyetupian==null||shouyetupian.equals("")){pmap.put("shouyetupian", null);}else{pmap.put("shouyetupian", shouyetupian);}
if(dianjilv==null||dianjilv.equals("")){pmap.put("dianjilv", null);}else{pmap.put("dianjilv", dianjilv);}
if(tianjiaren==null||tianjiaren.equals("")){pmap.put("tianjiaren", null);}else{pmap.put("tianjiaren", tianjiaren);}
int total=xinwentongzhiService.getCount(pmap);
pageBean.setTotal(total);
List<Xinwentongzhi> list=xinwentongzhiService.getByPage(pmap);
map.put("page", pageBean);
map.put("list", list);
session.setAttribute("p", 1);
return "xinwentongzhi_list";
}
@RequestMapping("xwtzList.do")
public String xwtzList(@RequestParam(value="page",required=false)String page,
ModelMap map,HttpSession session,Xinwentongzhi xinwentongzhi, String biaoti, String leibie, String neirong, String shouyetupian, String dianjilv, String tianjiaren,String lb){
/*if(session.getAttribute("user")==null){
return "login";
}*/
if(page==null||page.equals("")){
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 20);
Map<String, Object> pmap=new HashMap<String,Object>();
pmap.put("pageno", pageBean.getStart());
pmap.put("pageSize", 20);
if(biaoti==null||biaoti.equals("")){pmap.put("biaoti", null);}else{pmap.put("biaoti", biaoti);}
if(leibie==null||leibie.equals("")){pmap.put("leibie", null);}else{pmap.put("leibie", leibie);}
if(lb==null||lb.equals("")){pmap.put("lb", null);}else{pmap.put("lb", lb);}
if(neirong==null||neirong.equals("")){pmap.put("neirong", null);}else{pmap.put("neirong", neirong);}
if(shouyetupian==null||shouyetupian.equals("")){pmap.put("shouyetupian", null);}else{pmap.put("shouyetupian", shouyetupian);}
if(dianjilv==null||dianjilv.equals("")){pmap.put("dianjilv", null);}else{pmap.put("dianjilv", dianjilv);}
if(tianjiaren==null||tianjiaren.equals("")){pmap.put("tianjiaren", null);}else{pmap.put("tianjiaren", tianjiaren);}
int total=xinwentongzhiService.getCount(pmap);
pageBean.setTotal(total);
List<Xinwentongzhi> list=xinwentongzhiService.getByPage(pmap);
map.put("page", pageBean);
map.put("list", list);
session.setAttribute("p", 1);
return "news";
}
@RequestMapping("deleteXinwentongzhi.do")
public String deleteXinwentongzhi(int id,HttpServletRequest request,HttpSession session){
xinwentongzhiService.delete(id);
return "redirect:"+request.getHeader("Referer");
}
}
可行性分析
运行可行性从一定程度上来讲就是应用系统。通过开发和实现起来,在其服务器上是否能够运行,其实,运行可行性还主要是有经济可行性和软件的操作可行性等技术可行性支撑而言。首先,在技术可行性中,如果能够实现的话就能够表明业务所需要的处理角度或者范围都能够通过技术而实现,那么我们把这些可行性最终综合到应用服务器当中,达到运行可行性的需求。本文其实在应用服务器中的运行可行性就是一台普通的电脑,它的请求并发量并不是很大,所以运行可行性是可行的。
功能需求
基于SSM作业提交与批改主要还是与采用后台的一个管理形势,通过不同角色来区分,主要有管理员、学生和老师。学生的主要功能有个人资料管理、作业成绩管理、作业管理。管理员的主要功能有系统用户管理、学生管理和老师管理。老师的主要功能有个人资料管理、作业成绩管理、作业管理。
测试
系统的测试目的就是为了让能够让系统的功能更加完善,能够让我们所做的功能补充在bug,这一点是非常重要的。测试的目的就是为了能够在系统上线之前,把所有的严重性bug和非严重性bug进行一个整理。我们只是根据测试的目的,把所需要整理的问题进行一个优先级的排序,通过优先级来讲程序的问题进行一个汇总解决。
我们通常进行的程序测试,包括白盒测试、黑盒测试都是相关的测试方法。首先,什么是白盒测试,什么是黑盒测试呢?不懂测试或者没有从事软件开发工作的朋友们可能不太清楚,那么对于白盒测试呢,就是简单的理解为可以通过肉眼进行一个我们代码结构或者布局的设计。然后通过简单的方式来对我们的整体结构和代码进行一个判断,是否存在漏洞或者存在有不合理的地方。黑河测试就是我们要通过实际的用例测试才能知道具体的业务流程是否准确,那么我们就从这几方面进行,比如说登录模块,点进去用户名、密码和验证码之后,是否能够按照要求跳入到指定页面。那么,对于增加信息或者修改信息,能否通过对应的信息录入实现信息的修改和增加。对于做了物理的删除功能来说,我们要通过删除信息来判断是否数据库真正进行了删除,然后所有的数据是否进行清空等等。