## 学生信息管理系统
## 数据库准备
```
CREATE DATABASE stus;
USE stus;
CREATE TABLE stu (
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR (20),
gender VARCHAR (5),
phone VARCHAR (20),
birthday DATE,
hobby VARCHAR(50),
info VARCHAR(200)
);
```
## 查询
1. 先写一个JSP 页面, 里面放一个超链接 。
```
<a href="StudentListServlet"> 学生列表显示</a>
```
2. 写Servlet, 接收请求, 去调用 Service , 由service去调用dao
3. 先写Dao , 做Dao实现。
```java
public interface StudentDao {
/**
* 查询所有学生
* @return List<Student>
*/
List<Student> findAll() throws SQLException ;
}
---------------------------------------------
public class StudentDaoImpl implements StudentDao {
/**
* 查询所有学生
* @throws SQLException
*/
@Override
public List<Student> findAll() throws SQLException {
QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
return runner.query("select * from stu", new BeanListHandler<Student>(Student.class));
}
}
```
4. 再Service , 做Service的实现。
```java
/**
* 这是学生的业务处理规范
* @author xiaomi
*
*/
public interface StudentService {
/**
* 查询所有学生
* @return List<Student>
*/
List<Student> findAll() throws SQLException ;
}
------------------------------------------
/**
* 这是学生业务实现
* @author xiaomi
*
*/
public class StudentServiceImpl implements StudentService{
@Override
public List<Student> findAll() throws SQLException {
StudentDao dao = new StudentDaoImpl();
return dao.findAll();
}
}
```
5. 在servlet 存储数据,并且做出页面响应。
```java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1. 查询出来所有的学生
StudentService service = new StudentServiceImpl();
List<Student> list = service.findAll();
//2. 先把数据存储到作用域中
request.setAttribute("list", list);
//3. 跳转页面
request.getRequestDispatcher("list.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
```
6. 在list.jsp上显示数据
EL + JSTL + 表格
## 增加
1. 先跳转到增加的页面 , 编写增加的页面
```html
<h2 align="center">添加学生界面</h2>
<form action="AddStudentServlet" method="post">
<table border="1" width="400" align="center">
<tr>
<td>姓名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="gender" value="男" checked="checked"/>男
<input type="radio" name="gender" value="女"/>女
</td>
</tr>
<tr>
<td>电话</td>
<td><input type="text" name="phone"/></td>
</tr>
<tr>
<td>生日</td>
<td><input type="text" name="birthday"/></td>
</tr>
<tr>
<td>爱好</td>
<td>
<input type="checkbox" name="hobby" value="游泳"/>游泳
<input type="checkbox" name="hobby" value="篮球"/>篮球
<input type="checkbox" name="hobby" value="足球"/>足球
<input type="checkbox" name="hobby" value="看书"/>看书
<input type="checkbox" name="hobby" value="鞋子"/>写字
</td>
</tr>
<tr>
<td>简介</td>
<td><input type="text" name="info"/></td>
</tr>
<tr align="right">
<td colspan="2"><input type="submit" value="添加"/></td>
</tr>
</table>
</form>
```
2. 点击添加,提交数据到AddServlet . 处理数据。
```java
try {
// 1.获取客户端提交上来的数据
String sname = request.getParameter("name");
String gender = request.getParameter("gender");
String phone = request.getParameter("phone");
String birthday = request.getParameter("birthday");
// hobby需要对应的多个
String[] h = request.getParameterValues("hobby");
String hobby= Arrays.toString(h);
hobby = hobby.substring(1, hobby.length() - 1);
String info = request.getParameter("info");
// 2.添加到数据库
StudentServiceImpl service = new StudentServiceImpl();
Student student = new Student();
// 注意日期这里需要parse一下
Date date = null;
date = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
student.setSname(sname);
student.setGender(gender);
student.setPhone(phone);
student.setBirthday(date);
student.setHobby(hobby);
student.setInfo(info);
service.insert(student);
// 3.跳转到列表页
// servlet除了能跳转jsp,还能跳转servlet
// request.getRequestDispatcher("list.jsp").forward(request, response);
request.getRequestDispatcher("StudentListServlet").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
```
3. 调用service
4. 调用dao, 完成数据持久化。
```java
/**
* 添加学生的处理功能
* @throws SQLException
*
*/
@Override
public void insert(Student student) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDataSource());
String sql = "insert into stu values(null,?,?,?,?,?,?)";
queryRunner.update(sql,
student.getSname(),
student.getGender(),
student.getPhone(),
student.getBirthday(),
student.getHobby(),
student.getInfo()
);
}
```
5. 完成了这些存储工作后,需要跳转到列表页面。 这里不能直接跳转到列表页面,否则没有什么内容显示。 应该先跳转到查询所有学生信息的那个Servlet, 由那个Servlet再去跳转到列表页面。
6. 爱好的value 值有多个。
```java
request.getParameter("hobby");
String[] hobby = request.getParameterValues("hobby") ---> String[]
String value = Arrays.toString(hobby): // [爱好, 篮球, 足球]
```
### 删除
1. 点击超链接,弹出一个询问是否删除的对话框,如果点击了确定,那么就真的删除。
```html
<a href="#" onclick="doDelete(${stu.sid})">删除</a>
```
2. 让超链接,执行一个js方法
```javascript
<script type="text/javascript">
function doDelete(sid) {
/* 如果这里弹出的对话框,用户点击的是确定,就马上去请求Servlet。
如何知道用户点击的是确定。
如何在js的方法中请求servlet。 */
var flag = confirm("是否确定删除?");
if(flag){
//表明点了确定。 访问servlet。 在当前标签页上打开 超链接,
//window.location.href="DeleteServlet?sid="+sid;
location.href="DeleteServlet?sid="+sid;
}
}
</script>
```
3. 在js访问里面判断点击的选项,然后跳转到servlet。
4. servlet收到了请求,然后去调用service , service去调用dao
```java
/**
* 从数据库中删除学生
*/
@Override
public void delete(int sid) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDataSource());
String sql = "delete from stu where sid=?";
queryRunner.update(sql, sid);
}
```
## 更新
1. 点击列表上的更新, 先跳转到一个EditServlet
> 在这个Servlet里面,先根据ID 去查询这个学生的所有信息出来。
```java
/**
* 查询单个学生对象
*/
@Override
public Student findStudentById(int sid) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDataSource());
// 查询sql语句
String sql = "select * from stu where sid=?";
return queryRunner.query(sql, new BeanHandler<Student>(Student.class), sid);
}
```
2. 跳转到更新的页面。 ,然后在页面上显示数据
```html
<tr>
<td>姓名</td>
<td><input type="text" name="sname" value="${stu.sname }"></td>
</tr>
<tr>
<td>性别</td>
<td>
<!-- 如果性别是男的, 可以在男的性别 input标签里面, 出现checked ,
如果性别是男的, 可以在女的性别 input标签里面,出现checked -->
<input type="radio" name="gender" value="男" <c:if test="${stu.gender == '男'}">checked</c:if>>男
<input type="radio" name="gender" value="女" <c:if test="${stu.gender == '女'}">checked</c:if>>女
</td>
</tr>
<tr>
<td>爱好</td>
<td>
<!-- 爱好: 篮球 , 足球 , 看书
因为
使用Servlet、JSP、DBUtils、C3P0实现学生管理系统的MVC开发模式.zip
需积分: 0 119 浏览量
更新于2023-07-24
收藏 22KB ZIP 举报
在本文中,我们将深入探讨如何使用Servlet、JSP、DBUtils和C3P0来实现一个基于MVC(Model-View-Controller)架构的学生管理系统。这个系统是Java Web开发的一个典型应用,通常用于毕业设计或课程设计作业。我们将会讲解以下几个关键知识点:
1. **Servlet**:Servlet是Java中用于扩展服务器功能的接口。在学生管理系统中,Servlet充当控制器(Controller),处理HTTP请求,调用业务逻辑(Model)并更新视图(View)。例如,`AddStudentServlet` 可能用于处理添加新学生的请求,它会验证输入,与数据库交互,并最终将结果传递给JSP页面。
2. **JSP(JavaServer Pages)**:JSP是动态网页技术,用于呈现视图部分。在MVC架构中,JSP主要负责显示数据,通常包含HTML、CSS和嵌入的Java代码。例如,`studentList.jsp` 可能用来显示所有学生的信息,它从Servlet接收数据并渲染到页面上。
3. **DBUtils**:Apache DBUtils是Java数据库连接(JDBC)的一个简单实用工具,它简化了数据库操作。在学生管理系统中,DBUtils可以用来执行SQL查询,插入、更新或删除数据。通过DBUtils,开发者可以更安全、高效地处理数据库事务,减少可能出现的资源泄漏和异常处理问题。
4. **C3P0**:C3P0是一个开源的JDBC连接池,它为数据库连接提供了自动管理。在高并发的Web应用中,C3P0可以有效地管理数据库连接,避免频繁创建和销毁连接带来的性能开销。学生管理系统使用C3P0进行数据库连接池管理,提高系统性能和资源利用率。
5. **MVC设计模式**:MVC是一种软件设计模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型处理业务逻辑,视图展示数据,控制器接收用户输入并协调模型和视图。在学生管理系统中,模型可能包含关于学生对象的业务逻辑,视图负责显示数据,而控制器如Servlet则处理用户的请求。
6. **MySQL数据库**:MySQL是一种广泛使用的开源关系型数据库管理系统。在这个项目中,学生数据存储在MySQL数据库中,通过JDBC和DBUtils进行访问。开发者需要编写SQL语句来创建表,插入、更新和查询数据。
在`project_demo`这个项目中,开发者可以找到上述技术的实现细节,包括Servlet类、JSP文件、配置文件(如web.xml、c3p0.properties)以及数据库相关的Java代码。通过对这些文件的学习和理解,初学者可以掌握Java Web开发的基本流程和核心技术,进一步提升自己的编程技能。同时,这样的项目也适合作为教学案例,帮助学生理解和实践MVC架构在实际应用中的工作原理。
白话机器学习
- 粉丝: 1w+
- 资源: 7670
最新资源
- 4b045攀枝花水果在线销售系统_springboot+vue.zip
- 该系统整体包含四个功能:如图2.1数字时钟自定义显示、数字时钟校时、闹钟设置、倒计时设置,根据4个开关的0和1状态,实现功能间的切换
- 4b051基于SpringBoot的农产品电商平台_vue.zip
- 4b048.凉州区助农惠农服务平台_springboot+vue.zip
- 4b049基于SpringBoot的游戏账号交易系统的设计与实现_vue.zip
- 基于Django和MySQL的学生信息管理系统实现
- 4b053校园数字化图书馆系统_springboot+vue.zip
- 4b054动漫交流与推荐平台_springboot+vue.zip
- 4b052新能源汽车个性化推荐系统_springboot+vue.zip
- 爬楼机器人_中望3D源文件+step全套技术资料100%好用.zip
- 4b057停车场管理系统_springboot+vue.zip
- 4b058教务管理系统_springboot+vue.zip
- 百度热力图定量数据csv,shp,tif 济南市20240910日12点
- 4b056公交智能化系统_springboot+vue.zip
- 4b059二手车交易系统_springboot+vue.zip
- 4b060基于SpringBoot的漫画天堂网_vue.zip