0 项目说明
基于Springboot / SSM的校友录网站设计与实现
提示:适合用于课程设计或毕业设计,工作量达标,源码开放
1 项目简介
校友录网站是作为毕业设计为母校设计的校友交流平台。基于javaWeb,由Maven构建管理,采用Spring+SpringMVC+MyBatis框架,用EhCache做数据缓存。门户网站采用BootStrap设计界面,后台管理网站用AmazeUI设计界面。门户网站总体布局如下所示:
2 开发环境
Maven 3.0.3
IntelliJ IDEA 2017.1/eclipse EE
jdk1.8
tomcat8.0
mysql 5.1
3 导入数据库
数据库为MySQL5.1,数据库sql文件在./ar-doc/sql/ar-mysql-data.sql,新建数据库ar,执行此sql文件,可导入表结构和数据字典等数据。
- 导入数据字典表;
- 在用户表(user)中加入id为1的超级管理员;
- 在组织表(origin)中加入id为1的徐州工程学院;
- 在图片表(image)中加入id为1的徐州工程学院logo;
数据字典
dictionary(字典表):
dictionary_data(字典数据表):
4 导入工程(推荐IDEA)
1.安装Maven…
2.在IDEA中配置Maven,jdk
3.导入Maven项目,等待maven依赖项下载…
4.在IDEA中配置Tomcat8.0
5.修改项目中的数据库配置 ./ar-parent/ar-portal/src/main/resources/config.properties
jdbc.driver=com.mysql.jdbc.Driver
# 数据库地址
jdbc.url=jdbc:mysql://localhost/ar?characterEncoding=utf8
# 数据库用户名密码
jdbc.username=root
jdbc.password=root
5 项目构建
执行ar-common模块下的maven clean 以及 maven install
ar-common生成jar 安装在本地,ar-manage和ar-portal依赖此库。
6 项目部署
建议运行 ar-portal:war exploded。
门户网站: 访问地址: http://localhost:8080/ar-portal/index.action 用户名/密码: black/12345678
后台管理: 访问地址: http://localhost:8080/ar-portal/manage.action 用户名/密码: sa/12345678
7 项目源码
/**
* @Title: BaseController.java <br>
* @Package com.xzit.ar.common.base <br>
* @Description: <br>
* @author Mr.Black <br>
* @version V1.0 <br>
*/
package com.xzit.ar.common.base;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.xzit.ar.common.constant.GlobalConstants;
import com.xzit.ar.common.constant.WebConstant;
import com.xzit.ar.common.exception.AssertException;
import com.xzit.ar.common.util.Assert;
import com.xzit.ar.common.util.CommonUtil;
/**
* @author Mr.Black <br>
* @version V1.0 <br>
* <br>
* @ClassName: BaseController <br>
* @Description: <br>
* @date 2015年12月21日 上午11:08:45 <br>
*/
public abstract class BaseController {
/**
* 分页最大数
*/
private static final int MAX_PAGE_SIZE = 100;
/**
* 分页最小数
*/
private static final int MIN_PAGE_SIZE = 5;
/**
* 默认页大小
*/
private static final int DEFAULT_PAGE_SIZE = 10;
/**
* 页面操作备注
*/
private static String OPERATE_REMARKS = "operateRemarks";
/**
* 操作结果信息
*/
private static String OPERATE_REASULT_MESSAGE = "_message";
/**
* 成功跳转页面
*/
private static String successPage = "error/page500";
/**
* 失败跳转页面
*/
private static String errorPage = "error/page500";
protected static Logger logger = new Logger(BaseController.class);
/**
* @param @throws AssertException <br>
* @return String <br>
* @throws <br>
* @Title: getParameter <br>
* @Description: 获取参数<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:28:56 <br>
*/
protected String getParameter(String param, String errMsg) throws AssertException {
String value = getRequest().getParameter(param);
if (errMsg != null) {
Assert.notEmpty(value, errMsg);
}
return StringUtils.trim(value);
}
/**
* @throws <br>
* @Title: getParameter <br>
* @Description: 获取参数<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:11:27 <br>
*/
protected String getParameter(String param) {
String value = getRequest().getParameter(param);
if (CommonUtil.isNotEmpty(value)) {
try {
value = new String(value.getBytes("ISO-8859-1"), GlobalConstants.DEFAULT_CHARSET);
} catch (UnsupportedEncodingException e) {
logger.warn(e);
}
}
return StringUtils.trim(value);
}
/**
* @return Long <br>
* @throws <br>
* @Title: getLongParameter <br>
* @Description: getLongParameter<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:30:55 <br>
*/
protected Long getLongParameter(String param, String errMsg) throws AssertException {
String value = getParameter(param, errMsg);
return CommonUtil.isEmpty(value) ? null : Long.valueOf(value);
}
/**
* @throws <br>
* @Title: getLongParameter <br>
* @Description: getLongParameter<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:31:34 <br>
*/
protected Long getLongParameter(String param) {
String value = getParameter(param);
return CommonUtil.isEmpty(value) ? null : Long.valueOf(value);
}
/**
* @return Integer <br>
* @Description: getIntegerParameter <br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:32:44 <br>
*/
protected Integer getIntegerParameter(String param, String errMsg) throws AssertException {
String value = getParameter(param, errMsg);
return CommonUtil.isEmpty(value) ? null : Integer.valueOf(value);
}
/**
* @return Integer <br>
* @Description: getIntegerParameter<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:33:23 <br>
*/
protected Integer getIntegerParameter(String param) {
String value = getParameter(param);
return (CommonUtil.isEmpty(value) || value.equals("undefined")) ? null : Integer.valueOf(value);
}
/**
* @Title: getQueryStr
* @Description: 获取查询条件字符串
*/
protected String getQueryStr() {
return this.getParameter("queryStr");
}
/**
* @Title: setQuery
* @Description: 传递查询条件字符串
*/
protected void setQuery() {
this.getRequest().setAttribute("queryStr", this.getParameter("queryStr"));
}
/**
* @Title: getStateStr
* @Description: 获取查询条件字符串
*/
protected String getStateStr() {
if (this.getParameter("stateStr") == null) {
return "A";
} else {
return this.getParameter("stateStr");
}
}
/**
* @Title: setState
* @Description: 传递查询条件字符串
*/
protected void setState() {
this.getRequest().setAttribute("stateStr", this.getStateStr());
}
/**
* @Title: getSelectStr
* @Description: 获取条件查询下拉框条件
*/
protected String getSelectStr() {
return this.getParameter("selectStr");
}
/**
* @Title: setSelectStr
* @Description: 返回条件查询下拉框条件
*/
protected void setSelectStr() {
this.getRequest().setAttribute("selectStr", this.getParameter("selectStr"));
}
/**
* @param @return <br>
* @return int <br>
* @Description: getPageIndex<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:34:13 <br>
*/
protected int getPageIndex() {
Object temp = getIntegerParameter("pageIndex");
if (temp == null || temp.equals("undefined")) {
return 1;
}
Integer pageIndex = Integer.parseInt(temp.toString());
return pageIndex < 1 ? 1 : pageIndex;
}
/**
* @param @return <br>
* @return int <br>
* @Description: getPageSize <br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:34:22 <br>
*/
protected int getPageSize() {
Object temp = getIntegerParameter("pageSize");
if (temp == null || temp.equals("undefined")) {
return DEFAULT_PAGE_SIZE;
}
Integer pageSize = Integer.parseInt(temp.toString());
return (pageSize < MIN_PAGE_SIZE || pageSize > MAX_PAGE_SIZE) ? DEFAULT_PAGE_SIZE : pageSize;
}
/**
* @return ModelAndView <br>
* @Description: 页面跳转成功处理<br>
* @author Mr.Black <br>
* @date 2015年12月23日 下午9:07:08 <br>
*/
protected ModelAndView success(String message, String redirectUrl, Map<String, String> param) {
ModelMap map = new ModelMap();
map.put("success", true);
map.put("message", message);
map.put("url", redirectUrl);
map.put("paramMap", param);
return new ModelAndView(successPage, map);
}
/**
* @return ModelAndView <br>
* @Description: 页面跳转失败处理<br>
* @author Mr.Black <br>
* @date 2015年12月23日 下午9:06:44 <br>
*/
protected ModelAndView fail(String errMessage, String redirectUrl, Map<String, String> param) {
ModelMap map = new ModelMap();
map.put("errMsg", errMessage);
map.put("url", redirectUrl);
if (param != null) {
map.put(WebConstant.PAGE_NOT_REDIRECT, param.remove(WebConstant.PAGE_NOT_REDIRECT));
}
map.put("paramMap", param);
return new ModelAndView(errorPage, map);
}
/**
* @param @return <br>
* @return HttpServletRequest <br>
* @Description: 获取request<br>
* @author Mr.Black <br>
* @date 2015年12月21日 下午1:36:56 <br>
*/
protected HttpServletRequest getRequest() {
RequestAttributes requestAttr = RequestContextHolder.getRequestAttributes();
return ((ServletRequestAttributes) requestAttr).getRequest();
}
/**
* @Title: getSession
* @Description: 获取当前 Session
*/
protected HttpSession getSession() {
return this.getRequest().getSession();
}
/**
* @Title: setOperateRemarks
* @Description: 通过request设置操作备注
*/
protected void setOperateRemarks(String operateRemarks) {
this.getRequest().setAttribute(OPERATE_REMARKS, operateRemarks);
}
/**
* @Description: 添加页面操作说明<br>
* @author Mr.Black <br>
* @date 2015年12月26日 上午2:03:44 <br>
*/
protected void setOperateRemarks(Model model, String operateRemarks) {
model.addAttribute(OPERATE_REMARKS, operateRemarks);
}
/**
* @Title: setMessage
* @Description: 处理后存放处理结果信息
*/
protected void setMessage(String message) {
this.getRequest().setAttribute("OPERATE_REASULT_MESSAGE", message);
}
/**
* @Description: 向页面返回操作结果信息 <br>
* message 操作结果信息
* @author Mr.Black <br>
* @date 2015年12月27日 下午8:51:09 <br>
*/
protected void setMessage(Model model, String message) {
if (model != null) {
model.addAttribute(OPERATE_REASULT_MESSAGE, message);
}
}
/**
* @Title: setMessage
* @Description: 重定向传参数
*/
protected void setMessage(RedirectAttributes attr, String message) {
if (attr != null) {
attr.addAttribute(OPERATE_REASULT_MESSAGE, message);
}
}
/**
* @Title: getCurrentUser
* @Description: 获取当前用户
*/
protected Map<String, Object> getCurrentUser() {
Map<String, Object> user = null;
// 普通用户
user = (Map<String, Object>) getRequest().getSession().getAttribute(WebConstant.SESSION_USER);
// 管理员用户
if (CommonUtil.isEmpty(user)) {
user = (Map<String, Object>) getRequest().getSession().getAttribute(WebConstant.SESSION_ADMIN);
}
return user;
}
/**
* @Title: getCurrentUserId
* @Description: 获取当前用户 ID
*/
protected Integer getCurrentUserId() {
Integer userId = null;
if (CommonUtil.isNotEmpty(this.getCurrentUser())) {
// 获取当前用户id
userId = (Integer) this.getCurrentUser().get("userId");
}
return userId;
}
/**
* @Title: isCurrentUserAdmin
* @Description: 判断当前用户是否是管理员
*/
protected boolean isCurrentUserAdmin() {
// 获取管理员标识
String isAdmin = (String) this.getCurrentUser().get("isAdmin");
if (CommonUtil.isNotEmpty(isAdmin) && isAdmin.equals("1")) {
return true;
}
return false;
}
/**
* @Title: setFormValid
* @Description: 设置表单校验标识
*/
protected void setFormValid() {
// 消除失效校验标识
this.getSession().setAttribute(WebConstant.FORM_VALID_NAME, null);
// 生成新标识
this.getSession().setAttribute(WebConstant.FORM_VALID_NAME, WebConstant.FORM_VALID_NAME);
}
/**
* @Title: validForm
* @Description: 提交表单后调用此方法,校验是否重复提交
*/
protected boolean validForm() {
String _validFlag = (String) getSession().getAttribute(WebConstant.FORM_VALID_NAME);
// 标识不为空
if (CommonUtil.isNotEmpty(_validFlag)) {
// 标识有效
if (_validFlag.equals(WebConstant.FORM_VALID_NAME)) {
// 消除失效校验标识
this.getSession().setAttribute(WebConstant.FORM_VALID_NAME, null);
return true;
}
}
return false;
}
}
8 最后
**项目分享: ** https://gitee.com/asoonis/htw