中南林业科技大学
本科课程设计说明书
学生姓名:学号:
学院:理学院
专业年级: 2013级信息与计算科学1班
课程: Web编程开发
设计(论文)题目:使用JSP做增删改查
指导教师:旷岭
2016年7月
中文摘要
本设计实现了一个简单的使用JSP对数据库增删改查的页面,该设计不仅实现了简单的登录功能,还实现了灵活的增删改查功能,而且具有简洁大方的外观。此设计按照软件工程的方法进行,系统具有良好的界面和必要的交互信息使操作人员能快捷简单地进行操作,给使用者一个简单易懂的操作感受。本系统开发平台为Windows 7,程序设计语言采用Java EE,在程序设计中,采用了结构化与面向对象两种解决问题的方法。
关键词程序设计;JavaEE;响应事件;MySQL可视化开发;HTML5
引言
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为Java程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
1、Eclipse简介
虽然大多数用户很乐于将 Eclipse 当作 Java集成开发环境(IDE)来使用,但Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python 等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse 拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse
为框架开发自己的IDE。
Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开放源码项目,它其实是Visual Age for Java
的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。
2、JavaEE 简介
JavaEE是一个开发分布式企业级应用的规范和标准。
Java语言的平台有3个版本:适用于小型设备和智能卡的JavaME(Java Platform Micro Edition,Java微型版)、适用于桌面系统的JavaSE(Java Platform Micro Edition,Java标准版)、适用于企业应用的JavaEE(Java Platform Enterprise Edition,Java企业版)。JavaEE应用程序是由组件构成的。J2EE组件是具有独立功能的单元,他们通过相关的类和文件组装成JavaEE应用程序,并与其他组件交互。JavaEE包括的技术有:Web Service、Struts、Hibernate、Spring、JSP、Servlet、JSF、EJB、JavaBean、JDBC、JNDI、XML、JavaSE。
应用程序的三层结构如下:
表示层:由用户界面和用户生成界面的代码组成。
中间层:包含系统的业务和功能代码。
数据层:负责完成存取数据库的数据和对数据进行封装。
三层体系结构的优点:
一个组件的更改不会影响其他两个组件。例如:如果用户需要更换数据库,那么只有数据层组件需要修改代码。同样,如果更改了用户界面设计,那么只有表示层组件需要修改。
由于表示层和数据层相互独立,因而可以方便地扩充表示层,使系统具有良好的可扩展性。
代码重复减少,因为在3个组件之间尽可能地共享代码。
良好的分工与协作。这将使不同的小组能够独立地开发应用程序的不同部分,并充分发挥各自的长处和优势。
3、需求分析
追逐游戏简单易玩,适合在闲暇时放松心神。并且可在多个平台上实现,程序简单易懂,非常适合MFC初学者学习制作。
4、程序设计思路
源代码页面:
登录界面:
数据库界面:
登录成功时界面:
功能模块:dao.BaseDAO.java、dao.studentDAO.java、entity.Student.java、index.jsp、login.jsp、show.jsp、ck-login.jsp
核心源代码:
// dao.BaseDAO.java : implementation of the connection between Servlet and MySQL
//
package dao;
import java.sql.*;
public class BaseDAO {
private static final String URL =
"jdbc:mysql://127.0.0.1:3306/trainee?useUnicode=true&characterEncoding=utf-8";
private static final String USER = "root";
private static final String PWD = "datou2491";
// 静态块加载一次
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 返回一个连接
*
* @return
*/
public Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(URL, USER, PWD);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public void close(ResultSet rs, PreparedStatement ps, Connection conn) { if (rs != null) {
try {
rs.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void close(PreparedStatement ps, Connection conn) { this.close(null, ps, conn);
}
}
// dao.StudentDAO.java:负责数据库的增删改查package dao;
import java.util.*;
import java.sql.*;
import entity.Student;
// 这个类专门负责对数据库进行增删改查的操作
public class StudentDAO {
/**
* 查询学生表的方法
*/
public ArrayList
BaseDAO bd = new BaseDAO();
ArrayList
Connection conn = bd.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement("select * from student");
rs = ps.executeQuery();
while (rs.next()) {
Student s = new Student();
s.setStudent_id(rs.getInt("student_id"));
s.setStudent_age(rs.getInt("student_age"));
s.setStudent_name(rs.getString("student_name"));
list.add(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
bd.close(rs, ps, conn);
}
return list;
}
public Student check(String name, int pwd) {
BaseDAO bd = new BaseDAO();
Connection conn = bd.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn
.prepareStatement("select * from student where student_name=? and student_id=?");
ps.setString(1, name);
ps.setInt(2, pwd);
rs = ps.executeQuery();
while (rs.next()) {
Student s = new Student();
s.setStudent_name(rs.getString("student_name"));
s.setStudent_id(rs.getInt("student_id"));
s.setStudent_age(rs.getInt("student_age"));
return s;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
bd.close(rs, ps, conn);
}
return null;
}
}
// entity.Student.java:Student类及其构造方法
package entity;
public class Student {
private Integer student_id;
private String student_name;
private Integer student_age;
public Integer getStudent_id() {
return student_id;
}
public void setStudent_id(Integer student_id) {
this.student_id = student_id;
}
public String getStudent_name() {
return student_name;
}
public void setStudent_name(String student_name) {
this.student_name = student_name;
}
public Integer getStudent_age() {
return student_age;
}
public void setStudent_age(Integer student_age) {
this.student_age = student_age;
}
}
// index.jsp:结果页面
<%@page import="dao.StudentDAO"%>
<%@page import="entity.Student"%>
<%@page language="java"import="java.util.*"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
"https://www.wendangku.net/doc/3f8004149.html,/TR/html4/loose.dtd">
<% Student d = (Student) session.getAttribute("user"); %>
学号 | 姓名 | 年龄 |
<%=s.getStudent_id()%> | <%=s.getStudent_name()%> | <%=s.getStudent_age()%> |
// login.jsp:登录页面
<%@page import="entity.Student"%>
<%@page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Student s = (Student) request.getAttribute("user");
%>
//ck-login.jsp:判断登录页面
<%@page import="entity.Student"%>
<%@page import="dao.StudentDAO"%>
<%@page language="java"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 从文本框中拿到的数据都是String类型的
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
int pwd1 = Integer.parseInt(pwd); // 字符串转整形
StudentDAO sd = new StudentDAO();
Student s = sd.check(name, pwd1);
if (s != null) {
session.setAttribute("user", s);
response.sendRedirect("index.jsp");// 重定向
} else {
request.getRequestDispatcher("login.jsp").forward(request, response);// 转发}
%>
//show.jsp:跳转页面
<%@page language="java"import="java.util.*"contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "java.sql.DriverManager"%>
<%@page import = "dao.StudentDAO"%>
<%@page import = "entity.Student"%>
"https://www.wendangku.net/doc/3f8004149.html,/TR/html4/loose.dtd">
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
StudentDAO sd = new StudentDAO();
ArrayList
System.out.println("the list size is " + list.size());
for (int i = 0;i < list.size(); i++) {
out.print(list.get(i).getStudent_name() + "
");
}
%>
跳转成功
结论/讨论
这一次的课程设计,对我个人来说是相当有难度的。在设计的过程中,有很多问题不是很清楚,所以走起来就很困难。有时候在遇到问题的时候,基本知识都了解,但是不知道怎么把他们整合起来,知识没有形成系统,都是很零散的东西。而且,由于以前的基础知识不够牢固,使得我在这次课程设计中感到更加的困难。在设计的过程中,每走一步就会发现,思路想出来很容易,但涉及到实现的时候,总是有点手足无措。对于我的这次课程设计,里面还有很多要改进的地方。当然一个程序的顺利出炉,少不了的就是反复的调试和更改。在调试的过程中,总会发现很多错误,在解决这些错误的同时,开始很模糊的概念,就会越来越清晰。其实有很多错误都是很类似的,只要解决了一个,其他的也就迎刃而解了。其实,这一个程序的完成,并不是我一个人的功劳。有很多不懂的地方就会向别人请教,同学之间的相互帮助,确实能够解决很多问题。
参考文献:
1)Java程序设计实践教程第2版,吴乃陵李海文高等教育出版社
2)深入浅出JAVAEE第2版,候俊杰华中科技大学出版社
3)Java从入门到实践,葛亮清华大学出版社
4)郑莉,董渊,张瑞丰.MySQL从入门到精通.第3版.清华大学出版社、5)JAVA设计模式.第二版.清华大学出版社.