基于javaweb和mysql的ssm大学生兼职论坛(java+ssm+jsp+jquery+layui+mysql)
基于javaweb和mysql的ssm大学生兼职论坛(java+ssm+jsp+jquery+layui+mysql)
私信源码获取及调试交流
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM大学生兼职论坛(java+ssm+jsp+jquery+layui+mysql)
项目介绍
该项目是一个大学生校园兼职讨论平台,分为前台和后台功能,主要用户有三种角色:分别是商家、学生、管理员。商家可以发布兼职信息,发布后,管理员进入后台确认信息是否有效,并且审核该兼职信息。学生登录平台后,可以查看兼职信息,并且,可以在线和商家聊天,聊天的内容持久化到mysql数据库中。 该网站还有论坛交流的功能,用户可以在论坛发表贴子,并且,可以在帖子下面回复。论坛版块设置有3块广告区,管理员可以在后台对广告进行增删改查。 整体功能包括:论坛交流,帖子发布,个人中心,用户管理,聊天管理,帖子管理。
环境需要
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版本;
技术栈
- 后端:Spring SpringMVC MyBatis 2. 前端:JSP+jQuery+Layui
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 将项目中yml配置文件中的数据库配置改为自己的配置 3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;
前台系统:http://localhost:8080/moonlighting/
后台系统:http://localhost:8080/moonlighting/manager/login/goServerLogin.action
/**
* 获取一个容器的size
*
* @param intervalDays
* @return
*/
public static int getColLen(Collection list)
{
return (list == null)?0:list.size();
}
/**判断是否为高清:0标清、1 高标清
* @param type
* @return
*/
public static boolean isHD(String[] type){
if(CommonUtil.isEmpty(type)){
return false ;
}
for(String str :type){
if(str.equals("MPEG-2-HD")
||str.equals("H.264-HD")){
return true ;
}
}
return false;
}
public static boolean isHD(String vedioType){
if(CommonUtil.isEmpty(vedioType)){
return false ;
}else if(vedioType.equals("1")){
return true ;
}
return false ;
}
/**判断是否为高清:0标清、1 高标清
* @param type
* @return
*/
public static String isHDStr(String[] type){
for(String str :type){
if(str.equals("MPEG-2-HD")
||str.equals("H.264-HD")){
return "1" ;
}
}
public ModelAndView goUpdateForumReply(ModelAndView mv,Integer replyId){
ForumReply forumReply = forumReplyService.getForumReplyById(replyId);
mv.addObject("forumReply", forumReply);
mv.setViewName("server/forumManage/updateReply");
return mv;
}
//编辑评论
@RequestMapping("/updateForumReply")
public void updateForumReply(HttpServletResponse response,ForumReply forumReply){
forumReplyService.updateForumReply(forumReply);
output(response,JsonUtil.buildFalseJson(0, "编辑成功!"));
}
//删除评论
@RequestMapping("/deleteForumReply")
public void deleteForumReply(HttpServletResponse response,ForumReply forumReply){
forumReplyService.deleteForumReply(forumReply.getReplyId());
output(response,JsonUtil.buildFalseJson(0, "删除成功!"));
}
}
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private SystemUpsetService systemUpsetService;
}
return mv;
}
//执行登录
@RequestMapping(value="/doLogin")
public void doLogin(HttpServletRequest request,HttpServletResponse response,User user){
User pcUser = (User) request.getSession().getAttribute("pcUser");
if(pcUser == null){
if(user.getUserId() == null){
output(response,JsonUtil.buildFalseJson(1,"账号不能为空"));
}
if(user.getPassword().equals("") || user.getPassword() == null){
output(response,JsonUtil.buildFalseJson(1,"密码不能为空"));
}
User userInfo = userService.getUserById(user.getUserId());
if(userInfo == null){
output(response,JsonUtil.buildFalseJson(1,"账号不正确或系统不存在该用户"));
}
if(!userInfo.getPassword().equals(MD5Util.MD5Encode(user.getPassword(),"utf-8"))){
output(response,JsonUtil.buildFalseJson(1,"您输入的密码不正确,请重试"));
}
//判断账号是否被禁用
if(userInfo.getIsEffect() != 1){
output(response,JsonUtil.buildFalseJson(1,"对不起您的账号已被禁用"));
}else{
//执行登陆后台的逻辑
request.getSession().setAttribute("pcUser",userInfo);
output(response,JsonUtil.buildFalseJson(0,"登录成功"));
}
}else{
output(response,JsonUtil.buildFalseJson(0,"您已登录,无需重复登录"));
}
}
//退出登录
@RequestMapping(value="/outLogin")
public void outLogin(HttpServletRequest request,HttpServletResponse response,User user){
User pcUser = (User) request.getSession().getAttribute("pcUser");
if(pcUser != null){
//销毁session
request.getSession().invalidate();;
output(response, JsonUtil.buildFalseJson(0, "退出登录成功!"));
vo.setStartRow((vo.getPage() -1)*vo.getSize());
}
page.setTotal(workService.getWorkListCount(work));
page.setRows(workService.getWorkList(work, (vo.getPage()-1) * vo.getSize(), vo.getSize()));
}
mv.addObject("page", page);
//系统配置
SystemUpset systemUpset = new SystemUpset();
List<SystemUpset> systemUpsets = systemUpsetService.getSystemUpsetList(systemUpset, null, null);
if(systemUpsets.size() > 0){
mv.addObject("systemUpset", systemUpsets.get(0));
}
//轮播图
Banner banner = new Banner();
banner.setIsEffect(1);
List<Banner> banners = bannerService.getBannerList(banner, null, null);
mv.addObject("banners", banners);
User pcUser = (User) request.getSession().getAttribute("pcUser");
mv.addObject("pcUser", pcUser);
if(vo.getPage() != 1){
isScroll = "t";
}
mv.addObject("isScroll", isScroll);
mv.setViewName("pc/index");
return mv;
}
//首页获取分类兼职
@RequestMapping("/getWorkByWorkCate")
public void getWorkByWorkCate(HttpServletResponse response,Work work){
work.setIsEffect(1);
work.setIsAuditing(1);
Integer count = workService.getWorkListCount(work);
List<Work> works = workService.getWorkList(work, 0, 8);
SimpleDateFormat cTime = new SimpleDateFormat("yyyy-MM-dd");
if(works.size() > 0){
for(int i = 0; i<works.size(); i++){
works.get(i).setCreateTimes(cTime.format(works.get(i).getCreateTime()));
}
}
* @return
*/
public static String getCurrURLEncoder(String resourceName){
try {//临时转码:中山标清中间件不认中文 及%, by 903702
if (resourceName.length()>6){
resourceName = resourceName.substring(6)+"...";//最大6个字符
}
resourceName = URLEncoder.encode(resourceName,"UTF-8");
resourceName = resourceName.replace("%","-");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return resourceName;
}
/**
* 判断价格对不对(一般价格会是大于0的数)
*
* @see [相关类/方法]
* @since [DHM.Core.IEPGM-V200R001]
*/
public static boolean isDouble(String str)
{
if (str != null && !str.trim().equals(""))
{
if (str.matches("^[0-9]+[.]?[0-9]*$"))
{
return true;
}
}
return false;
}
/**
* 是否是整形数字
* <一句话功能简述>
* <功能详细描述>
*
}
if(limit == null){
limit = 10;
}
int totalCount = forumService.getForumListCount(forum);
List<Forum> list = forumService.getForumList(forum,(page-1) * limit, limit);
output(response,JsonUtil.buildJsonByTotalCount(list, totalCount));
}
//去编辑帖子
@RequestMapping("/goUpdateForum")
public ModelAndView goUpdateUser(ModelAndView mv,Integer forumId){
Forum forum = forumService.getForumById(forumId);
mv.addObject("forum", forum);
mv.setViewName("server/forumManage/updateForum");
return mv;
}
//编辑帖子
@RequestMapping("/updateForum")
public void updateForum(HttpServletResponse response,Forum forum){
forumService.updateForum(forum);
output(response,JsonUtil.buildFalseJson(0, "编辑成功!"));
}
//禁用兼职
@RequestMapping("/deleteForum")
public void deleteForum(HttpServletResponse response,Forum forum){
forumService.updateForum(forum);
output(response,JsonUtil.buildFalseJson(0, "禁用成功!"));
}
}
@Controller
@RequestMapping(value="/server/chat")
public class ChatController extends BaseUtil{
@Autowired
private ChatService chatService;
//每页数
page.setSize(vo.getSize());
if (vo != null){
//判断当前页
if(vo.getPage() != null) {
page.setPage(vo.getPage());
vo.setStartRow((vo.getPage() -1)*vo.getSize());
}
page.setTotal(noticeService.getNoticeListCount(notice));
page.setRows(noticeService.getNoticeList(notice, (vo.getPage()-1) * vo.getSize(), vo.getSize()));
}
mv.addObject("page", page);
mv.setViewName("pc/notice");
return mv;
}
//获取公告
@RequestMapping(value="/getNotice.action")
public void getNotice(Notice notice,HttpServletRequest request,HttpServletResponse response){
notice = noticeService.getNoticeById(notice.getId());
SimpleDateFormat cTime = new SimpleDateFormat("yyyy-MM-dd");
notice.setCreateTimes(cTime.format(notice.getCreateTime()));
output(response,JsonUtil.objectToJson(notice));
}
}
@Controller
@RequestMapping("/imageUpload")
public class ImageUploadController extends BaseUtil {
//上传头像
@RequestMapping(value = "/headerImage")
public void headerImage(@RequestParam(value = "file") CommonsMultipartFile file, HttpServletRequest request,
//
// public static String getMsg(String key)
// {
// return IepgCfg.getErrCodeCfg().getErrMsg(key);
// }
/**
* MD5 加密
*/
public static String getMD5Str(String str)
{
MessageDigest messageDigest = null;
try
{
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
}
catch (NoSuchAlgorithmException e)
{
return "";
}
catch (UnsupportedEncodingException e)
{
return "";
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++)
{
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
public ModelAndView goUserList(ModelAndView mv){
mv.setViewName("server/userManage/userList");
return mv;
}
//获取用户列表
@RequestMapping("/getUserList")
public void getUserList(HttpServletResponse response,User user,Integer page,Integer limit){
if(page == null){
page = 1;
}
if(limit == null){
limit = 10;
}
Integer totalCount = userService.getUserListCount(user);
List<User> list = userService.getUserList(user,(page-1) * limit, limit);
output(response,JsonUtil.buildJsonByTotalCount(list, totalCount));
}
//去添加用户
@RequestMapping("/goAddUser")
public ModelAndView goAddUser(ModelAndView mv){
mv.setViewName("server/userManage/addUser");
return mv;
}
//添加用户
@RequestMapping("/addUser")
public void addUser(HttpServletResponse response,User user){
user.setCreateTime(new Date());
user.setPassword(MD5Util.MD5Encode(user.getPassword(),"utf-8"));
userService.addUser(user);
output(response,JsonUtil.buildFalseJson(0, "添加成功!"));
}
//去编辑用户
@RequestMapping("/goUpdateUser")
public ModelAndView goUpdateUser(ModelAndView mv,Integer userId){
User user = userService.getUserById(userId);
mv.addObject("user", user);
mv.setViewName("server/userManage/updateUser");
return mv;
}
//编辑用户
@RequestMapping("/updateUser")
public void updateUser(HttpServletResponse response,User user){
@Controller
@RequestMapping("/server/banner")
public class BannerController extends BaseUtil{
@Autowired
private BannerService bannerService;
//去轮播列表
@RequestMapping("/goBannerList")
public ModelAndView goBannerList(ModelAndView mv){
mv.setViewName("server/bannerManage/bannerList");
return mv;
}
//获取轮播列表
@RequestMapping("/getBannerList")
public void getBannerList(HttpServletResponse response,Banner banner,Integer page,Integer limit){
if(page == null){
page = 1;
}
if(limit == null){
limit = 10;
}
int totalCount = bannerService.getBannerListCount(banner);
List<Banner> list = bannerService.getBannerList(banner,(page-1) * limit, limit);
output(response,JsonUtil.buildJsonByTotalCount(list, totalCount));
}
//去添加轮播
@RequestMapping("/goAddBanner")
public ModelAndView goAddBanner(ModelAndView mv){
mv.setViewName("server/bannerManage/addBanner");
return mv;
}
//添加轮播
@RequestMapping("/addBanner")
public void addBanner(HttpServletRequest request,HttpServletResponse response,Banner banner){
User serverUser = (User) request.getSession().getAttribute("serverUser");
banner.setCreateTime(new Date());
banner.setUserId(serverUser.getUserId());
bannerService.addBanner(banner);
output(response,JsonUtil.buildFalseJson(0, "添加成功!"));
}
//去编辑轮播
}
writer.print("<nav><ul class=\"pagination flex-box\" style=\"text-align:center;\">");
writer.print("<li><a href=\"javascript:;\">共"+pageCount+"页</a></li>");
//显示“上一页”按钮
if (page.getPage() > 1) {
String preUrl = append(url, "page", page.getPage() - 1);
preUrl = append(preUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + preUrl + "\">上页</a></li>");
} else {
writer.print("<li class=\"disabled\"><a href=\"javascript:;\">上页</a></li>");
}
//显示当前页码的前2页码和后两页码
//若1 则 1 2 3 4 5, 若2 则 1 2 3 4 5, 若3 则1 2 3 4 5,
//若4 则 2 3 4 5 6 ,若10 则 8 9 10 11 12
int indexPage = (page.getPage() - 2 > 0)? page.getPage() - 2 : 1;
for(int i=1; i <= number && indexPage <= pageCount; indexPage++, i++) {
if(indexPage == page.getPage()) {
writer.print( "<li class=\"active\"><a href=\"javascript:;\">"+indexPage+"<span class=\"sr-only\"></span></a></li>");
continue;
}
String pageUrl = append(url, "page", indexPage);
pageUrl = append(pageUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + pageUrl + "\">"+ indexPage +"</a></li>");
}
//显示“下一页”按钮
if (page.getPage() < pageCount){
String nextUrl = append(url, "page", page.getPage() + 1);
nextUrl = append(nextUrl, "rows", page.getSize());
writer.print("<li><a href=\"" + nextUrl + "\">下页</a></li>");
} else {
writer.print("<li class=\"disabled\"><a href=\"javascript:;\">下页</a></li>");
}
writer.print("</ul></nav>");
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
private String append(String url, String key, int value) {
return append(url, key, String.valueOf(value));
// work.setWorkCategory(new String(work.getWorkCategory().getBytes("ISO8859-1"),"UTF-8"));
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
}
System.out.println(work.getWorkCategory());
work.setIsEffect(1);
work.setIsAuditing(1);
if(vo.getSize()!=8){
vo.setSize(8);
}
if(vo.getPage()==null){
vo.setPage(1);
}
//每页数
page.setSize(vo.getSize());
if (vo != null){
//判断当前页
if(vo.getPage() != null) {
page.setPage(vo.getPage());
vo.setStartRow((vo.getPage() -1)*vo.getSize());
}
page.setTotal(workService.getWorkListCount(work));
page.setRows(workService.getWorkList(work, (vo.getPage()-1) * vo.getSize(), vo.getSize()));
}
mv.addObject("page", page);
//系统配置
SystemUpset systemUpset = new SystemUpset();
List<SystemUpset> systemUpsets = systemUpsetService.getSystemUpsetList(systemUpset, null, null);
if(systemUpsets.size() > 0){
mv.addObject("systemUpset", systemUpsets.get(0));
}
//轮播图
Banner banner = new Banner();
banner.setIsEffect(1);
List<Banner> banners = bannerService.getBannerList(banner, null, null);
mv.addObject("banners", banners);
User pcUser = (User) request.getSession().getAttribute("pcUser");
mv.addObject("pcUser", pcUser);
if(vo.getPage() != 1){
isScroll = "t";
}
mv.addObject("isScroll", isScroll);
mv.setViewName("pc/index");
public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> arg0) {
session = arg0;
}
}
@Controller
@RequestMapping("/server/user")
public class UserController extends BaseUtil{
@Autowired
private UserService userService;
//去用户列表
@RequestMapping("/goUserList")
public ModelAndView goUserList(ModelAndView mv){
mv.setViewName("server/userManage/userList");
return mv;
}
//获取用户列表
@RequestMapping("/getUserList")
public void getUserList(HttpServletResponse response,User user,Integer page,Integer limit){
if(page == null){
page = 1;
}
if(limit == null){
limit = 10;
}
Integer totalCount = userService.getUserListCount(user);
List<User> list = userService.getUserList(user,(page-1) * limit, limit);
output(response,JsonUtil.buildJsonByTotalCount(list, totalCount));
}
//去添加用户
@RequestMapping("/goAddUser")
* @param userId
* @return
*/
public static String getOrderBackurl(String url,String orderResult,String userId){
userId = userId==null?"":userId;
String parmStr = "orderResult="+orderResult+"&userId="+userId;
if(url != null){
if(url.indexOf(".action?")<=0 ){
url = url+"?"+parmStr;
}else{
url = url+"&"+parmStr;
}
}
return url;
}
/**
* 计算一个日期N天之前的日期
*
* @param intervalDays
* @return
*/
public static Date getTodayBefore(int intervalDays,String dateFormat) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -intervalDays);
if ("Date".equals(dateFormat)) {
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
Date date = calendar.getTime();
// SimpleDateFormat format = new SimpleDateFormat(dateFormat);
// String dayBefore = format.format(date);
return date;
}
/**
* 计算一个日期N天之前的日期
*
* @param intervalDays
* @return
*/
public static Date getToday2Before(int intervalDays) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -intervalDays);
Date date = calendar.getTime();
public static String getCurrURLEncoder(String resourceName){
try {//临时转码:中山标清中间件不认中文 及%, by 903702
if (resourceName.length()>6){
resourceName = resourceName.substring(6)+"...";//最大6个字符
}
resourceName = URLEncoder.encode(resourceName,"UTF-8");
resourceName = resourceName.replace("%","-");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return resourceName;
}
/**
* 判断价格对不对(一般价格会是大于0的数)
*
* @see [相关类/方法]
* @since [DHM.Core.IEPGM-V200R001]
*/
public static boolean isDouble(String str)
{
if (str != null && !str.trim().equals(""))
{
if (str.matches("^[0-9]+[.]?[0-9]*$"))
{
return true;
}
}
return false;
}
/**
* 是否是整形数字
* <一句话功能简述>
* <功能详细描述>
*
* @see [相关类/方法]
* @since [DHM.Core.IEPGM-V200R001]
*/
public static boolean isInt2(String str)
{
if (str != null)
{
if (str.matches("\\d+"))
{
return true;
}
*/
public static Date getToday2After(int intervalDays) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, intervalDays);
Date date = calendar.getTime();
return date;
}
public static Date getTodayBeforeHour(int afterHuor) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR, -afterHuor);
Date date = calendar.getTime();
return date;
}
/**
* 获取指定时间
* @param dateTime
* @param field
* @param amount
* @return
*/
public static Date getDateTime(Date dateTime,int field ,int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateTime);
calendar.add(field, amount);
Date date = calendar.getTime();
return date;
}
/**
* 获取一个容器的size
*
* @param intervalDays
* @return
*/
public static int getColLen(Collection list)
{
* 如果传入的字符串第一个字符就是数字,例如name=360度说法,则不处理,直接返回原字符串
* @param name
* @return
*/
public static String getNameRemoveDigital(String name)
{
String result = name;
int index = 0;
for (int i = 0; i < name.length(); i++)
{
char ch = name.charAt(i);
if (ch >= '0' && ch <= '9')
{
index = i;
break;
}
}
if (index == 0)
{
return result;
}
result = name.substring(0, index);
return result;
}
/**
* 过虑字符串中的字母,用于用户分组鉴权的时候取模
* @param name
* @return String
*/
public static String filtrateLetters (String userCode) {
StringBuffer result = new StringBuffer(userCode);
int count = 0;
for (int i = 0; i < userCode.length(); i++)
{
char ch = userCode.charAt(i);
if ((ch >= 'a' && ch <= 'z')||(ch>='A'&&ch<='Z'))
{
result.deleteCharAt(i-count);
count++;
}
}
return result.toString();
}
/** 将 "时:分:秒" 这种格式的时间长度转换为秒数
* 如"00:22:30" 转换为 "1350"。
*
* @see [相关类/方法]
* @since [DHM.Core.IEPGM-V200R001]
*/
public static boolean isDouble(String str)
{
if (str != null && !str.trim().equals(""))
{
if (str.matches("^[0-9]+[.]?[0-9]*$"))
{
return true;
}
}
return false;
}
/**
* 是否是整形数字
* <一句话功能简述>
* <功能详细描述>
*
* @see [相关类/方法]
* @since [DHM.Core.IEPGM-V200R001]
*/
public static boolean isInt2(String str)
{
if (str != null)
{
if (str.matches("\\d+"))
{
return true;
}
}
return false;
}
/**
* 封转订购时返回的backurl
* @param url
* @param orderResult
* @param userId
* @return
*/
public static String getOrderBackurl(String url,String orderResult,String userId){






更多推荐

所有评论(0)