• Java项目:jsp+servlet高校社团管理系统


    作者主页:夜未央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

    1. package com.so.system.controller;
    2. import java.io.BufferedInputStream;
    3. import java.io.BufferedOutputStream;
    4. import java.io.ByteArrayOutputStream;
    5. import java.io.FileInputStream;
    6. import java.io.IOException;
    7. import java.io.InputStream;
    8. import java.io.OutputStream;
    9. import java.io.PrintWriter;
    10. import javax.servlet.ServletException;
    11. import javax.servlet.annotation.WebServlet;
    12. import javax.servlet.http.HttpServlet;
    13. import javax.servlet.http.HttpServletRequest;
    14. import javax.servlet.http.HttpServletResponse;
    15. /**
    16. * Servlet implementation class DownloadController
    17. */
    18. @WebServlet(name = "download", urlPatterns = { "/download" })
    19. public class DownloadController extends HttpServlet {
    20. private static final long serialVersionUID = 1L;
    21. // 字符编码
    22. private final String ENCODING = "GB2312";
    23. // 内容类型
    24. private final String CONTENT_TYPE = "text/html;charset=gb2312";
    25. // 要下载的文件存放的路径
    26. private String downloadfiledir = "d:\\temp\\";
    27. protected void doGet(HttpServletRequest request, HttpServletResponse response)
    28. throws ServletException, IOException {
    29. doPost(request, response);
    30. }
    31. protected void doPost(HttpServletRequest request, HttpServletResponse response)
    32. throws ServletException, IOException {
    33. String realPath = request.getSession().getServletContext().getRealPath("");
    34. // 设置request对象的字符编码
    35. request.setCharacterEncoding(ENCODING);
    36. // 从request中取出要下载文件的名字
    37. String filename = request.getParameter("filename");
    38. if (filename == null || filename.trim().equals("")) {
    39. // 设置response对象的ContentType
    40. response.setContentType(CONTENT_TYPE);
    41. // 输出错误信息
    42. PrintWriter out = response.getWriter();
    43. out.println("输入的文件名无效!");
    44. out.close();
    45. } else {
    46. // 下载文件的完整路径名
    47. String fullfilename = realPath + filename;
    48. System.out.println("下载文件:" + fullfilename);
    49. // 根据文件的类型设置response对象的ContentType
    50. String contentType = getServletContext().getMimeType(fullfilename);
    51. if (contentType == null)
    52. contentType = "application/octet-stream";
    53. response.setContentType(contentType);
    54. // 设置response的头信息
    55. response.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");
    56. InputStream is = null;
    57. OutputStream os = null;
    58. try {
    59. is = new BufferedInputStream(new FileInputStream(fullfilename));
    60. // 定义输出字节流
    61. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    62. // 定义response的输出流
    63. os = new BufferedOutputStream(response.getOutputStream());
    64. // 定义buffer
    65. byte[] buffer = new byte[4 * 1024]; // 4k Buffer
    66. int read = 0;
    67. // 从文件中读入数据并写到输出字节流中
    68. while ((read = is.read(buffer)) != -1) {
    69. baos.write(buffer, 0, read);
    70. }
    71. // 将输出字节流写到response的输出流中
    72. os.write(baos.toByteArray());
    73. } catch (IOException e) {
    74. e.printStackTrace();
    75. } finally {
    76. // 关闭输出字节流和response输出流
    77. os.close();
    78. is.close();
    79. }
    80. }
    81. }
    82. }

    MenuController

    1. package com.so.system.controller;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.util.ArrayList;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. import javax.servlet.ServletException;
    11. import javax.servlet.annotation.WebServlet;
    12. import javax.servlet.http.HttpServlet;
    13. import javax.servlet.http.HttpServletRequest;
    14. import javax.servlet.http.HttpServletResponse;
    15. import org.apache.commons.fileupload.FileItem;
    16. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    17. import org.apache.commons.fileupload.servlet.ServletFileUpload;
    18. import com.so.system.bean.Menu;
    19. import com.so.system.bean.MenuRole;
    20. import com.so.system.dao.MenuDao;
    21. import com.so.system.dao.MenuRoleDao;
    22. import com.so.system.service.MenuService;
    23. import com.so.system.service.impl.MenuServiceImpl;
    24. import com.so.utils.Page;
    25. import com.so.utils.StringUtils;
    26. @WebServlet("/menu")
    27. public class MenuController extends HttpServlet {
    28. private static final long serialVersionUID = 1L;
    29. private String contextPath = "";
    30. MenuDao menuDao=new MenuDao();
    31. MenuService menuService = new MenuServiceImpl();
    32. MenuRoleDao menuRoleDao = new MenuRoleDao();
    33. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    34. doPost(request, response);
    35. }
    36. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    37. contextPath = request.getServletContext().getContextPath();
    38. String method = request.getParameter("method");
    39. if ("add".equals(method)) {
    40. add(request,response);
    41. }else if ("delete".equals(method)) {
    42. delete(request, response);
    43. }else if ("list".equals(method)) {
    44. list(request, response);
    45. }else if ("update".equals(method)) {
    46. update(request, response);
    47. }else if ("form".equals(method)) {
    48. form(request, response);
    49. }else if ("save".equals(method)) {
    50. save(request, response);
    51. }else if ("setMenuRole".equals(method)) {
    52. setMenuRole(request, response);
    53. }else if ("saveMenuRole".equals(method)) {
    54. saveMenuRole(request, response);
    55. }
    56. }
    57. //添加
    58. private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    59. String name = request.getParameter("name");
    60. String href = request.getParameter("href");
    61. String target = request.getParameter("target");
    62. String isShow = request.getParameter("isShow");
    63. String sort = request.getParameter("sort");
    64. String parentId = request.getParameter("parentId");
    65. String parentIds = request.getParameter("parentIds");
    66. String remarks = request.getParameter("remarks");
    67. Menu menu = new Menu();
    68. menu.setName(name);
    69. menu.setHref(href);
    70. menu.setTarget(target);
    71. menu.setIsShow(isShow);
    72. menu.setSort(sort);
    73. menu.setParentId(parentId);
    74. menu.setParentIds(parentIds);
    75. menu.setRemarks(remarks);
    76. menuService.add(menu);
    77. response.sendRedirect(contextPath+"/menu?method=list");
    78. }
    79. //添加保存
    80. protected void save(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    81. Menu menu = new Menu();
    82. //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
    83. String savePath = this.getServletContext().getRealPath("/upload");
    84. File file = new File(savePath);
    85. //判断上传文件的保存目录是否存在
    86. if (!file.exists() && !file.isDirectory()) {
    87. System.out.println(savePath+"目录不存在,需要创建");
    88. //创建目录
    89. file.mkdir();
    90. }
    91. //消息提示
    92. String msg = "";
    93. try{
    94. //使用Apache文件上传组件处理文件上传步骤:
    95. //1、创建一个DiskFileItemFactory工厂
    96. DiskFileItemFactory factory = new DiskFileItemFactory();
    97. //2、创建一个文件上传解析器
    98. ServletFileUpload upload = new ServletFileUpload(factory);
    99. //解决上传文件名的中文乱码
    100. upload.setHeaderEncoding("UTF-8");
    101. //3、判断提交上来的数据是否是上传表单的数据
    102. if(!ServletFileUpload.isMultipartContent(request)){
    103. //按照传统方式获取数据
    104. return;
    105. }
    106. //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个FileItem对应一个Form表单的输入项
    107. List list = upload.parseRequest(request);
    108. for(FileItem item : list){
    109. //如果fileitem中封装的是普通输入项的数据
    110. if(item.isFormField()){
    111. String name = item.getFieldName();
    112. //解决普通输入项的数据的中文乱码问题
    113. if ("id".endsWith(name)) {
    114. if (item.getString("UTF-8")!=null && item.getString("UTF-8")!="") {
    115. menu.setId(item.getString("UTF-8"));
    116. }
    117. }
    118. if ("name".endsWith(name)) {
    119. menu.setName(item.getString("UTF-8"));
    120. }
    121. if ("href".endsWith(name)) {
    122. menu.setHref(item.getString("UTF-8"));
    123. }
    124. if ("target".endsWith(name)) {
    125. menu.setTarget(item.getString("UTF-8"));
    126. }
    127. if ("isShow".endsWith(name)) {
    128. menu.setIsShow(item.getString("UTF-8"));
    129. }
    130. if ("sort".endsWith(name)) {
    131. menu.setSort(item.getString("UTF-8"));
    132. }
    133. if ("parentId".endsWith(name)) {
    134. menu.setParentId(item.getString("UTF-8"));
    135. }
    136. if ("parentIds".endsWith(name)) {
    137. menu.setParentIds(item.getString("UTF-8"));
    138. }
    139. if ("remarks".endsWith(name)) {
    140. menu.setRemarks(item.getString("UTF-8"));
    141. }
    142. }else{//如果fileitem中封装的是上传文件
    143. //得到上传的文件名称,
    144. String filename = item.getName();
    145. System.out.println(filename);
    146. if(filename==null || filename.trim().equals("")){
    147. continue;
    148. }
    149. //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
    150. //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
    151. filename = filename.substring(filename.lastIndexOf("\\")+1);
    152. //获取item中的上传文件的输入流
    153. InputStream in = item.getInputStream();
    154. //创建一个文件输出流
    155. FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
    156. //创建一个缓冲区
    157. byte buffer[] = new byte[1024];
    158. //判断输入流中的数据是否已经读完的标识
    159. int len = 0;
    160. //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
    161. while((len=in.read(buffer))>0){
    162. //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
    163. out.write(buffer, 0, len);
    164. }
    165. //关闭输入流
    166. in.close();
    167. //关闭输出流
    168. out.close();
    169. //删除处理文件上传时生成的临时文件
    170. item.delete();
    171. msg = "文件上传成功!";
    172. // menu.setPic("\\upload" + "\\" + filename);
    173. }
    174. }
    175. if (menu.getId()!=null && !"".equals(menu.getId())) {
    176. menuService.update(menu);
    177. }else{
    178. menuService.add(menu);
    179. }
    180. response.sendRedirect(contextPath+"/menu?method=list");
    181. }catch (Exception e) {
    182. msg= "文件上传失败!";
    183. e.printStackTrace();
    184. request.setAttribute("msg",msg);
    185. request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
    186. }
    187. }
    188. //删除
    189. private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    190. String id = request.getParameter("id");
    191. menuService.delete(id);
    192. response.sendRedirect(contextPath+"/menu?method=list");
    193. }
    194. //修改
    195. private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    196. String id = request.getParameter("id");
    197. String name = request.getParameter("name");
    198. String href = request.getParameter("href");
    199. String target = request.getParameter("target");
    200. String isShow = request.getParameter("isShow");
    201. String sort = request.getParameter("sort");
    202. String parentId = request.getParameter("parentId");
    203. String parentIds = request.getParameter("parentIds");
    204. String remarks = request.getParameter("remarks");
    205. Menu menu = new Menu();
    206. menu.setId(id);
    207. menu.setName(name);
    208. menu.setHref(href);
    209. menu.setTarget(target);
    210. menu.setIsShow(isShow);
    211. menu.setSort(sort);
    212. menu.setParentId(parentId);
    213. menu.setParentIds(parentIds);
    214. menu.setRemarks(remarks);
    215. menuService.update(menu);
    216. request.setAttribute("menu", menu);
    217. request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
    218. }
    219. //列表查询
    220. private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    221. System.err.println("---开始查询---");
    222. Menu menu = new Menu();
    223. /*//分页有关
    224. Page page = new Page();
    225. //设置查询页
    226. String pageNoStr = request.getParameter("pageNo");
    227. if (pageNoStr != null && pageNoStr != "") {
    228. page.setPageNo(Integer.parseInt(pageNoStr));
    229. }
    230. //设置查询条件
    231. String name = request.getParameter("name");
    232. if (name != null && name != "") {
    233. menu.setName(name);
    234. request.setAttribute("name", name);
    235. }
    236. String isShow = request.getParameter("isShow");
    237. if (isShow != null && isShow != "") {
    238. menu.setIsShow(isShow);
    239. request.setAttribute("isShow", isShow);
    240. }
    241. page = menuService.page(menu, page);
    242. request.setAttribute("page", page);*/
    243. List list = new ArrayList();
    244. List list1 = menuService.findAll(menu);
    245. sortList(list, list1, "0", true);
    246. request.setAttribute("list", list);
    247. request.getRequestDispatcher("/views/system/menuList.jsp").forward(request, response);
    248. }
    249. //form跳转页面
    250. private void form(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    251. String id = request.getParameter("id");
    252. String parentId = request.getParameter("parentId");
    253. Menu menu = new Menu();
    254. if (StringUtils.isNotEmpty(parentId)) {
    255. menu.setParentId(parentId);
    256. }
    257. if (id!=null && id!="") {
    258. menu = menuService.getById(id);
    259. }
    260. request.setAttribute("menu", menu);
    261. List parentMenus = menuDao.getParentMenu("0");
    262. request.setAttribute("parentMenus", parentMenus);
    263. request.getRequestDispatcher("/views/system/menuForm.jsp").forward(request, response);
    264. }
    265. /**
    266. * 跳转到设置权限页面
    267. * @param request
    268. * @param response
    269. * @throws ServletException
    270. * @throws IOException
    271. */
    272. private void setMenuRole(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    273. String roleId = request.getParameter("roleId");
    274. request.setAttribute("roleId", roleId);
    275. //获取角色的所以权限菜单ID
    276. List roleMenus = menuRoleDao.getByRoleId(roleId);
    277. //定义集合接收菜单数据
    278. List> list = new ArrayList>();
    279. //获取所有的父级菜单
    280. List parentMenus = menuDao.getParentMenu("0");
    281. for (Menu menu : parentMenus) {
    282. if (roleMenus.contains(menu.getId())) {
    283. menu.setIsCheck("1");
    284. }
    285. Map map = new HashMap();
    286. map.put("parentMenu", menu);
    287. List parentMenu = menuDao.getParentMenu(menu.getId());
    288. List menus = new ArrayList();
    289. for (Menu menu2 : parentMenu) {
    290. if (roleMenus.contains(menu2.getId())) {
    291. menu2.setIsCheck("1");
    292. }
    293. menus.add(menu2);
    294. }
    295. map.put("menus", menus);
    296. list.add(map);
    297. }
    298. request.setAttribute("list", list);
    299. String type = request.getParameter("type");
    300. if (type!=null && "success".equals(type)) {
    301. request.setAttribute("msg", "更新权限成功!");
    302. }
    303. request.getRequestDispatcher("/views/system/setMenuRole.jsp").forward(request, response);
    304. }
    305. /**
    306. * 更新保存权限设置
    307. * @param request
    308. * @param response
    309. * @throws ServletException
    310. * @throws IOException
    311. */
    312. private void saveMenuRole(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    313. String roleId = request.getParameter("roleId");
    314. request.setAttribute("roleId", roleId);
    315. menuRoleDao.delete(roleId);
    316. MenuRole menuRole = new MenuRole();
    317. menuRole.setRoleId(roleId);
    318. String[] parameterValues = request.getParameterValues("menuIds");
    319. if (parameterValues!=null) {
    320. for (String string : parameterValues) {
    321. menuRole.setMenuId(string);
    322. menuRoleDao.add(menuRole);
    323. }
    324. }
    325. response.sendRedirect(contextPath+"/menu?method=setMenuRole&type=success&roleId="+roleId);
    326. }
    327. public static void sortList(List list, List sourcelist, String parentId, boolean cascade){
    328. for (int i=0; i
    329. Menu e = sourcelist.get(i);
    330. if (e.getParentId()!=null && e.getParentId()!=null
    331. && e.getParentId().equals(parentId)){
    332. list.add(e);
    333. if (cascade){
    334. // 判断是否还有子节点, 有则继续获取子节点
    335. for (int j=0; j
    336. Menu child = sourcelist.get(j);
    337. if (child.getParentId()!=null && child.getParentId()!=null
    338. && child.getParentId().equals(e.getId())){
    339. sortList(list, sourcelist, e.getId(), true);
    340. break;
    341. }
    342. }
    343. }
    344. }
    345. }
    346. }
    347. }

    如果也想学习本系统,下面领取。关注并回复:001jsp

  • 相关阅读:
    2022/11/22 [easyx]关于字符和一些背景
    用DIV+CSS技术设计的凤阳旅游网站(web前端网页制作课作业)HTML+CSS+JavaScript
    c# 页面跳转
    [newstarctf2023] --RE wp
    无模型深度强化学习算法
    git clone访问github失败
    MySQL 索引和事务
    Leedcode 每日一题: 2760. 最长奇偶子数组
    音视频封装格式
    lotus 1.16.0 最小快照导出 导入
  • 原文地址:https://blog.csdn.net/hanyunlong1989/article/details/127097852