本章节学习了使用JDBC连接MYSQL数据库 ,并将数据库中信息使用jsp和servlet呈现在页面上。
servlet介绍
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
JSP 介绍
JSP(Java Server Pages)是Sun 公司指定的一种服务器端动态页面技术的组件规范,Jsp是以“.jsp”为后缀的文件,在该文件中主要是html 和少量的java 代码。jsp 文件在容器中会转换成Servlet中执行。
以下是一个作业管理系统的简单实现
老师:添加作业,添加学生,查询学生作业
学生:作业提交,查询布置的作业
先对功能进行演示
初始界面
进入老师界面
添加作业
点击确定后
学生可以看到添加的作业,接下来进入学生端
表格中出现了刚刚添加的作业
其余功能大同小异,不做演示,可自行下载源码进行操作
接下来对源码进行简单的介绍
以下介绍以homework为例,其他两个模块大同小异
首先是sql建表
DROP TABLE if exists `school`.`s_homework`;
CREATE TABLE `school`.`s_homework` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(20) NULL,
`content` TEXT NULL,
`create_time` TIMESTAMP NOT NULL,
`update_time` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
然后建立module层,建立homework类
package module;
import java.util.Date;
public class Homework {
private Long id;
private String name;
private String content;
private String createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String homeworkTitle) {
this.name = homeworkTitle;
}
public String getContent() {
return content;
}
public void setContent(String homeworkTitle) {
this.content = homeworkTitle;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
使用JDBC连接表,建立一个对该表的查询方法和一个对该表的添加功能
对该表进行查询,并将返回结果放到list中
public static List<Homework> selectAll(){
String url = "jdbc:mysql://localhost:3306/school?&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String user="root";
String password="root";
String driverName = "com.mysql.cj.jdbc.Driver";
String sqlString = "SELECT * FROM s_homework";
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
List<Homework> list = new ArrayList<>();
try(Connection connection = DriverManager.getConnection(url, user, password)) {
try(Statement statement = connection.createStatement()){
try(ResultSet resultSet = statement.executeQuery(sqlString)){
// 获取执行结果
while (resultSet.next()){
Homework hw = new Homework();
hw.setId(resultSet.getLong("id"));
hw.setName(resultSet.getString("title"));
hw.setContent(resultSet.getString("content"));
hw.setCreateTime(resultSet.getString("create_time"));
list.add(hw);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
在servlet中调用该方法,将得到的list发送到到jsp页面上进行显示
@WebServlet("/Homeworklist")
public class HomeworkServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Homework> list = HomeworkJdbc.selectAll();
req.setAttribute("list", list);
req.getRequestDispatcher("homework.jsp").forward(req, resp);
}
}
jsp代码如下,注意JSP中的java代码一定要放到 <%%>中,html标签不能放入其中
<%@ page import="module.Homework" %>
<%@ page import="jdbc.HomeworkJdbc" %>
<%@ page import="java.util.List" %><%--
Created by IntelliJ IDEA.
User: zht
Date: 2020/3/13
Time: 18:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table align="center" width="960" border="1"
bgcolor="black" cellpadding="1" cellspacing="1">
<tr align="center" bgcolor="#7fffd4" height="50">
<td>作业编号</td>
<td>作业标题</td>
<td>作业要求</td>
<td>创建时间</td>
</tr>
<%
List<Homework> list = HomeworkJdbc.selectAll();
if(null == list || list.size() <= 0){
out.print("None data.");
}else {
for (Homework hw : list){
%>
<tr align="center" bgcolor="white" height="30">
<td><%=hw.getId()%></td>
<td><%=hw.getName()%></td>
<td><%=hw.getContent()%></td>
<td><%=hw.getCreateTime()%></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
至此即完成了显示部分的功能
接着建立一个对该表进行添加的方法,去完成对表进行添加的功能
public static void
addStudentHomework(Homework hw){
String url = "jdbc:mysql://localhost:3306/school?&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String user="root";
String password="root";
String driverName = "com.mysql.cj.jdbc.Driver";
String sqlString = "INSERT INTO s_homework(`id`,`title`,`content`,`create_time`) VALUES('"+hw.getId()+"','"+hw.getName()+"','"+hw.getContent()+"','"+hw.getCreateTime()+"')";
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try(Connection connection = DriverManager.getConnection(url, user, password)) {
try(Statement statement = connection.createStatement()){
statement.executeUpdate(sqlString);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
然后是添加部分的jsp,通过form表单进行提交,将添加作业的信息发送到servlet
<html>
<head>
<title>添加作业</title>
</head>
<body>
<center>
<h1 style="color:red">添加作业</h1>
<form id="indexform" name="/addhomework" action="/student_system_war_exploded/addhomework" method="post">
<table border="0">
<tr>
<td>id:</td>
<td><input type="text" name="hw_id"></td>
</tr>
<tr>
<td>作业名字</td>
<td><input type="text" name="hw_name"></td>
</tr>
<tr>
<td>作业内容</td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td>创建时间</td>
<td><input type="text" name="create_time"></td>
</tr>
</table>
<br>
<input type="submit" value="确定" style="color:#BC8F8F">
</form>
<form action="teacher.jsp">
<input type="submit" value="返回" style="color:#BC8F8F">
</form>
</center>
</body>
</html>
servlet将得到的信息存到homework类的一个实体中,调用jdbc方法将其添加到数据库中
@WebServlet("/addhomework")
public class AddHomeworkServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Homework hm = new Homework();
req.setCharacterEncoding("utf-8");
hm.setId(Long.parseLong(req.getParameter("hw_id")));
hm.setName(req.getParameter("hw_name"));
hm.setContent(req.getParameter("content"));
hm.setCreateTime(req.getParameter("create_time"));
StudentHomeworkJdbc.addStudentHomework(hm);
resp.sendRedirect("success.jsp");
}
}
以上即完成了对作业的添加
具体源码可以参考
https://github.com/zht777/JAVE-02