基于javaweb的JSP+Servlet 小区物业管理系统(java+mysql+jsp+bootstrap)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

131223440309

141223440309

151223440309

161223440309

171223440309

181223440309

191223440309

基于javaweb的JSP+Servlet 小区物业管理系统(java+mysql+jsp+bootstrap)

登录
用户名: admin 密码: 12345

介绍
java-web项目,采用MySQL,Tomcat,JAVA8,Servlet + JSP, 原生JDBC封装 编写

软件架构
JDK 1.8
Servlet
JSP
JDBC 二次封装,连接池
MySQL 5.7
接口代码,工具类封装

登录、注册、用户管理、小区管理、住户管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public Integer getICON() {
return ICON;
}

public BaseResponse setICON(Integer ICON) {
this.ICON = ICON;
return this;
}

public Integer getANIMATE() {
return ANIMATE;
}

public BaseResponse setANIMATE(Integer ANIMATE) {
this.ANIMATE = ANIMATE;
return this;
}

public String getMESSAGE() {
return MESSAGE;
}

public BaseResponse setMESSAGE(String MESSAGE) {
this.MESSAGE = MESSAGE;
return this;
}

public String getHtml() {
return html;
}

public BaseResponse setHtml(String html) {
this.html = html;
return this;
}

public String getScript() {
return script;
}

public void setScript(String script) {
this.script = script;
}

@JSONField(name = "STATUS")
public Integer getSTATUS() {
return STATUS;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

/**
* Copyright (C) @2020 fgwang.660@gmail.com
*
* @version 1.0
* @className TenantsServlets
* @description 住户Servlet
*/

@WebServlet ("/tenants")
public class TenantsServlets extends HttpServlet {
private static final long serialVersionUID = 4069227180245545641L;

/**
* 注入Service实现 (接口的引用 指向对应的实现类对象) 也可以写成这种 但是要使用多态 做拓展,就要写对应的接口去继承总接口 private final ICRUDService<Tenants> service = new TenantsService();
*/
private final ITenantsService service = new TenantsService();

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 看看当前是什么状态
switch (request.getParameter(Constant.REQUEST_TYPE) == null ? Constant.LIST : request.getParameter(Constant.REQUEST_TYPE)) {
// 查看详情页面
case Constant.EDIT:
case Constant.VIEW:
String id = request.getParameter(Constant.ID);
try {
Tenants tenants = service.get(Integer.parseInt(id));
// 跳转页面
BaseResponse.success(Constant.DATA_MODEL, tenants, request);
request.getRequestDispatcher("tenants/detail.jsp").forward(request, response);
} catch (BusinessException e) {
BaseResponse.error(e.getMessage(), response);
}
break;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 */
public static <T> boolean isEmpty(T t) {

// 如果t是对象
if (t == null) return true;
// 如果t是字符串
if (t instanceof String && ("".equals(t) || ("".equals(((String) t).trim())))) return true;
// 如果t是数组
if (t instanceof Object[] && ((Object[]) t).length == 0) return true;
// 如果t是list或者Set
if (t instanceof Collection && ((Collection) t).size() == 0) return true;
// 如果t是Map
return t instanceof Map && ((Map) t).size() == 0;
}

/**
* 非空判断
*
* @param t
* @param <T>
* @return
*/
public static <T> boolean isNotEmpty(T t) {
return ! isEmpty(t);
}


/**
* 判断一个字符串,是不是全部由字母组成
*
* @param arg
* @return
*/
public static boolean isLetter(String arg) {
return isEmpty(arg) || arg.matches("[a-zA-Z]+");
}

/**
* 将一个单词转换成大驼峰
*
* @param word
* @return
*/
public static String wordToUpperCamel(String word) {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38


/**
* Copyright (C) @2020 fgwang.660@gmail.com
*
* @version 1.0
* @className SystemUserServlets
* @description 用户控制层
*/

@WebServlet ({ "/users", "/login", "/register", "/logout","/forget-password" })
public class SystemUserServlets extends HttpServlet {
private static final long serialVersionUID = 1424562226724234389L;
// 用户Service注入
private final ISystemUserService service = new SystemUserService();

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// 注入的系统属性
SystemProperty property = SystemProperty.getInstance();

// 登录注册相关请求
String servletPath = request.getServletPath();
switch (servletPath) {
// 登录的页面接口代码
case Constant.LOGIN:
// 页面要登录的用户
UserDTO loginUser = UtilTools.paramMap(request, UserDTO.class);
try {
SystemUser user = service.login(loginUser);
// 登录成功
HttpSession session = request.getSession();
session.setAttribute(Constant.USER_MODEL_TOKEN, user);
session.setMaxInactiveInterval(property.getSessionHoldTime());
if (loginUser.getRemember()) {
//用户选择了记住密码
Cookie cookie = new Cookie(Constant.IDENTIFY, String.valueOf(user.getId()));
cookie.setMaxAge(property.getCookieTimeOut());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
		// 遍历每一个属性
for (Field field : fields) {
// 排除序列化id等属性
if (! excludeField(field)) continue;
// 设置属性的访问权限
field.setAccessible(true);
// 获取属性名
String key = field.getName();
// 获取属性值
String value = request.getParameter(key);

// 获取属性的类型,根据类型映射值
Class<?> fieldType = field.getType();
if (UtilTools.isNotEmpty(value)) {
// 特殊类型映射处理
if (Boolean.class.isAssignableFrom(fieldType)) {
field.set(object, Integer.parseInt(value) == 1);
} else if (Integer.class.isAssignableFrom(fieldType)) { // int类型处理
field.set(object, Integer.parseInt(value));
} else if (Long.class.isAssignableFrom(fieldType)) { // Long类型处理
field.set(object, Long.parseLong(value));
} else if (Date.class.isAssignableFrom(fieldType)) { // 日期类型处理
try {
value = value.replace("T", " ");
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
field.set(object, date);
} catch (ParseException e) {
e.printStackTrace();
}
} else { // 默认是字符串
field.set(object, value);
}
}

}
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}

return object;
}

/**
* MD5 加密算法
*
* @param character 要加密的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 响应消息
public String MESSAGE;

// 响应的html
public String html;

// 响应脚本
public String script;

// 状态码
private Integer STATUS;

// 数据
private Object DATA;

private BaseResponse() {
}

/**
* 公共全参响应
*
* @param FUNCTION 函数名
* @param ICON 图标类型
* @param ANIMATE 动画
* @param MESSAGE 响应消息
*/
public BaseResponse(String FUNCTION, Integer ICON, Integer ANIMATE, String MESSAGE) {
this.FUNCTION = FUNCTION;
this.ICON = ICON;
this.ANIMATE = ANIMATE;
this.MESSAGE = MESSAGE;
}

public BaseResponse(Integer STATUS, Object DATA) {
this.STATUS = STATUS;
this.DATA = DATA;
}

/**
* 成功基础Response


项目链接:
https://javayms.github.io?id=121223440309201dc
https://javayms.pages.dev?id=121223440309201dc