1、项目背景
在学习完Java微博相关知识后,有了基础能力就想通过完成一个javaweb项目来巩固自己所学知识以及在具体开发过程中找出自己的不足,最开始想做的事项目就是学生成绩管理系统,考虑到在学习学校课程中最常见就是完成学生成绩管理系统,为了检验自己的能力学生成绩管理系统就不在考虑范畴之中,因此便完成了学生宿舍管理系统。
2、项目功能
用户登录
用户管理
学生管理
寝室管理
宿舍楼管理
3、项目使用技术
开发平台: java 、idea、maven
技术栈: servlet、Jackson、MySQL
4、 项目的基本流程
第一步:进行序列化、反序列化的操作
作用:使数据和对象之间可以转换,保证数据的完整性
Jackson介绍:Jackson是一个Java用来处理JSON格式数据的类库,性能是非常的好,他被经常用到JSON序列化(将对象转换为JSON字符串)和反序列化(将JSON字符串转换为指定的数据类型)。
Jackson在web.xml中的设置:
<!-- jackson core: 基础核心包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.9</version>
</dependency>
<!--jackson databind: 数据绑定包,提供Java对象与JSON数据格式进行序列化
及反序列化的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
<!-- jackson annotations: 为Jackson数据绑定包提供的注解支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
代码:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
public class JSONUtil {
private static final ObjectMapper MAPPER = new ObjectMapper();
static{
MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
}
public static <T> T read(InputStream is, Class<T> clazz){
try {
return MAPPER.readValue(is, clazz);
} catch (IOException e) {
throw new RuntimeException("json反序列化失败", e);
}
}
public static String write(Object o){
try {
return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(o);
} catch (JsonProcessingException e) {
throw new RuntimeException("json序列化失败", e);
}
}
}
第二步:进行数据库的操作
设计数据库实体类:
创建所需表:user(用户表)、student(学生表)、dorm(寝室表)、building(宿舍表)、dictionary(数据字典)、dictionary-tag(数据字典标签)
设计与之对应的数据库实体类:
数据库连接工具:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static volatile DataSource DS;
private static final String URL = "jdbc:mysql://localhost:3306/stu_dorm";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
//输入自己数据库用户名及密码
private DBUtil(){}
private static DataSource getDS(){
if(DS == null){
synchronized (DBUtil.class){
if(DS == null){
DS = new MysqlDataSource();
((MysqlDataSource) DS).setUrl(URL);
((MysqlDataSource) DS).setUser(USERNAME);
((MysqlDataSource) DS).setPassword(PASSWORD);
}
}
}
return DS;
}
public static Connection getConnection(){
try {
return getDS().getConnection();
} catch (SQLException e) {
throw new RuntimeException("获取数据库连接失败", e);
}
}
public static void close(Connection c, Statement s){
close(c, s, null);
}
public static void close(Connection c, Statement s, ResultSet r){
try {
if(r != null)
r.close();
if(s != null)
s.close();
if(c != null)
c.close();
} catch (SQLException e) {
throw new RuntimeException("释放数据库资源失败", e);
}
}
}
第三步:设计http请求基类
主要针对前端表格中,可以输入文本搜索,并根据页码显示列表数据
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class BaseEntity {
private Integer pageNumber;
private Integer pageSize;
private String searchText;
private String sortOrder;
}
第四步:设计http请求基类
import com.github.pagehelper.Page;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.PrintWriter;
import java.io.StringWriter;
@Getter
@Setter
@ToString
public class ResponseResult {
private boolean success;
private String code;
private String message;
private Long total;
private Object data;
private String stackTrace;
}
第五步:定义所需Dao类及实现与前端匹配的servlet完成所需功能
5、项目难点
1)在学生管理模块实现的分页管理
2)涉及过滤器实现用户不登录不允许访问主页内容并且重定向到登录页面其次用户不登录的情况下访问某个接口也是非法的。
例如:
6、存在缺陷
1)未完成用户注册功能,但可以通过用户管理中的新增完成用户添加
2)宿舍楼管理模块只实现了查询所有宿舍楼信息和新增宿舍楼的接口
3)没有完成用户注销以及查询个人资料的功能
7、项目源码
由于篇幅问题此处不适宜放置所有源码如有需要请从下方链接获取(包括数据库的创建以及初始化)
https://github.com/LiHan-hopeful/myJavaProject/tree/master/student-dorm-system