基于javaweb+mysql的jsp+servlet高校社团管理系统(java+servlet+jsp+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的JSP+Servlet高校社团管理系统(java+servlet+jsp+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.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 8.0版本;
使用技术 使用技术:servlet+jsp+mysql 8.0
使用说明
- 使用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
}
/**
* 跳转到首页
* @param request
* @param response
*/
private void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String contextPath = request.getServletContext().getContextPath();
User user = CurrentUserUtils.getCurrentUser(request);
if (user==null) {
}
List<Map<String, Object>> menus = new ArrayList<Map<String, Object>>();
List<Menu> parentMenus = menuRoleDao.getUserMenus(user.getRole(), "0");
for (Menu menu : parentMenus) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("parentMenu", menu);
List<Menu> childrenMenus = menuRoleDao.getUserMenus(user.getRole(), menu.getId());
map.put("sonMenus", childrenMenus);
menus.add(map);
}
String projectName = PropertiesUtil.getValue("projectName");
request.getSession().setAttribute("projectName", projectName);
request.getSession().setAttribute("indexMenus", menus);
request.getRequestDispatcher("/mui/index.jsp").forward(request, response);
}
/**
* 修改密码
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void repassword(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String contextPath = request.getServletContext().getContextPath();
String id = request.getParameter("id");
String password = request.getParameter("password");
String password1 = request.getParameter("password1");
String password2 = request.getParameter("password2");
response.setCharacterEncoding("utf-8");
User user = userService.getById(id);
if (MD5.Encrypt(password).equals(user.getPassword())) {
if ("phone".endsWith(name)) {
activeStu.setPhone(item.getString("UTF-8"));
}
if ("type".endsWith(name)) {
activeStu.setType(item.getString("UTF-8"));
}
if ("isArrive".endsWith(name)) {
activeStu.setIsArrive(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中的上传文件的输入流
String suffix = filename.substring(filename.lastIndexOf("."));
filename=String.valueOf(System.currentTimeMillis()+suffix);
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 = "文件上传成功!";
}
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
req.setCharacterEncoding("utf-8");
HttpServletResponse res = (HttpServletResponse) response;
//res.setContentType("charset=utf-8");
res.setCharacterEncoding("utf-8");
String parameter = request.getParameter("method");
//如果不是登录和安全退出方法 进行过滤操作
if (parameter!=null && parameter !="" && !"regit".equals(parameter) && !"login".equals(parameter)&& !"logout".equals(parameter)) {
User login = CurrentUserUtils.getCurrentUser(req);
if (login==null) {
String contextPath = req.getServletContext().getContextPath();
}else{
chain.doFilter(req, res);
}
}else{
chain.doFilter(req, res);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
public class CurrentUserUtils {
/**
* 获取当前登录用户信息
* @param request
* @return
*/
public static User getCurrentUser(HttpServletRequest request){
User user = null;
Object attribute = request.getSession().getAttribute("login");
System.out.println("attribute");
if (attribute!=null && attribute instanceof User) {
user = (User) attribute;
}
return user;
}
@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);
}
char c = s.charAt(i);
boolean nextUpperCase = true;
if (i < (s.length() - 1)) {
nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
}
if ((i > 0) && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) {
sb.append(SEPARATOR);
}
upperCase = true;
} else {
upperCase = false;
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
}
/**
* 这是过滤器,用于设置请求与响应的字符集编码
* @ClassName: SerFilter
// String savePath = PropertiesUtil.getValue("fileUpload");
// File file = new File(savePath+"/");
// if (!file.exists() && !file.isDirectory()) {
// System.out.println(savePath+"目录不存在,需要创建");
// //创建目录
// file.mkdirs();
// }
//消息提示
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")!="") {
teamApplay.setId(item.getString("UTF-8"));
}
}
if ("applayTeam".endsWith(name)) {
teamApplay.setApplayTeam(item.getString("UTF-8"));
}
if ("applayStu".endsWith(name)) {
teamApplay.setApplayStu(item.getString("UTF-8"));
}
/**
* 系统用户控制器servlet
* @version V1.0
*/
@WebServlet("/user")
public class UserController extends HttpServlet {
private static final long serialVersionUID = 1L;
UserDao userDao=new UserDao();
UserService userService = new UserServiceImpl();
RoleService roleService = new RoleServiceImpl();
MenuRoleDao menuRoleDao = new MenuRoleDao();
if ("activeId".endsWith(name)) {
activeStu.setActiveId(item.getString("UTF-8"));
}
if ("stuId".endsWith(name)) {
activeStu.setStuId(item.getString("UTF-8"));
}
if ("stuName".endsWith(name)) {
activeStu.setStuName(item.getString("UTF-8"));
}
if ("phone".endsWith(name)) {
activeStu.setPhone(item.getString("UTF-8"));
}
if ("type".endsWith(name)) {
activeStu.setType(item.getString("UTF-8"));
}
if ("isArrive".endsWith(name)) {
activeStu.setIsArrive(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中的上传文件的输入流
String suffix = filename.substring(filename.lastIndexOf("."));
filename=String.valueOf(System.currentTimeMillis()+suffix);
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);
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")!="") {
activeStu.setId(item.getString("UTF-8"));
}
}
if ("activeId".endsWith(name)) {
activeStu.setActiveId(item.getString("UTF-8"));
}
if ("stuId".endsWith(name)) {
activeStu.setStuId(item.getString("UTF-8"));
}
if ("stuName".endsWith(name)) {
activeStu.setStuName(item.getString("UTF-8"));
}
}
}
if ("teamName".endsWith(name)) {
teams.setTeamName(item.getString("UTF-8"));
}
if ("pic".endsWith(name)) {
teams.setPic(item.getString("UTF-8"));
}
if ("teamIntro".endsWith(name)) {
teams.setTeamIntro(item.getString("UTF-8"));
}
if ("buildTime".endsWith(name)) {
if(item.getString("UTF-8")!=null &&item.getString("UTF-8")!="") {
teams.setBuildTime(Timestamp.valueOf(item.getString("UTF-8")));
}
}
if ("buildStu".endsWith(name)) {
teams.setBuildStu(item.getString("UTF-8"));
}
if ("auditType".endsWith(name)) {
teams.setAuditType(item.getString("UTF-8"));
}
if ("members".endsWith(name)) {
teams.setMembers(Integer.parseInt(item.getString("UTF-8")));
}
if ("remark".endsWith(name)) {
teams.setRemark(item.getString("UTF-8"));
}
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
moneyManger.setSqlStr(stringBuffer.toString());
}
List<MoneyManger> moneys = moneyMangerService.findAll(moneyManger);
double zhichu = 0.0;
double shouru = 0.0;
for (MoneyManger moneyManger2 : moneys) {
if ("1".equals(moneyManger2.getType())) {
zhichu += moneyManger2.getMoney();
}else {
shouru += moneyManger2.getMoney();
}
}
request.setAttribute("zhichu", zhichu);
request.setAttribute("shouru", shouru);
request.getRequestDispatcher("/mui/welcome.jsp").forward(request, response);
}
//添加
private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String newsType = request.getParameter("newsType");
String title = request.getParameter("title");
String pic = request.getParameter("pic");
String shortContent = request.getParameter("shortContent");
String content = request.getParameter("content");
String createUser = request.getParameter("createUser");
String createTime = request.getParameter("createTime");
String isRun = request.getParameter("isRun");
String belonTeam = request.getParameter("belonTeam");
String isAudit = request.getParameter("isAudit");
SiteNews siteNews = new SiteNews();
siteNews.setNewsType(newsType);
siteNews.setTitle(title);
siteNews.setPic(pic);
siteNews.setShortContent(shortContent);
siteNews.setContent(content);
siteNews.setCreateUser(createUser);
siteNews.setIsRun(isRun);
siteNews.setBelonTeam(belonTeam);
siteNews.setIsAudit(isAudit);
siteNewsService.add(siteNews);
response.sendRedirect(contextPath+"/siteNews?method=list");
}
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static String toUnderScoreCase(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
boolean nextUpperCase = true;
if (i < (s.length() - 1)) {
nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
}
if ((i > 0) && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) {
sb.append(SEPARATOR);
}
upperCase = true;
} else {
upperCase = false;
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
}
}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);
String suffix = filename.substring(filename.lastIndexOf("."));
filename=String.valueOf(System.currentTimeMillis()+suffix);
//获取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 = "文件上传成功!";
siteNews.setPic(request.getContextPath()+"/upload" + "/" + filename);
}
}
if (siteNews.getId()!=null && !"".equals(siteNews.getId())) {
siteNewsService.update(siteNews);
}else{
String username = CurrentUserUtils.getCurrentUser(request).getUsername();
siteNews.setCreateUser(username);
siteNewsService.add(siteNews);
}
response.sendRedirect(contextPath+"/siteNews?method=list&newsType="+siteNews.getNewsType());
}catch (Exception e) {
msg= "文件上传失败!";
}
//消息提示
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")!="") {
user.setId(item.getString("UTF-8"));
}
}
if ("username".endsWith(name)) {
user.setUsername(item.getString("UTF-8"));
}
if ("password".endsWith(name)) {
user.setPassword(item.getString("UTF-8"));
}
if ("pic".endsWith(name)) {
user.setPic(item.getString("UTF-8"));
}
if ("role".endsWith(name)) {
user.setRole(item.getString("UTF-8"));
}
if ("isBolck".endsWith(name)) {
user.setIsBolck(item.getString("UTF-8"));
}
}else{//如果fileitem中封装的是上传文件
//得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\")+1);
String suffix = filename.substring(filename.lastIndexOf("."));
filename=String.valueOf(System.currentTimeMillis()+suffix);
//获取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 = "文件上传成功!";
teams.setPic(request.getContextPath()+"/upload" + "/" + filename);
//teams.setPic(savePath.substring(savePath.lastIndexOf("\\")) + "\\" + filename);
}
}
try {
teams.setPic(teams.getPic().replace("/team",""));
} catch (Exception e) {
e.printStackTrace();
}
if (teams.getId()!=null && !"".equals(teams.getId())) {
teamsService.update(teams);
}else{
teams.setBuildTime(new Date());
teamsService.add(teams);
}
if((s.getLoginName()+"").equals(student.getLoginName())){
System.out.println(msg="帐号已存在!!!");
System.out.println(msg);
System.out.println(msg);
System.out.println(msg);
System.out.println(msg);
throw new RuntimeException(msg);
}
}
}
if ("loginPassword".endsWith(name)) {
student.setLoginPassword(item.getString("UTF-8"));
}
if ("regitTime".endsWith(name)) {
student.setRegitTime(new Date());
}
if ("auditType".endsWith(name)) {
student.setAuditType(item.getString("UTF-8"));
}
if ("stuName".endsWith(name)) {
student.setStuName(item.getString("UTF-8"));
}
if ("sex".endsWith(name)) {
student.setSex(item.getString("UTF-8"));
}
if ("schoolRoom".endsWith(name)) {
student.setSchoolRoom(item.getString("UTF-8"));
}
if ("classRoom".endsWith(name)) {
student.setClassRoom(item.getString("UTF-8"));
}
if ("phone".endsWith(name)) {
student.setPhone(item.getString("UTF-8"));
}
if ("pic".endsWith(name)) {
student.setPic(item.getString("UTF-8"));
String id = request.getParameter("id");
User user = new User();
if (id!=null && id!="") {
user = userService.getById(id);
}
request.setAttribute("user", user);
List<Role> findAll = roleService.findAll(new Role());
request.setAttribute("roles", findAll);
request.getRequestDispatcher("/views/system/userForm.jsp").forward(request, response);
}
}
@WebServlet("/menu")
public class MenuController extends HttpServlet {