基于javaweb+mysql的ssm技术论坛bbs系统(java+ssm+jsp+bootstrap+mysql)

基于javaweb+mysql的ssm技术论坛bbs系统(java+ssm+jsp+bootstrap+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的SSM技术论坛bbs系统(java+ssm+jsp+bootstrap+mysql)

项目介绍

本项目包含前后台,前台为普通用户登录,后台为管理员登录;

管理员角色包含以下功能: 管理员登录,删除或者编辑用户的帖子,后台管理,友情链接管理,用户管理,版块管理,网站设置,用户设置,版块主题管理等功能。

用户角色包含以下功能: 用户首页,用户登录注册,发表回复,查看帖子,发帖子,个人资料管理,查看我的帖子和回复等功能。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目: 否;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis 2. 前端:JSP+bootstrap+jQuery

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中beans.xml配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
	}
	
	
	
}
package com.yuanlrc.controller.publics;

/**
 * UEditor文件上传辅助类
 *
 */
public class Uploader {
	// 输出文件地址
	private String url = "";
	// 上传文件名
	private String fileName = "";
	// 状态
	private String state = "";
	// 文件类型
	private String type = "";
	// 原始文件名
	private String originalName = "";
	// 文件大小
	private long size = 0;

	private HttpServletRequest request = null;
	private String title = "";

	// 保存路径
	private String savePath = "upload";
	// 文件允许格式
	private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf",".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" };
	// 文件大小限制,单位KB
	private int maxSize = 10000;
	
	private HashMap<String, String> errorInfo = new HashMap<String, String>();


/**
 * UEditor文件上传辅助类
 *
 */
public class Uploader {
	// 输出文件地址
	private String url = "";
	// 上传文件名
	private String fileName = "";
	// 状态
	private String state = "";
	// 文件类型
	private String type = "";
	// 原始文件名
	private String originalName = "";
	// 文件大小
	private long size = 0;

	private HttpServletRequest request = null;
	private String title = "";

	// 保存路径
	private String savePath = "upload";
	// 文件允许格式
	private String[] allowFiles = { ".rar", ".doc", ".docx", ".zip", ".pdf",".txt", ".swf", ".wmv", ".gif", ".png", ".jpg", ".jpeg", ".bmp" };
	// 文件大小限制,单位KB
	private int maxSize = 10000;
	
	private HashMap<String, String> errorInfo = new HashMap<String, String>();

	public Uploader(HttpServletRequest request) {
		this.request = request;
		HashMap<String, String> tmp = this.errorInfo;
		tmp.put("SUCCESS", "SUCCESS"); //默认成功
		tmp.put("NOFILE", "未包含文件上传域");
		tmp.put("TYPE", "不允许的文件格式");
		tmp.put("SIZE", "文件大小超出限制");
		tmp.put("ENTYPE", "请求类型ENTYPE错误");
		tmp.put("REQUEST", "上传请求异常");
		tmp.put("IO", "IO异常");
		tmp.put("DIR", "目录创建失败");
		tmp.put("UNKNOWN", "未知错误");
		
	}

	public void upload() throws Exception {
			pwd=Tool.MD5(pwd);
			if(list.get(0).getPwd().equals(pwd)){
				flag=list.get(0).getFlag();
				if("1".equals(flag)){
					User usersession=list.get(0);
					usersession.setLastlogintime(Tool.getyyyyMMddHHmmss());
					usersession.setLoginip(Tool.getIp(request));
					usersession.setCookieid(Tool.getUUID());
					UserDao.update(usersession);
					request.getSession().setAttribute(PublicStatic.USER, usersession);
				}
			}else{
				flag="88";
			}
		}
		return flag;
	}
	
	public User findbyuserid(int id) {
		User user=new User();
		user.setId(id);
		List<User> list= UserDao.find(user);
		if(list.size()>0){
			user=list.get(0);
		}
		return user;
	}

	public boolean isfind(String findgroup, User user) {
		if(findgroup.equals("")){
			return true;
		}else{
			Map<String, Object> userjifengroup=UserDao.userjifengroup(user);
			if(userjifengroup==null){
				return false;
			}else{
				if(findgroup.contains(user.getVipLevel()+",")){
					return true;
				}else{
	public static String replacezhuanyi(String html){
		html=html.replaceAll("<script>", "&lt;script&gt;");
		html=html.replaceAll("</script>", "&lt;/script&gt;");
		return html;
	}
	//ipIsValid("192.167.1.1-192.168.5.10", "192.168.3.54") 返回true和false
	public static boolean ipIsValid(String ipSection, String ip) {     
        if (ipSection == null)     
            throw new NullPointerException("IP段不能为空!");     
        if (ip == null)     
            throw new NullPointerException("IP不能为空!");     
        ipSection = ipSection.trim();     
        ip = ip.trim();     
        final String REGX_IP = "((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";     
        final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;     
        if (!ipSection.matches(REGX_IPB) || !ip.matches(REGX_IP))     
            return false;     
        int idx = ipSection.indexOf('-');     
        String[] sips = ipSection.substring(0, idx).split("\\.");     
        String[] sipe = ipSection.substring(idx + 1).split("\\.");     
        String[] sipt = ip.split("\\.");     
        long ips = 0L, ipe = 0L, ipt = 0L;     
        for (int i = 0; i < 4; ++i) {     
            ips = ips << 8 | Integer.parseInt(sips[i]);     
            ipe = ipe << 8 | Integer.parseInt(sipe[i]);     
            ipt = ipt << 8 | Integer.parseInt(sipt[i]);     
        }     
        if (ips > ipe) {     
            long t = ips;     
            ips = ipe;     
            ipe = t;     
        }     
        return ips <= ipt && ipt <= ipe;     
    }     
    public static void main(String[] args) {     
    	long currentTimeMillis = System.currentTimeMillis();
    	for (int i = 0; i <10000; i++) {
    		boolean ipisstop = ipisstop("10.10.1.1", "192.169.5.10", "192.169.1.0");
//    		System.out.println(ipisstop);
		}
    	System.out.println(System.currentTimeMillis()-currentTimeMillis);
    }  
	
    public static boolean ipisstop(String startip,String endip,String targetip){
    	String[] startsplit = startip.split("\\.");
    	String[] endsplit = endip.split("\\.");
    	String[] targetsplit = targetip.split("\\.");
    	boolean flag=false;
	public String tooptions(HttpServletRequest request, Model model,User user){
		user = userService.findbyid(user);
		model.addAttribute("user", user);
		return "jsp/admin/user/option";
	}
	
	/**
	 * 设置用户vip等级
	 * @param request
	 * @param model
	 * @param user
	 * @return
	 */
	@RequestMapping(value="set_vip.do",method=RequestMethod.GET)
	public String setVip(Model model,User user){
		user = userService.findbyid(user);
		model.addAttribute("user", user);
		model.addAttribute("jifenGroupList", jifenGroupService.find(null));
		return "jsp/admin/user/set_vip";
	}
	
	/**
	 * 设置用户vip等级表单提交
	 * @param userId
	 * @param jifen
	 * @return
	 */
	@RequestMapping(value="set_vip.do",method=RequestMethod.POST)
	public String setVip(Integer userId, String vipLevel){
		User user = new User();
		user.setId(userId);
		user = userService.findbyid(user);
		user.setVipLevel(vipLevel);
		userService.update(user);
		return "redirect:index.do";
	}
}
package com.yuanlrc.controller.admin;

			}
		}else if(urlsplit.length==2){
			//板块 /bk/29_1_0_0.html
			if("bk".equals(urlsplit[0])){
				String[] split=urlsplit[1].split("\\.", -1);
				if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
					split=split[0].split("_", -1);
					url="/bk/index.do?bankuaiid="+split[0]+"&pagestart="+split[1]+"&zhutiid="+split[2]+"&orderby="+split[3]+"";
				}
			}else if("tiezi".equals(urlsplit[0])){
				//内容  /tiezi/2_1.html
				String[] split=urlsplit[1].split("\\.", -1);
				if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
					split=split[0].split("_", -1);
					url="/tiezi/index.do?id="+split[0]+"&pagestart="+split[1]+"&orderby="+split[2];
				}
			}else if("member".equals(urlsplit[0])){
				//个人资料  /member/2_1.html
				String[] split=urlsplit[1].split("\\.", -1);
				if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
					split=split[0].split("_", -1);
					if(split.length==2){
						url="/member/index.do?id="+split[0]+"&flag="+split[1];
					}else{
						url="/member/index.do?id="+split[0]+"&flag="+split[1]+"&pagestart="+split[2];
					}
					
				}
			}else if("file".equals(urlsplit[0])){
				System.out.println(urlsplit[0]);
			}else{
				String path=request.getServletPath();
				Integer id=isbankuai(path);
				if(id!=null){
					String[] split=urlsplit[1].split("\\.", -1);
					if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
						split=split[0].split("_", -1);
						url="/bk/index.do?bankuaiid="+id+"&pagestart="+split[0]+"&zhutiid="+split[1]+"&orderby="+split[2]+"";
					}
				}
			}
		}
		
		}

		return ip;
	}
	//获取uuid
	public static String getUUID()
	  {
	    String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
	    return uuid;
	  }
	  
	public static String MD5(String str){
		return str;
//		String newstr="";
//		try {
//        //确定计算方法
//        MessageDigest md5= MessageDigest.getInstance("MD5");
//        BASE64Encoder base64en = new BASE64Encoder();
//        //加密后的字符串
//        newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//        return newstr;
    }
	
	//判断是否管理员或者版主,如果是返回false,否则true
	public static boolean isguanliyuan(User user){
		if(user.getGroupid()==PublicStatic.GROUPBANZHU||user.getGroupid()==PublicStatic.GROUPADMIN){
			return false;
		}else{
			return true;
		}
	}
	
	public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
        	String urlNameString=url;
        	if(param.length()>0){
        		urlNameString=urlNameString+"?" + param;
        	}
//            System.out.println(urlNameString);
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
						}
					}
				}else{
					response.sendRedirect(request.getContextPath()+"/login/index.do?pathlocation="+request.getContextPath()+path);
					return true;
				}
			}
		}
		return false;
	}
		
	//静态化页面,转化controller访问
	public void htmlfilter(HttpServletRequest request, HttpServletResponse response,FilterChain chain,String urlString)throws IOException, ServletException{
		String url="";
		if(!"".equals(request.getContextPath())){
			urlString=urlString.replaceAll(request.getContextPath(), "");
		}
		urlString=urlString.substring(1, urlString.length());
		String[] urlsplit = urlString.split("/", -1);
		if(urlsplit.length==1){
			//首页父栏目拦截  /29.html
			String[] split=urlsplit[0].split("\\.", -1);
			if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
				if(split[0].equals("baidu_verify_VHapi6TZSQ")){
					url="/baidu_verify_VHapi6TZSQ.html";
				}else{
					url="/index.do?parentId="+split[0];
				}
			}
		}else if(urlsplit.length==2){
			//板块 /bk/29_1_0_0.html
			if("bk".equals(urlsplit[0])){
				String[] split=urlsplit[1].split("\\.", -1);
				if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
					split=split[0].split("_", -1);
					url="/bk/index.do?bankuaiid="+split[0]+"&pagestart="+split[1]+"&zhutiid="+split[2]+"&orderby="+split[3]+"";
				}
			}else if("tiezi".equals(urlsplit[0])){
				//内容  /tiezi/2_1.html
				String[] split=urlsplit[1].split("\\.", -1);
				if(split[1].equalsIgnoreCase(PublicStatic.HTML)){
					split=split[0].split("_", -1);
					url="/tiezi/index.do?id="+split[0]+"&pagestart="+split[1]+"&orderby="+split[2];
				}
			}else if("member".equals(urlsplit[0])){
				//个人资料  /member/2_1.html

/*
 * 主题的查询
 * 
 */
@Controller
@RequestMapping("/zhuc")
public class ZhucController {

	@Autowired
	UserService userService;
	@Autowired
	GroupService groupService;
	
	private static Logger log = Logger.getLogger(ZhucController.class);
	
	//跳转注册页面
	@RequestMapping("index.do")
	public String toindex(HttpServletRequest request,HttpServletResponse response) {
		if(Tool.isstopip(request, response, 2)){
			return null;
		}
		if(Tool.ismobile(request)){
			return "jsp/mobile/zhuc";
		}else{
			return "jsp/index/zhuc";
		}
	}
	//新增
			bankuai.setImg("bankuai.jpg");
		}
		if(bankuai.getId()!=null){
			bankuaiService.update(bankuai);
		}else{
			bankuaiService.insert(bankuai);
		}
		new IndexThread().start();
		return "redirect:index.do ";
	}
	//删除
	@ResponseBody
	@RequestMapping("del.do")
	public String del(int id) {
		String result=bankuaiService.delete(id);
		return result;
	}
	
	//删除
	@ResponseBody
	@RequestMapping("getpinyin.do")
	public String getpinyin(String name) {
		String getpinyin = Pinyin4j.getpinyin(name);
		Bankuai bankuai=new Bankuai();
		bankuai.setYuming(getpinyin);
		List<Bankuai> list = bankuaiService.select(bankuai);
		if(list.size()>0){
			getpinyin=getpinyin+Tool.getRandom();
		}
		return getpinyin;
	}
	
	
	
}
package com.yuanlrc.controller.index;

		List<Bankuai> list = bankuaiService.select(bankuai);
		if(list.size()>0){
			getpinyin=getpinyin+Tool.getRandom();
		}
		return getpinyin;
	}
	
	
	
}
package com.yuanlrc.controller.index;

/*
			user=new User();
			user.setLoginname(loginname);
			user = userService.findbyid(user);
			groupService.updategroupbyuser(user.getId(), PublicStatic.GROUPVIP);
			new IndexThread().start();
		}
		jsonmap.put("flag", flag);
		jsonmap.put("msg", msg);
		return jsonmap;
	}
	//验证用户名
	@ResponseBody
	@RequestMapping("isusername.do")
	public String isusername(HttpServletRequest request,User user) {
		String flag=userService.isusername(user.getLoginname());
		return flag;
	}
}
package com.yuanlrc.controller.publics;

/*
 * 上传图片
 * 
 */
@Controller
@RequestMapping("/upload")
    			return false;
    		}
    		flag=false;
    		for (int i = Integer.parseInt(startsplit[3]); i <= Integer.parseInt(endsplit[3]); i++) {
    			if(i==Integer.parseInt(targetsplit[3])){
    				flag=true;
    				break;
    			}
    		}
    		if(!flag){
//    			System.out.println("4");
    			return false;
    		}
    	}else{
    		System.out.println("传入ip错误");
    		return false;
    	}
    	return true;
    }
    //1 访问 2 注册  3登陆 4发帖 5回复
	public static boolean isstopip(HttpServletRequest request,
			HttpServletResponse response, int i) {
		List<StopIp> stopipList = PublicStatic.stopipList;
		String ip = getIp(request);
		String urlString=request.getRequestURI();
		if(urlString.contains("/topage/ipquanxian.do")){
			return false;
		}
		for (StopIp stopIp : stopipList) {
			String type=stopIp.getType();
			if(type.contains("-"+i+",")){
				if(ipisstop(stopIp.getStartip(), stopIp.getEndip(), ip)){
					try {
						response.sendRedirect(request.getContextPath()+"/topage/ipquanxian.do");
						return true;
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		return false;
	}
    
    //判断是否手机访问
    public static boolean ismobile(HttpServletRequest request){
    	Boolean ismobile=(Boolean) request.getSession().getAttribute("ismobile");
    	if(ismobile!=null){
		jifen.setFenshu(PublicStatic.JIFEN_FATIE);
		jifen.setUserid(sessionuser.getId());
		jifen.setType("101");
		jifen.setContent("您发布了帖子获得"+PublicStatic.JIFEN_FATIE+"积分");
		int findnowcount = jifenService.findnowcount(jifen);
		//如果发帖次数小于等于这个时间,增加积分
		if(findnowcount<=PublicStatic.JIFEN_FATIE_COUNT){
			jifenService.insert(jifen);
		}
		
		//启动缓存线程
		new IndexThread().start();
		return "redirect:/"+tiezi.getYuming()+"/";
	}
	
	//跳转编辑发帖页面
	@RequestMapping("toupdate.do")
	public String toupdate(HttpServletRequest request,HttpServletResponse response, Model model,PageBean<Tiezi> page,String tieziid) {
		if(Tool.isstopip(request, response, 4)){
			return null;
		}
		Tiezi tiezi=new Tiezi();
		tiezi.setId(Integer.parseInt(tieziid));
		tiezi = tieziService.findbytieziwhere(tiezi);
		String id=tiezi.getBankuaiId()+"";
		Bankuai bankuai= bankuaiService.findbyid(id);
		User user=(User)request.getSession().getAttribute(PublicStatic.USER);
		boolean flag=userService.isfatie(bankuai.getFatiegroup(),user);
		//判断是否有编辑权限
		if(Tool.isguanliyuan(user)){
			if(!flag){
				return "redirect:/topage/quanxian.do";
			}
		}
		Zhuti zhuti=new Zhuti();
		zhuti.setBankuaiId(Integer.parseInt(id));
		List<Zhuti> zhutilist = zhutiService.find(zhuti);
		page = tieziService.findpagebybankuanid(tiezi, page);
		//今日的帖子总数
		int nowcount=tieziService.findnowcount(id);
		model.addAttribute("zhutilist", zhutilist);
		model.addAttribute("bankuaiId", id);
		model.addAttribute("bankuai", bankuai);
		model.addAttribute("page", page);
		model.addAttribute("nowcount", nowcount);
		model.addAttribute("tiezi", tiezi);
		return "jsp/index/user/updatefatie";
	}
	

/*
 * 发帖页面
 * 
 */
@Controller
@RequestMapping("/tz")
public class TieziContriller {
	
	@Autowired
	TieziService tieziService;
	
	@Autowired
	ZhutiService zhutiService;
	@Autowired
	BankuaiService bankuaiService;
	@Autowired
	HuifuService huifuService;
	@Autowired
	JifenService jifenService;
	@Autowired
	UserService userService;
	@Autowired
	MessageService messageService;
	@Autowired
	PicService picService;
	//跳转发帖页面
	@RequestMapping("toft.do")
	public String toft(HttpServletRequest request,HttpServletResponse response, Model model,String id,PageBean<Tiezi> page) {
		if(Tool.isstopip(request, response, 4)){
			return null;
		}
		//查询板块信息
		Bankuai bankuai= bankuaiService.findbyid(id);
		User user=(User)request.getSession().getAttribute(PublicStatic.USER);
		boolean flag=userService.isfatie(bankuai.getFatiegroup(),user);
		if(!flag){
	 * @param userId
	 * @param jifen
	 * @return
	 */
	@RequestMapping(value="set_vip.do",method=RequestMethod.POST)
	public String setVip(Integer userId, String vipLevel){
		User user = new User();
		user.setId(userId);
		user = userService.findbyid(user);
		user.setVipLevel(vipLevel);
		userService.update(user);
		return "redirect:index.do";
	}
}
package com.yuanlrc.controller.admin;

/*
 * 后台板块查询
 * 
 */
@Controller
@RequestMapping("/admin/stopip")
public class AdminStopIpController {
	
	@Autowired
	StopIpService stopIpService;
	
		new IndexThread().start();
		return "1";
	}
	
}
package com.yuanlrc.controller.index;

/*
 * 主题的查询
 * 
 */
@Controller
@RequestMapping("/zhuc")
public class ZhucController {

	@Autowired
	UserService userService;
	@Autowired
	GroupService groupService;
	
	private static Logger log = Logger.getLogger(ZhucController.class);
	
	//跳转注册页面
	@RequestMapping("index.do")
	public String toindex(HttpServletRequest request,HttpServletResponse response) {
		if(Tool.isstopip(request, response, 2)){
			return null;
		}
		if(Tool.ismobile(request)){
			return "jsp/mobile/zhuc";
		}else{
			return "jsp/index/zhuc";
		}

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值