基于SSM框架的生活论坛系统的设计与实现(付源码+论文)
技术介绍
ssm组件框架,是基于spring+springmvc+mybatis的一个英文简称及其缩写,spring就是依靠通过软件注入一个的adi组件来直接管理各级编程组件,使用一个非常面向直观的组件切面编程语言也即编程组件aop即可来直接管理一件事物、日志、权限等。springmvcer代表函数model(业务模型)view(视图)controller(业务控制)用户接受外部业务请求,进行业务分发和数据处理。mybatis,这是基于jdbc的一个设计框架,主要设计目标也就是为了自动操作一个业务数据库,并且把所有的一个业务管理实体与这个数据库的表之间连接在一起。
spring 在对一个层次中进行数据库管理时,是很合适和有条理的,每个层都要由 spring 来负责数据库管理,然后不同的一个层之间就会让 handler 可以直接通过调用服务器, service 也就是可以直接通过服务器调用 mapper 。对 dao 层进行整合。 mybatis 和 spring 的整合,通过 spring 来管理 mapper 接口。使用 mapper 的扫描仪器对 mapper 接口进行扫描,并且在 spring 中对该接口进行了注册。 service 层的整合 service 。通过 spring 来管理 service 接口。采用配置的方式把 service 接口放到 spring 配置文件中。实现对事务的控制。 springmvc 的集成和整合。
功能模块
由于对用户的功能需求进行分析我们可以清楚得知,它们的基本功能主要是被划分成作为两个基于前台功能模块和基于后台的一个功能模块,因此这个功能模块也被我们划分成作为两个的三大类:一类都是基于前台的功能模块。
用户通过网站直接进行了其他网站的注册,登录,以及将网站中修改其他用户的注册信息资料等方式进行组合而形成了用户注册登录的网站模块;用户可以通过浏览主题板块,浏览所有主题帖子排列列表,查看所有的帖子并将其组成一个浏览主题板块;用户可以通过在线发帖,回贴,编辑自己已经在线发布的一些帖子来构成一个可以进行发帖,或者在线回贴的模块;管理员可以通过自动编辑一篇帖子,删除某一篇帖子,转移另一篇帖子,置顶一篇帖子和指定的精华一篇帖子等多种方式来构建一个用于管理这篇帖子的功能模块。以上4个功能模块共同构成了系统的前台功能模块。每一个后台模块都应该是与管理员密切相关的,设置好了论坛的参数就可以为每一个论坛选择一个模块;创建,修改和删除本站版块作为一个管理本站的模块;将其中的添加,删除和配置为用户管理模块。系统前台模块由编辑、注册、登录、评论、回复、关注、点赞和查看等构成,后台模块则由友情链接、用户管理、模块管理、内部链接、网站设置和ip设置等构成。系统前后台模块如表3.1、3.2所示:
从用户角度进行分析,首先要区别的是该系统里面有几类用户。该论坛里只有两类用户:注册的用户和管理员。一般来说,论坛中的所有版主都是按照权限,划分到了管理员。对于已经注册成功的用户,在本站中的所有行为大致可以总结如下:
(1)您必须在网站上注册您的个人身份,登录到网站论坛,登陆成功后就可以随时修改您的注册资料。这些行动只与注册用户本身密切相关,功能单一,被设计为注册和登录的模块。
(2)通过工具浏览帖子版块的一个帖子主题列表,选择某一个帖子板块,浏览其下的一个帖子主题或者帖子内容列表,查看自己真心想要要填写的一个帖子和主题内容,搜索并找到所有您需要的主题帖子。这些帖子行动目的就是这些使用者为了能够及时阅读有关论坛文章中的相关板块及其他在帖子中包含有关论坛文章的其他相关信息资料,并将其内容设计为适合浏览者的板块。
(3)既可以在网站上发表自己的新帖子,也可以在网站上回复其中已有帖子,同时还可以在网站上编辑自己撰写的帖子的这些行为都是通过用户亲自参与到一个论坛上进行讨论而来发表自己的见解,设计成了一种发帖和回贴的模式。对于一名管理员,需要承担起整个论坛的正常工作和运转,因此我们需要开展更多管理职能,可以总结出如下几种行为:
(1)具备注册用户的所有功能,应为管理员也是论坛用户,可以参与论坛的讨论
(2)会员负责管理自己的论坛帖子。管理员在精华帖子上已经具备了进行监督的基本义务和管理权利,好的精华帖子一定是需要及时给予积分奖励,捣乱的其他帖子一定是需要及时被管理删除,标记显示出来的是从精华帖子到可以直接置顶的其他帖子,转移发贴到自己发错了一个版块的其他帖子,这些监督动机和管理行为都不能应该仅仅是针对一个帖子的基本动机属性进行管理操作,设计帖子形式成了一个管理员发帖子的重要模块。
(3)管理版块。论坛中的版块,需要管理员进行创建、管理版块信息,这些针对版块的操作,设计成管理版块模块。
/*
* 公共的操作
*
*/
@Controller
@RequestMapping("/common")
public class CommonController {
@Autowired
UserService userService;
private static Logger log = Logger.getLogger(CommonController.class);
//每五秒钟调用一次,更新在线时间
@ResponseBody
@RequestMapping("updateuseronlinetime.do")
public void updateuseronlinetime(HttpServletRequest request) {
User user=(User) request.getSession().getAttribute(PublicStatic.USER);
if(user!=null){
Map<Integer, Long> map= (Map<Integer, Long>)request.getSession().getServletContext().getAttribute("updateuseronlinetime");
if(map==null){
map=new HashMap<Integer, Long>();
}
long l=System.currentTimeMillis();
if(map.get(user.getId())==null||(l-map.get(user.getId())>4*1000)){
userService.updateuseronlinetime(user);
map.put(user.getId(), l);
request.getSession().getServletContext().setAttribute("updateuseronlinetime", map);
}
}
}
//保存发帖数据
@RequestMapping("topcorm.do")
public void add(HttpServletRequest request,HttpServletResponse response,String ismobile,String pathlocation) {
if(ismobile.equals("1")){
request.getSession().setAttribute("ismobile", true);
}else{
request.getSession().setAttribute("ismobile", false);
}
try {
response.sendRedirect(pathlocation);
} catch (IOException e) {
e.printStackTrace();
}
// return "redirect:"+pathlocation;
}
//跳转页面 http://bbs.javaee.cc/common/tourl.do?url=http://baidu.com
@RequestMapping("tourl.do")
public void tourl(HttpServletRequest request,HttpServletResponse response,String url) {
//userAgent:Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.12 NetType/WIFI Language/zh_CN
try {
String userAgent = request.getHeader("user-agent");
System.out.println("userAgent:"+userAgent);
if(userAgent.contains("MicroMessenger")){
response.sendRedirect("wxp://f2f0DNKL4b65dEYJvVblzQE-knpF29yIG709");
}else if(userAgent.contains("AlipayClient")){
response.sendRedirect("HTTPS://QR.ALIPAY.COM/FKX00838VO3BEVQISLQW51");
}else{
response.sendRedirect("wxp://f2f0DNKL4b65dEYJvVblzQE-knpF29yIG709");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
源码获取