avatar

Catalog
个人信息管理系统-JavaWeb项目总结分析

最近学习 javaweb 阶段 ,基本学习了原始的 jsp 开发,完成了一个比较综合的案例,记录一下各种操作的逻辑,以及具体的代码实现细节。

技术概览:

前端 页面采用 原生 html+ css+ javascript ;

后端 采用 Java, Jsp开发,具体包含原生 servletrequestresponse

该系统主要包含功能

  • 登录
  • 显示用户信息
    • 分页显示
  • 添加联系人
  • 删除联系人:
    • 单条删除
    • 多选删除
    • 全选全部选
  • 修改联系人;
  • 根据条件查询联系人;

项目架构设计

如图,首先按web三层结构( 浏览器 —> 服务器 —> 数据库 )来分

  • web 表示层 —- 包括 控制器 Servlet Jsp页面
  • 业务逻辑层 —- 业务实现逻辑
  • 数据访问层 —- 具体操作数据库

首先拿到前端页面,修改一下逻辑


功能实现

登录 Login

  • login.jsp 表单提交到 loginServlet ;
jsp
1
"${pageContext.request.contextPath}/loginServlet" method="post">
  • loginServlet 逻辑
    • 验证码校验:
java
1
2
3
4
5
6
7
8
9
10
11
12
13
// 获取填写的验证码值
String verifycode = request.getParameter("verifycode");
// 获取真实验证码值
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
session.removeAttribute("CHECKCODE_SERVER");
//判断 验证码错误转发到该页面
// 转发仅在当前页面
if(!checkcode_server.equalsIgnoreCase(verifycode)){
request.setAttribute("login_msg","验证码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
    • 获取参数,封装User对象,
    • 传入 service.login(user)
    • 结果不为空,返回 User 对象,重定向到首页
    Code
    1
    response.sendRedirect(request.getContextPath()+"/index.jsp");
    • 结果为空,设置错误信息,转发到当前页面
    java
    1
    request.getRequestDispatcher("/login.jsp").forward(request,response);
  • servlet.login 数据库实现

sql
1
2
3
String sql = "select * from user where username=? and password=?";
User loginUser = template.queryForObject(sql, new BeanPropertyRowMapper(User.class), user.getUsername(), user.getPassword());
return user;

添加联系人

  • 添加联系人的页面 add.jsp ,填写表单信息后提交到 addInfoServlet
html
1
<form action="${pageContext.request.contextPath}/addInfoServlet" method="post" id="form">

填写信息之后要进行表单校验,采用 js 实现:

javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
window.onload = function () {
function nameChecked() {
var name = document.getElementById("name").value;
var reg_name = /^[\u4e00-\u9fa5]{1,8}$/;
var flag = reg_name.test(name);
var block = document.getElementById("n_c");
if (!flag) {
block.innerHTML = "名字只能输入汉字哦!";
}else {
block.innerHTML = " ";

}

return flag;
}
document.getElementById("name").onblur = nameChecked;
document.getElementById("form").onsubmit = function () {
return nameChecked();
}
}

addInfoServlet 逻辑

  • 获取参数信息,封装对象

    java
    1
    Map infoMap = request.getParameterMap();
  • 调用service.addInfo(addUser) 添加信息

  • 重定向到展示信息页面

    java
    1
    response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");

service.addInfo(addUser)` 数据库操作

java
1
2
3
String sql = "insert into user (name,gender,age,address,qq,email)  values " +
"(?,?,?,?,?,?)";
template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());

删除联系人

  • 单条信息删除,点击删除后跳转至 deleteInfoServlet ,并且通过后缀 ?id=${user.id} 传入参数
  • 根据当前id 删除该条信息
java
1
2
String sql = "delete from user where id=?";
template.update(sql, id);
  • 重定向到信息展示页面

修改联系人信息

  • 点击修改按钮,传入当前id,跳转至 FindUserServlet
  • 获取当前联系人信息记录,将User对象设置到域对象,转发到 update.jsp 文件中,在该文件中信息输入框设置 value属性,将设置的Usre信息回显
  • update.jsp 表单信息提交到 updateInfoServlet ,在该servlet中,与上述逻辑类似,更新信息。

分页显示信息

封装page对象返回给浏览器,具体包含:

java
1
2
3
4
5
private int totalCount; // 总记录数
private int totalPage; // 总页数
private List list; // 每页数据
private int currentPage; // 当前页数
private int rows; // 每页的数目

需要浏览器传给服务器 currentPagerows 参数

image-20201007231426556

image-20201007231724903

java
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
@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");


String currentPage = request.getParameter("currentPage");
String rows = request.getParameter("rows");

if(currentPage == null || "".equals(currentPage) ){
currentPage = "1";
}

if (rows==null || "".equalsIgnoreCase(rows)){
rows = "7";
}

Map conditions = request.getParameterMap();


UserService service = new UserServiceImpl();
PageBean pageUsers = service.findUserByPage(currentPage, rows, conditions);
// System.out.println(pageUsers);
request.setAttribute("pageUsers",pageUsers);
request.setAttribute("condition",conditions);
request.getRequestDispatcher("/list.jsp").forward(request,response);


}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
java
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
 public PageBean findUserByPage(String _currentPage, String _rows, Map condition) {

int currentPage = Integer.parseInt(_currentPage);
int rows = Integer.parseInt(_rows);

if(currentPage<=0){
currentPage = 1;
}

PageBean page = new PageBean<>();

page.setRows(rows);

page.setCurrentPage(currentPage);


int totalCount = dao.findTotalCount(condition);
page.setTotalCount(totalCount);

int start = (currentPage - 1) * rows;
List userList = dao.findUserByPage(start, rows, condition);
page.setList(userList);

int totalPage = totalCount % rows == 0 ? totalCount / rows : totalCount / rows + 1;
page.setTotalPage(totalPage);

return page;
}
}
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public int findTotalCount(Map condition) {

String sql = "select count(*) from user where 1=1 ";
StringBuilder sb = new StringBuilder();
sb.append(sql);

List params = new ArrayList();

for (String key : condition.keySet()) {

if ("currentPage".equals(key) || "rows".equals(key)) {
continue;
}

String value = condition.get(key)[0];
if (value != null && !"".equals(value)) {
sb.append(" and " + key + " like ? ");
params.add("%" + value.replaceAll(" ","") + "%");
}
}
return template.queryForObject(sb.toString(), Integer.class, params.toArray());
}
java
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
public List findUserByPage(int start, int rows, Map condition) {
String sql = "select * from user where 1 = 1 ";
StringBuilder sb = new StringBuilder();
sb.append(sql);

List params = new ArrayList();

for (String key : condition.keySet()) {

if ("currentPage".equals(key) || "rows".equals(key)) {
continue;
}

String value = condition.get(key)[0];
if (value != null && !"".equals(value)) {
sb.append(" and " + key + " like ? ");
params.add("%" + value.replaceAll(" ","") + "%");
}
}
params.add(start);
params.add(rows);
sb.append(" limit ?, ? ");
List userList = template.query(sb.toString(), new BeanPropertyRowMapper(User.class), params.toArray());
return userList;
}
Author: 星星泡饭
Link: https://luoyou.art/2020/10/07/%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F-Web%E9%A1%B9%E7%9B%AE%E6%80%BB%E7%BB%93%E5%88%86%E6%9E%90/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment