一、介绍
1.Mysql
由于之前已经介绍过,此处不再赘述。
Mysql安装介绍
2.Servlet
Servlet是使用Java语言编写的运行在服务器端的程序,Servlet由Servlet容器提供,Servlet容器将Servlet动态地加载到服务器上,使用HTTP请求和HTTP响应与客户端进行交互。
特点:方便、跨平台、具有灵活性和拓展性。
Servlet接口中定义了五个抽象方法:
- void init (ServletConfig config) 接受一个ServletConfig类型的参数,向Servlet传递初始配置化信息。
- ServletConfig getServletConfig() 用于获取Servlet对象的配置信息,返回Servlet的ServletConfig对象。
- String getServletInfo() 返回一个字符串,其中包含Servlet的信息。
- void service(ServletRequest request,ServletResponse response) 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。
- void destroy() 负责释放Servlet对象占用的资源。
HttpServlet类的常用方法:
- protected void doGet(HttpServletRequest req,HttpServletResponse resp) 用于处理GET类型的HTTP请求的方法。
- protected void doPost(HttpServletRequest req,HttpServletResponse resp) 用于处理POST类型的HTTP请求的方法。
- protected void doPut(HttpServletRequest req,HttpServletResponse resp) 用于处理PUT类型的HTTP请求的方法。
下图为Servlet与浏览器、数据库之间的关系。
如图为Servlet与Tomcat的关系,Tomcat介绍及相关安装方法:Tomcat
3.JSP
JSP全程Java Server Pages,是一种动态网页开发技术,它使用JSP标签在HTML网页中插入Java代码,通常以<%开始,以%>结束。JSP是一种Java servlet,主要用于实现Java Web应用程序的用户界面部分。网页开发者们通过结合HTML代码,XHTML代码,XML元素以及嵌入JSP操作和命令来编写JSP。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。JSP标签有多种功能,比如访问数据库、记录用户选择信息,访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
二、系统功能
1.系统功能图
下图为系统主要实现的功能:
此系统分为教师部分和学生部分,其中教师部分实现的功能有:添加学生、添加作业、查询学生作业、修改作业、修改学生信息;学生部分实现的功能有:提交作业、重新提交作业。
三、数据库设计
总共有三张表:
1.s_student表:
其中,id为学号,name为学生姓名,create_time为该学生信息的创建时间,update_time为修改时间。
2.s_homework表:
其中,id为作业id,title为作业题目,content为教师布置作业的具体内容,create_time为作业的发布时间,update_time为作业的修改时间。
3.s_student_homework表
其中,id为数据索引,student_id为学号,homework_id为作业编号,homework_title为作业标题,homework_content为学生提交的作业内容,create_time为提交时间,update_time为修改时间。
四、具体实现
1.首先下载Servlet包:下载地址
下载后,导入项目:File–>project structure–>Modules–>Dependencies–>添加Servlet的驱动包:Servlet-api.jar -->Apply。(此时里面已经包含之前导入的mysql包)
2.测试Servlet是否可用
有三种方法:
法一:继承Servlet类,在web.xml中添加映射
package servlet;
import javax.servlet.*;
import java.io.IOException;
//通过servlet连接数据库,通过jsp展现数据库中的内容
public class TestServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.getWriter().print("hello Sara!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml:其中两个Servlet一定要一致。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--两个name一定要一致-->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
</web-app>
在浏览器上测试后得到:
法二:继承HttpServlet类,在web.xml中添加映射。
package servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class TestServletV2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String myHeader = req.getHeader("myHeader");
resp.getWriter().println("Hello servlet GET v2 " + myHeader);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String param = req.getParameter("param");
resp.getWriter().println("Hello servlet POST v2 " + param);
}
}
添加映射的方法与之前相同。
法三:无需添加映射,使用@WebServlet注解
package servlet;
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;
//注解驱动(没在web.xml中配置)
@WebServlet("/TestServletV3")
public class TestServletV3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String myHeader = req.getHeader("myHeader");
resp.getWriter().println("Hello servlet GET v3 " + myHeader);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String param = req.getParameter("param");
resp.getWriter().println("Hello servlet POST v3 " + param);
}
}
3.代码框架图
4.具体功能实现(举例介绍)
添加作业:
Homework.java:homework实体类:
package model;
import java.util.Date;
public class Homework {
private long id;
private String title;
private String content;
private Date createTime;
private Date updateTime;
public long getId() {
return id;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public Date getCreateTime() {
return createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setId(long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setContent(String content) {
this.content = content;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
AddHomework.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>AddHomework</title>
</head>
<body>
<div style="text-align: center;">
//使用表单提交,使用post方法
<form action="/AddHomeworkServlet" method="post">
标题:
<input type="text" name="title" width="600px">
<br>
<br>
<textarea cols="18" rows="15" name="content">作业内容</textarea>
<br><br>
<button onclick="window.location.href('index.jsp')">返回</button>
<input type="submit" value="提交"></input>
</form>
</div>
</body>
</html>
AddHomeworkServlet.java
package servlet;
import jdbc.StudentHomeworkJdbc;
import model.Homework;
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.io.PrintWriter;
//使用注解形式与jsp通信
@WebServlet("/AddHomeworkServlet")
public class AddHomeworkServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Homework homework = new Homework();
//使用getParameter函数来获取jsp中的表单内容,其中title和content需要和jsp中name相同
homework.setTitle(req.getParameter("title"));
homework.setContent(req.getParameter("content"));
StudentHomeworkJdbc.addHomework(homework);
PrintWriter out = resp.getWriter();
out.println("Submit successfully!");
}
}
StudentHomeworkJdbc.java中的添加作业函数(此类中包括所有对数据库操作的函数)
//发布作业
public static void addHomework(Homework sh){
String url = "jdbc:mysql://127.0.0.1:3306/school";
String allUrl = url + "?user=root&password=123456";
String driverName = "com.mysql.jdbc.Driver";
String sqlString = "insert into s_student(title,content)values(?,?)";
//使用PreparedStatement方法执行sql语句
PreparedStatement pstmt;
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try(Connection connection = DriverManager.getConnection(allUrl)) {
try(Statement statement = connection.createStatement()){
pstmt = connection.prepareStatement(sqlString);
//此处index值为sql语句中变量的顺序
pstmt.setString(1,sh.getTitle());
pstmt.setString(2,sh.getContent());
pstmt.execute();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
查看已提交作业:
StudentHomework.java(实体类)
package model;
import java.util.Date;
public class StudentHomework {
private Long id;
private Long studentId;
private Long homeworkId;
private String homeworkTitle;
private String homeworkContent;
private Date createTime;
private Date updateTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public Long getHomeworkId() {
return homeworkId;
}
public void setHomeworkId(Long homeworkId) {
this.homeworkId = homeworkId;
}
public String getHomeworkTitle() {
return homeworkTitle;
}
public void setHomeworkTitle(String homeworkTitle) {
this.homeworkTitle = homeworkTitle;
}
public String getHomeworkContent() {
return homeworkContent;
}
public void setHomeworkContent(String homeworkContent) {
this.homeworkContent = homeworkContent;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
checkhomework.jsp
<%@ page import="model.StudentHomework" %>
<%@ page import="java.util.List" %>
<%@ page import="jdbc.StudentHomeworkJdbc" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>CheckHomework</title>
</head>
<body>
<h1 style="text-align: center;font-size: 30px">作业提交情况</h1>
<table align="center" width="960" border="1"
bgcolor="black" cellpadding="1" cellspacing="1">
<tr align="center" bgcolor="#7fffd4" height="50">
<td>ID</td>
<td>学生学号</td>
<td>作业编号</td>
<td>作业标题</td>
<td>作业内容</td>
<td>创建时间</td>
</tr>
<%
List<StudentHomework> list = StudentHomeworkJdbc.selectAll();
if(null == list || list.size() <= 0){
out.print("None data.");
}else {
for (StudentHomework sh : list){
%>
<tr align="center" bgcolor="white" height="30">
<td><%=sh.getId()%></td>
<td><%=sh.getStudentId()%></td>
<td><%=sh.getHomeworkId()%></td>
<td><%=sh.getHomeworkTitle()%></td>
<td><%=sh.getHomeworkContent()%></td>
<td><%=sh.getCreateTime()%></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
StudentHomeworkservlet.java
package servlet;
import jdbc.StudentHomeworkJdbc;
import model.StudentHomework;
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.util.List;
@WebServlet("/list")
public class StudentHomeworkServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<StudentHomework> list = StudentHomeworkJdbc.selectAll();
req.setAttribute("list", list);
//界面跳转
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
StudentHomeworkJdbc.java中的查看作业函数:
//查询已提交作业
public static List<StudentHomework> selectAll(){
String url = "jdbc:mysql://127.0.0.1:3306/school";
String allUrl = url + "?user=root&password=123456";
String driverName = "com.mysql.jdbc.Driver";
String sqlString = "SELECT * FROM s_student_homework";
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
List<StudentHomework> list = new ArrayList<>();
try(Connection connection = DriverManager.getConnection(allUrl)) {
try(Statement statement = connection.createStatement()){
try(ResultSet resultSet = statement.executeQuery(sqlString)){
// 获取执行结果
while (resultSet.next()){
StudentHomework sh = new StudentHomework();
sh.setId(resultSet.getLong("id"));
sh.setStudentId(resultSet.getLong("student_id"));
sh.setHomeworkId(resultSet.getLong("homework_id"));
sh.setHomeworkTitle(resultSet.getString("homework_title"));
sh.setHomeworkContent(resultSet.getString("homework_content"));
sh.setCreateTime(resultSet.getTimestamp("create_time"));
list.add(sh);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
五、部分界面展示
1.主界面
2.发布作业界面
3.添加学生界面
4.查看提交作业界面
5.提交作业界面
六、源代码
已将代码放入git,地址为:源码