前言
这一篇是学生信息管理系统这个练手小项目的完结篇,前面几篇我们分别实现了这个系统的登录和增删查的功能,虽然说功能比较简单,但是对于刚刚完成JavaWeb基础知识的小伙伴来说这个项目正好可以巩固你所学,如果你看完博客觉得会了,那么我建议你还是再自己敲一遍,这样才能发现自己的问题,找出来并改正,然后继续下一阶段的学习。
界面展示
首先我们点击所要修改学生的修改按钮
点击之后,跳转到修改学生信息的界面,注意熬,这里有一个小细节,每一个框都有原来未修改的信息存在,而不是直接让你重新填写,这叫做数据的回显。
我们将孙悟空的学生信息改为猪八戒的,让猪八戒重新回来上学。
修改完成之后,点击提交按钮,跳转到学生信息列表页面。
代码
FindUserServlet(数据回显)
package com.itevent.web.servlet;
import com.itevent.domain.Users;
import com.itevent.service.UserService;
import com.itevent.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取id
String id = request.getParameter("id");
//3.调用service中的findUser方法
UserService service = new UserServiceImpl();
Users user = service.finUser(id);
//4.将数据保存到request域中
request.setAttribute("user",user);
//5.转发到update页面中
request.getRequestDispatcher("/update.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
UpdateUserServlet
package com.itevent.web.servlet;
import com.itevent.domain.Users;
import com.itevent.service.UserService;
import com.itevent.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取数据
Map<String, String[]> map = request.getParameterMap();
//3.封装数据
Users user = new Users();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用service中的updateUser方法
UserService service = new UserServiceImpl();
service.updateUser(user);
//5.重定向到findAllServlet
response.sendRedirect(request.getContextPath()+"/findAllServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Service
UserService
/**
* 修改用户信息
* @param user
*/
void updateUser(Users user);
/**
* 通过id寻找用户
* @param id
* @return
*/
Users finUser(String id);
UserServiceImpl
@Override
public void updateUser(Users user) {
dao.updateUser(user);
}
@Override
public Users finUser(String id) {
return dao.findUser(Integer.parseInt(id));
}
Dao
UserDao
void updateUser(Users user);
Users findUser(int id);
UserDaoImpl
@Override
public void updateUser(Users user) {
//1.定义一个更新的sql
String sql = "update user set user.name = ? ,user.gender = ? ,user.age = ?, user.address = ? ,user.cls = ? ,user.tel = ? where id = ?";
template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getCls(), user.getTel(), user.getId());
}
@Override
public Users findUser(int id) {
//1.定义一个查找的sql
String sql = "select * from user where id = ?";
Users users = template.queryForObject(sql, new BeanPropertyRowMapper<Users>(Users.class), id);
return users;
}
项目结构
为什么要使用多态?
使用多态可以提高可扩充性和可维护性。
项目如何运行?
创建一个Javaee项目,将源码导入即可
每个层次怎么解释?
1.web层:用来存放jsp页面和用来接收页面数据并进行逻辑处理 的servlet。
2.service层:组合Dao层中的简单方法,形成复杂的功能。
3.dao层:定义了对于数据库最基本的CRUD操作。
4.util:存放一些自己定义的工具类。
5.domain:用来存放实体类
结语
到此,一个简单的学生信息管理系统我们已经完成了,其它章节的链接都放在文末,也将源码上传到了GitHub,这是我学web以来,第一次做的功能比较全的项目,用来检测一下自己的学习成果。自己敲代码和看着视频敲代码真的是两种感觉,跟着视频敲代码,你会感觉自己都会了,讲的挺简单的。但是自己敲的时候总是会遗漏很多东西,对很多自以为熟悉的方法感到很陌生,只能根据IDEA的提示盲猜,自己敲代码的时候你需要自己构思每个功能该如何实现,这也是很大一个难点,锻炼自己的思维能力这很重要。
通过自己写项目,也感觉到基础知识是非常重要的,比如Java中逻辑语句的使用,MySQL中各种语句的熟练使用,jstl和el如何使用…这些东西如果不是很熟练,那就需要花费时间去百度,浪费了时间,但这也是学习成长的一个过程,面向百度编程是有一定道理的,我通过百度能掌握的东西那就是我的东西。
如果你发现我的代码有问题或者有可以改进的地方,在评论区指出来,共同进步呀!