有需要参考的可以进入,项目下载地址。
一:功能描述
该项目实现了以下功能:
页面包括展示信息和管理信息两部分,并且实现了图片验证登录
通过连接数据库并执行SQL语句实现对数据库的增、删、查、改
使用DBUtils数据库工具(QueryRunner)
页面基本美观且合理
设置了过滤器解决乱码问题,并实现了退出返回主页
下面是部分截图:
1.主页
2.登录界面
3.登录成功
登陆时调用登录doLogin,该Servlet完成相应的逻辑操作(判断用户名、密码、验证码是否为空)、并且调用相应的BaseDao数据库访问层的相应组件,完成登陆校验,然后将结果返回给视图层 ,视图层提供给用户,以界面的形式展示。
4.修改
5.查看
6.添加
7.删除
二:实现方法
①实现该项目涉及的知识有:
HTML,CSS,JavaScript,MySQL数据库,JSP指令,JSP对象,JavaBean,JDBC,EL和JSTL,Servlet,Filter过滤器等最基本的知识。使用了JavaBean+JSP+Servlet开发模型,就是Model+View+Controller,即MVC设计模式。
②主要的思想和方法
• 继承HTTPServlet父类重写 doGet() 和doPost()方法
• 使用request.getParameter(String str); 获取前台(页面)的数据(获取参数)
• 给前台页面设置值用:request.setAttribute(String args, Object obj);
• Jsp重定向,使用的是HttpServletResponese对象中response.sendRedirect(Sting location)方法。是一个响应对象的方法,调用这个方法,表明整个请求已经结束。
• 请求转发,是javax.servlet.RequestDispatcher接口的forward(“”)方法来实现的。
③设计流程:
Servlet -> Service(业务类) -> DAO -> database
当浏览器提交请求到 Tomcat Web 服务器的时候,对应的 Servlet 的doGet/doPost 方法会被调用,接着在 Servlet 中调用 Service类,然后在 Service 类中调用DAO类,最后在 DAO 中访问数据库获取相应的数据。
**④实现该项目我所做的基本步骤:**需求分析,软件设计,编码及实现,美化以及完善。
首先需要搭建数据库,实现学生和老师实体类,这里不做具体描述。
1.数据库操作的基类BaseDao,实现连接、查询、释放资源,下面是部分代码:
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/Student";
String username = "root";
String password = "123";
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
2.定义学生操作的接口StudentDao,下面是部分代码:
public interface StudentDao {
//获取所有学生信息
public List getAllStudent();
//获取指定学生信息
public Student getStudentMoreInfo(Student student);
//添加学生
public int addStudent(Student student);
//删除学生
public int delStudent(Student student);
//修改学生信息
public int modifyStudent(Student student);
}
3.实现接口StudentDao,获取所有学生信息部分代码:
List list = new ArrayList();
String sql = "select `id`,`name`,`gradeId`,`age`,`sex`,`profile` from student ";
Object[] params = {};
ResultSet rs = this.executeQuerySQL(sql, params);
try {
while (rs.next()) {
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setAge(rs.getInt("age"));
stu.setGradeId(rs.getInt("gradeId"));
stu.setSex(rs.getString("sex"));
stu.setName(rs.getString("name"));
stu.setProfile(rs.getString("profile"));
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
}
下图为查询方法以及步骤:
4. 实现接口StudentDao,获取指定学生信息部分代码:
Student stu = new Student();
String sql = "select `name`,`gradeId`,`age`,`sex`,`profile` from student where `id`=?";
Object[] params = { student.getId() };
ResultSet rs = this.executeQuerySQL(sql, params);
try {
while (rs.next()) {
stu.setAge(rs.getInt("age"));
stu.setGradeId(rs.getInt("gradeId"));
stu.setSex(rs.getString("sex"));
stu.setName(rs.getString("name"));
stu.setProfile(rs.getString("profile"));
}
} catch (SQLException e) {
e.printStackTrace();
}
5 实现接口StudentDao,添加学生部分代码:
int row = 0;
String sql = "insert into student(`id`,`name`,`age`,`sex`,`gradeId`,`profile`) values(?,?,?,?,?,?)";
Object[] params = {student.getId(),student.getName(),student.getAge(),student.getSex(),student.getGradeId(),student.getProfile()};
row = this.executeUpdateSQL(sql, params);
if(row>0){
System.out.println("增加学生成功");
}else{
System.out.println("增加学生失败");
}
return row;
删除学生和添加学生操作类似,这里不再做具体描述。
6. 下面是处理登录的Servlet,用来处理登录请求,部分代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
String checkCode = request.getParameter("check_code");
String savedCode = (String) request.getSession().getAttribute(
"check_code");
if(userName!=null && !userName.equals("")&& checkCode.equals(savedCode)){
UserService uerService = new UserServiceimp();
User user = new User();
user.setUsername(userName);
user.setPassword(password);
if(uerService.findUser(user)){//存在这个用户,可以正常访问学生信息
request.getSession().setAttribute("user", user);
response.sendRedirect("/Student/pages/stuList.jsp");
}else {//不存在这个用户,给出提示,转回登录页面
String message = "用户名或密码错误";
request.getSession().setAttribute("msg", message);
response.sendRedirect("/Student/login.jsp");
}
}else {
//判断验证码是否正确
String message = "验证码输入错误!!!";
request.getSession().setAttribute("msg", message);
response.sendRedirect("/Student/login.jsp");
}
}
下面是addStudent Servlet类实现添加学生到数据库的部分代码,其他不做详细描述:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("stuName");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("stuAge"));
String gradeName = request.getParameter("stuGrade");
String profile = request.getParameter("showProfile");
GradeService gService = new GradeServiceimp();
Grade grade = gService.getGrade(gradeName);
Student stu = new Student();
stu.setName(name);
stu.setAge(age);
stu.setSex(sex);
stu.setProfile(profile);
stu.setGradeId(grade.getGradeId());
StudentService studentService = new StudentServiceimp();
String opr = request.getParameter("opr");//根据传的opr参数决定是添加学生还是修改学生信息
int n = 0;
if(opr.equals("addStu")){ //添加
n = studentService.addStudent(stu);
}else if(opr.equals("modifyStu")){//修改
int id = Integer.parseInt(request.getParameter("stuId"));
stu.setId(id);
n = studentService.modifyStudent(stu);
}
if(n>0){
response.sendRedirect("/Student/pages/stuList.jsp");
}else{
response.sendRedirect("/Student/pages/addStu.jsp");
}
}
此外,jsp中使用了css来统一控制样式,用JavaScript在本地处理一些简单的判断,例如: