作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
功能简介
高校社团管理系统分为前后台,角色分为三种:管理员、社长、普通社员。
超级管理员角色包含以下功能:会员管理,物品管理,活动审批,系统用户管理,社团添加删除等功能。
社长角色包含以下功能:社团管理员登录,会员管理,物品管理,活动管理,查询社团信息,密码修改等功能。
普通社员角色包含以下功能:社员登录,申请入社,物品查看,活动申请等功能。
前台主要是展示社团列表、社团风采、社团活动、新闻列表
前台登录后进入个人中心,在个人中心能申请加入社团、查看参加的社团活动等
后台为管理员与社长使用,应用于对社团的管理及内容发布等。
环境需要
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.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 8.0版本;
使用技术
使用技术:servlet+jsp+mysql 8.0
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;注:数据库使用mysql 8.0,注意版本要匹配,否则可能会产生连接异常的情况,
2. 将项目中db.properties配置文件中的数据库配置改为自己的配置
3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;
前台地址:http://localhost:8080/team/front/login.jsp
普通社员账号:苏c 密码:123
后台地址:http://localhost:8080/team/mui/login.jsp
管理员账号:sys 密码:123456
社长账号:苏悲 密码:123456
运行截图
前台界面
后台界面
相关代码
DownloadController
package com.so.system.controller;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DownloadController
*/
@WebServlet(name = "download", urlPatterns = { "/download" })
public class DownloadController extends HttpServlet {
private static final long serialVersionUID = 1L;
// 字符编码
private final String ENCODING = "GB2312";
// 内容类型
private final String CONTENT_TYPE = "text/html;charset=gb2312";
// 要下载的文件存放的路径
private String downloadfiledir = "d:\\temp\\";
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String realPath = request.getSession().getServletContext().getRealPath("");
// 设置request对象的字符编码
request.setCharacterEncoding(ENCODING);
// 从request中取出要下载文件的名字
String filename = request.getParameter("filename");
if (filename == null || filename.trim().equals("")) {
// 设置response对象的ContentType
response.setContentType(CONTENT_TYPE);
// 输出错误信息
PrintWriter out = response.getWriter();
out.println("<font color=red>输入的文件名无效!</font>");
out.close();
} else {
// 下载文件的完整路径名
String fullfilename = realPath + filename;
System.out.println("下载文件:" + fullfilename);
// 根据文件的类型设置response对象的ContentType
String contentType = getServletContext().getMimeType(fullfilename);
if (contentType == null)
contentType = "application/octet-stream";
response.setContentType(contentType);
// 设置response的头信息
response.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(new FileInputStream(fullfilename));
// 定义输出字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义response的输出流
os = new BufferedOutputStream(response.getOutputStream());
// 定义buffer
byte[] buffer = new byte[4 * 1024]; // 4k Buffer
int read = 0;
// 从文件中读入数据并写到输出字节流中
while ((read = is.read(buffer)) != -1) {
baos.write(buffer, 0, read);
}
// 将输出字节流写到response的输出流中
os.write(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭输出字节流和response输出流
os.close();
is.close();
}
}
}
}
MenuController
package com.so.system.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.so.system.bean.Menu;
import com.so.system.bean.MenuRole;
import com.so.system.dao.MenuDao;
import com.so.system.dao.MenuRoleDao;
import com.so.system.service.MenuService;
import com.so.system.service.impl.MenuServiceImpl;
import com.so.utils.Page;
import com.so.utils.StringUtils;
@WebServlet("/menu")
public class MenuController extends HttpServlet {
private static final long serialVersionUID = 1L;
private String contextPath = "";
MenuDao menuDao=new MenuDao();
MenuService menuService = new MenuServiceImpl();
MenuRoleDao menuRoleDao = new MenuRoleDao();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
contextPath = request.getServletContext().getContextPath();
String method = request.getParameter("method");
if ("add".equals(method)) {
add(request,response);
}else if ("delete".equals(method)) {
delete(request, response);
}else if ("list".equals(method)) {
list(request, response);
}else if ("update".equals(method)) {
update(request, response);
}else if ("form".equals(method)) {
form(request, response);
}else if ("save".equals(method)) {
save(request, response);
}else if ("setMenuRole".equals(method)) {
setMenuRole(request, response);
}else if ("saveMenuRole".equals(method)) {
saveMenuRole(request, response);
}
}
//添加
private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String href = request.getParameter("href");
String target = request.getParameter("target");
String isShow = request.getParameter("isShow");
String sort = request.getParameter("sort");
String parentId = request.getParameter("parentId");
String parentIds = request.getParameter("parentIds");
String remarks = request.getParameter("remarks");
Menu menu = new Menu();
menu.setName(name);
menu.setHref(href);
menu.setTarget(target);
menu.setIsShow(isShow);
menu.setSort(sort);
menu.setParentId(parentId);
menu.setParentIds(parentIds);
menu.setRemarks(remarks);
menuService.add(menu);
response.sendRedirect(contextPath+"/menu?method=list");
}
//添加保存
protected void save(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Menu menu = new Menu();
//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
String savePath = this.getServletContext().getRealPath("/upload");
File file = new File(savePath);
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath+"目录不存在,需要创建");
//创建目录
file.mkdir();
}
//消息提示
String msg = "";
try{
//使用Apache文件上传组件处理文件上传步骤:
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
//3、判断提交上来的数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
//按照传统方式获取数据
return;
}
//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
//如果fileitem中封装的是普通输入项的数据
if(item.isFormField()){
String name = item.getFieldName();
//解决普通输入项的数据的中文乱码问题
if ("id".endsWith(name)) {
if (item.getString("UTF-8")!=null && item.getString("UTF-8")!="") {
menu.setId(item.getString("UTF-8"));
}
}
if ("name".endsWith(name)) {
menu.setName(item.getString("UTF-8"));
}
if ("href".endsWith(name)) {
menu.setHref(item.getString("UTF-8"));
}
if ("target".endsWith(name)) {
menu.setTarget(item.getString("UTF-8"));
}
if ("isShow".endsWith(name)) {
menu.setIsShow(item.getString("UTF-8"));
}
if ("sort".endsWith(name)) {
menu.setSort(item.getString("UTF-8"));
}
if ("parentId".endsWith(name)) {
menu.setParentId(item.getString("UTF-8"));
}
if ("parentIds".endsWith(name)) {
menu.setParentIds(item.getString("UTF-8"));
}
if ("remarks".endsWith(name)) {
menu.setRemarks(item.getString("UTF-8"));
}
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
//获取item中的上传文件的输入流
InputStream in = item.getInputStream();
//创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
in.close();
//关闭输出流
out.close();
//删除处理文件上传时生成的临时文件
item.delete();
msg = "文件上传成功!";
// menu.setPic("\\upload" + "\\" + filename);
}
}
if (menu.getId()!=null && !"".equals(menu.getId())) {
menuService.update(menu);
}else{
menuService.add(menu);
}
response.sendRedirect(contextPath+"/menu?method=list");
}catch (Exception e) {
msg= "文件上传失败!";
e.printStackTrace();
request.setAttribute("msg",msg);
request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
}
}
//删除
private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
menuService.delete(id);
response.sendRedirect(contextPath+"/menu?method=list");
}
//修改
private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String name = request.getParameter("name");
String href = request.getParameter("href");
String target = request.getParameter("target");
String isShow = request.getParameter("isShow");
String sort = request.getParameter("sort");
String parentId = request.getParameter("parentId");
String parentIds = request.getParameter("parentIds");
String remarks = request.getParameter("remarks");
Menu menu = new Menu();
menu.setId(id);
menu.setName(name);
menu.setHref(href);
menu.setTarget(target);
menu.setIsShow(isShow);
menu.setSort(sort);
menu.setParentId(parentId);
menu.setParentIds(parentIds);
menu.setRemarks(remarks);
menuService.update(menu);
request.setAttribute("menu", menu);
request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
}
//列表查询
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.err.println("---开始查询---");
Menu menu = new Menu();
/*//分页有关
Page<Menu> page = new Page<Menu>();
//设置查询页
String pageNoStr = request.getParameter("pageNo");
if (pageNoStr != null && pageNoStr != "") {
page.setPageNo(Integer.parseInt(pageNoStr));
}
//设置查询条件
String name = request.getParameter("name");
if (name != null && name != "") {
menu.setName(name);
request.setAttribute("name", name);
}
String isShow = request.getParameter("isShow");
if (isShow != null && isShow != "") {
menu.setIsShow(isShow);
request.setAttribute("isShow", isShow);
}
page = menuService.page(menu, page);
request.setAttribute("page", page);*/
List<Menu> list = new ArrayList<Menu>();
List<Menu> list1 = menuService.findAll(menu);
sortList(list, list1, "0", true);
request.setAttribute("list", list);
request.getRequestDispatcher("/views/system/menuList.jsp").forward(request, response);
}
//form跳转页面
private void form(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String parentId = request.getParameter("parentId");
Menu menu = new Menu();
if (StringUtils.isNotEmpty(parentId)) {
menu.setParentId(parentId);
}
if (id!=null && id!="") {
menu = menuService.getById(id);
}
request.setAttribute("menu", menu);
List<Menu> parentMenus = menuDao.getParentMenu("0");
request.setAttribute("parentMenus", parentMenus);
request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
}
/**
* 跳转到设置权限页面
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void setMenuRole(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String roleId = request.getParameter("roleId");
request.setAttribute("roleId", roleId);
//获取角色的所以权限菜单ID
List<String> roleMenus = menuRoleDao.getByRoleId(roleId);
//定义集合接收菜单数据
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
//获取所有的父级菜单
List<Menu> parentMenus = menuDao.getParentMenu("0");
for (Menu menu : parentMenus) {
if (roleMenus.contains(menu.getId())) {
menu.setIsCheck("1");
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("parentMenu", menu);
List<Menu> parentMenu = menuDao.getParentMenu(menu.getId());
List<Menu> menus = new ArrayList<Menu>();
for (Menu menu2 : parentMenu) {
if (roleMenus.contains(menu2.getId())) {
menu2.setIsCheck("1");
}
menus.add(menu2);
}
map.put("menus", menus);
list.add(map);
}
request.setAttribute("list", list);
String type = request.getParameter("type");
if (type!=null && "success".equals(type)) {
request.setAttribute("msg", "更新权限成功!");
}
request.getRequestDispatcher("/views/system/setMenuRole.jsp").forward(request, response);
}
/**
* 更新保存权限设置
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void saveMenuRole(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String roleId = request.getParameter("roleId");
request.setAttribute("roleId", roleId);
menuRoleDao.delete(roleId);
MenuRole menuRole = new MenuRole();
menuRole.setRoleId(roleId);
String[] parameterValues = request.getParameterValues("menuIds");
if (parameterValues!=null) {
for (String string : parameterValues) {
menuRole.setMenuId(string);
menuRoleDao.add(menuRole);
}
}
response.sendRedirect(contextPath+"/menu?method=setMenuRole&type=success&roleId="+roleId);
}
public static void sortList(List<Menu> list, List<Menu> sourcelist, String parentId, boolean cascade){
for (int i=0; i<sourcelist.size(); i++){
Menu e = sourcelist.get(i);
if (e.getParentId()!=null && e.getParentId()!=null
&& e.getParentId().equals(parentId)){
list.add(e);
if (cascade){
// 判断是否还有子节点, 有则继续获取子节点
for (int j=0; j<sourcelist.size(); j++){
Menu child = sourcelist.get(j);
if (child.getParentId()!=null && child.getParentId()!=null
&& child.getParentId().equals(e.getId())){
sortList(list, sourcelist, e.getId(), true);
break;
}
}
}
}
}
}
}
如果也想学习本系统,下面领取。关注并回复:001jsp