作业管理系统
JavaEE小项目——作业管理系统(jsp+servlet+mysql)
项目要求:
项目前认识:
一、Servlet
Servlet 是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
Servlet不同于JSP,虽然jsp本质也是一种servlet,但是jsp有着自己的定义, JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
(更多说明二者的联系请到https://blog.csdn.net/anwarkanji/article/details/90526155 上浏览)
二、JDBC
JDBC 架构
分为双层架构和三层架构。
双层
Two-tier-Architecture-for-Data-Access
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
三层
Three-tier-Architecture-for-Data-Access
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。
三、jsp
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
数据库构建
分析项目要求,这里我设置了三张表,分别为student表,homework表和student_homework表。
1.student表:
设置两个变量:sno,sname
分别对应学生学号和学生姓名。
2.homework表:
设置两个变量:hno,htitle
分别对应作业序号和作业题目。
3.student_homework表:
设置五个变量:no,hno,sno,htitle,hcontent
分别对应自增序号,作业序号,学号,作业题目,作业内容。
用例图
JDBC层
1.StudentJdbc.java
package com.java.code.class1.jdbc;
import com.java.code.class1.model.Student;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class StudentJdbc {
public static List<Student> selectAlls(){
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
String sqlString = "SELECT * FROM student";
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
List<Student> list =new ArrayList<>();
try(Connection connection = DriverManager.getConnection(allUrl)) {
try(Statement statement = connection.createStatement()){
try(ResultSet resultSet = statement.executeQuery(sqlString)){
// 获取执行结果
while (resultSet.next()){
Student s= new Student();
s.setSno(resultSet.getInt("sno"));
s.setSname(resultSet.getString("sname"));
list.add(s);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public static void addStudent(Student s) throws SQLException {
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
Connection connection = DriverManager.getConnection(allUrl);
try {
String sqlString = "insert into student(sno,sname) values (?,?)";
PreparedStatement t = connection.prepareStatement(sqlString);
t.setInt(1,s.getSno());
t.setString(2,s.getSname());
t.execute();
Class.forName(driverName);// 加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2.HomeworkJdbc.java
package com.java.code.class1.jdbc;
import com.java.code.class1.model.Homework;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class HomeworkJdbc {
public static List<Homework> selectAllh(){
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
String sqlString = "SELECT * FROM homework";
try {
// 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
List<Homework> list =new ArrayList<>();
try(Connection connection = DriverManager.getConnection(allUrl)) {
try(Statement statement = connection.createStatement()){
try(ResultSet resultSet = statement.executeQuery(sqlString)){
// 获取执行结果
while (resultSet.next()){
Homework h = new Homework();
h.setHno(resultSet.getInt("hno"));
h.setHtitle(resultSet.getString("htitle"));
list.add(h);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public static void addHomework(Homework h) throws SQLException {
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
Connection connection = DriverManager.getConnection(allUrl);
try {
String sqlString = "insert into homework(hno,htitle) values (?,?) ";
PreparedStatement t = connection.prepareStatement(sqlString);
t.setInt(1,h.getHno());
t.setString(2,h.getHtitle());
t.execute();
Class.forName(driverName);// 加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
3.StudentHomework.java
package com.java.code.class1.jdbc;
import com.java.code.class1.model.StudentHomework;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class StudentHomeworkJdbc {
public static void main(String[] args) {
List<StudentHomework> list = selectALL();
for(StudentHomework sh :list){
System.out.println(sh.getHcontent());
}
}
public static List<StudentHomework> selectALL(){
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
String sqlString = "SELECT * FROM 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.setNo(resultSet.getInt("no"));
sh.setHno(resultSet.getInt("hno"));
sh.setSno(resultSet.getInt("sno"));
sh.setHtitle(resultSet.getString("htitle"));
sh.setHcontent(resultSet.getString("hcontent"));
list.add(sh);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public static void handHomework(StudentHomework sh)throws SQLException{
String url = "jdbc:mysql://127.0.0.1:3306/test2";
String allUrl = url + "?user=root&password=991015";
String driverName = "com.mysql.jdbc.Driver";
Connection connection = DriverManager.getConnection(allUrl);
try {
String sqlString = "insert into student_homework(no, hno, sno, htitle, hcontent) values (?,?,?,?,?)";
PreparedStatement t = connection.prepareStatement(sqlString);
List<StudentHomework> s = StudentHomeworkJdbc.selectALL();
t.setInt(1,s.size()+1);
t.setInt(2,sh.getHno());
t.setInt(3,sh.getSno());
t.setString(4,sh.getHtitle());
t.setString(5,sh.getHcontent());
t.execute();
Class.forName(driverName);// 加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
model层
1.Student.java
package com.java.code.class1.model;
public class Student {
private int sno;
private String sname;
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
2.Homework.java
package com.java.code.class1.model;
public class Homework {
private int hno;
private String htitle;
public int getHno() {
return hno;
}
public void setHno(int hno) {
this.hno = hno;
}
public String getHtitle() {
return htitle;
}
public void setHtitle(String htitle) {
this.htitle = htitle;
}
}
3.StudentHomework.java
package com.java.code.class1.model;
public class StudentHomework {
private int no;
private int hno;
private int sno;
private String htitle;
private String hcontent;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getHno() {
return hno;
}
public void setHno(int hno) {
this.hno = hno;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getHtitle() {
return htitle;
}
public void setHtitle(String htitle) {
this.htitle = htitle;
}
public String getHcontent() {
return hcontent;
}
public void setHcontent(String hcontent) {
this.hcontent = hcontent;
}
}
Servlet层
1.StudentServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.StudentJdbc;
import com.java.code.class1.model.Student;
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("/student")
public class StudentServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Student> s = StudentJdbc.selectAlls();
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
req.setAttribute("studentlist",s);
req.getRequestDispatcher("student.jsp").forward(req,resp);
}
}
2.HomeworkServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.HomeworkJdbc;
import com.java.code.class1.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.util.List;
@WebServlet("/homework")
public class HomeworkServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Homework> h = HomeworkJdbc.selectAllh();
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
req.setAttribute("homeworklist",h);
req.getRequestDispatcher("homework.jsp").forward(req,resp);
}
}
3.StudentHomeworkServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.StudentHomeworkJdbc;
import com.java.code.class1.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 {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
List<StudentHomework> list = StudentHomeworkJdbc.selectALL();
req.setAttribute("list", list);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
4.HandinServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.StudentHomeworkJdbc;
import com.java.code.class1.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("/hand")
public class HandinServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
List<StudentHomework> sh = StudentHomeworkJdbc.selectALL();
req.setAttribute("studenthomeworklist",sh);
req.getRequestDispatcher("handin.jsp").forward(req,resp);
}
}
5.AddStudentServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.StudentJdbc;
import com.java.code.class1.model.Student;
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.sql.SQLException;
@WebServlet("/addstudent")
public class AddStudentServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
try {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
Student s =new Student();
s.setSno(Integer.parseInt(req.getParameter("studentno")));
s.setSname(req.getParameter("studentname"));
StudentJdbc.addStudent(s);
} catch (SQLException e) {
e.printStackTrace();
}
resp.setHeader("refresh","5;URL=index.jsp");
}
}
6.AddHomeworkServlet.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.HomeworkJdbc;
import com.java.code.class1.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.sql.SQLException;
@WebServlet("/addhomework")
public class AddHomeworkServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
Homework h =new Homework();
h.setHno(Integer.parseInt(req.getParameter("homeworkno")));
h.setHtitle(req.getParameter("homeworktitle"));
HomeworkJdbc.addHomework(h);
} catch (SQLException e) {
e.printStackTrace();
}
resp.setHeader("refresh","5;URL=index.jsp");
}
}
7.AddAnswer.java
package com.java.code.class1.servlet;
import com.java.code.class1.jdbc.StudentHomeworkJdbc;
import com.java.code.class1.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.sql.SQLException;
@WebServlet("/handin")
public class AddAnswer extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try{
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
StudentHomework sh =new StudentHomework();
sh.setSno(Integer.parseInt(req.getParameter("studentno")));
sh.setHno(Integer.parseInt(req.getParameter("homeworkno")));
sh.setHtitle(req.getParameter("homeworktitle"));
sh.setHcontent(req.getParameter("homeworkcontent"));
StudentHomeworkJdbc.handHomework(sh);
}catch (SQLException e) {
e.printStackTrace();
}
resp.setHeader("refresh","5;URL=index.jsp");
}
}
web界面(jsp)
1.index.jsp
<%--
Created by IntelliJ IDEA.
User: win7
Date: 2020/3/9
Time: 0:16
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>作业管理系统</title>
</head>
<body align = "center">
<h1>作 业 管 理 系 统</h1>
<br><br>
<input type = "button" value = "添加学生" style="width:160px;height: 60px;font-size:16px" onclick = "window.location.href = 'student.jsp'">
<br><br>
<input type = "button" value = "添加作业" style="width:160px;height: 60px;font-size:16px" onclick = "window.location.href = 'homework.jsp'">
<br><br>
<input type = "button" value = "提交作业" style="width:160px;height: 60px;font-size:16px" onclick = "window.location.href = 'handin.jsp'">
<br><br>
<input type = "button" value = "显示作业提交情况" style="width:160px;height: 60px;font-size:16px" onclick = "window.location.href = 'studenthomework.jsp'">
</body>
</html>
主界面:
2.homework.jsp
<%--
Created by IntelliJ IDEA.
User: win7
Date: 2020/3/12
Time: 21:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加作业</title>
</head>
<body align="center">
<h1>添 加 作 业</h1>
<form action="addhomework" method="post">
作业序号:<label>
<input type="text" name="homeworkno">
</label><br>
作业题目:<label>
<input type="text" name="homeworktitle">
</label><br>
<input type="submit" id="submit" value="添加作业">
</form>
</body>
</html>
添加作业界面:
3.student.jsp
<%--
Created by IntelliJ IDEA.
User: win7
Date: 2020/3/12
Time: 21:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加学生</title>
</head>
<body align="center">
<h1>添 加 学 生</h1>
<form action="addstudent" method="post">
学生I D:<label>
<input type="text" name="studentno">
</label><br>
学生姓名:<label>
<input type="text" name="studentname">
</label><br>
<input type="submit" id="submit" value="添加学生">
</form>
</body>
</html>
添加学生界面:
3.handin.jsp
<%--
Created by IntelliJ IDEA.
User: win7
Date: 2020/3/12
Time: 21:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>提交作业</title>
</head>
<body align="center">
<h1>提 交 作 业</h1>
<form action="handin" method="post">
学生学号:<label>
<input type="text" name="studentno">
</label><br>
作业序号:<label>
<input type="text" name="homeworkno">
</label><br>
作业题目:<label>
<input type="text" name="homeworktitle">
</label><br>
作业内容:<label>
<input type="text" name="homeworkcontent">
</label><br>
<input type="submit" id="submit" value="上交作业">
</form>
</body>
</html>
提交作业界面:
4.studenthomework.jsp
<%@ page import="java.util.List" %>
<%@ page import="com.java.code.class1.model.StudentHomework" %>
<%@ page import="com.java.code.class1.jdbc.StudentHomeworkJdbc" %>
<%--
Created by IntelliJ IDEA.
User: win7
Date: 2020/3/9
Time: 11:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>StudentHomework</title>
</head>
<body>
<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>
</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.getNo()%></td>
<td><%=sh.getHno()%></td>
<td><%=sh.getSno()%></td>
<td><%=sh.getHtitle()%></td>
<td><%=sh.getHcontent()%></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
查看作业界面:
项目Github链接:https://github.com/coach9910/test2
项目过程中发现的问题
1.没有弄清楚mysql数据类型与java类型如何对应,也通过很多博客区了解到。
可以戳这里了解https://blog.csdn.net/woshifeixingzhuiyue/article/details/43529329
2.页面报错404:
报错:The origin server did not find a current representation for the target resource
这个问题就有很多方面了,多数都是代码逻辑的问题,还有一部分是由于开始Tomcat默认url没设置好。
这里也是我遇到的一个问题,供大家理解:
https://blog.csdn.net/qq_26817225/article/details/82587652?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
3.很多很多很多很多乱码问题,上网查了无数种方法,几乎每种都试过,可谓是万物都可UTF-8.
这也有一份解决方案:https://blog.csdn.net/qq_31868147/article/details/104107696?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
4.intellij idea 警告 SQL dialect is not configured
(是由于设置sql语句的时候,没有去改成mysql,默认的是Generic SQL)
这是解决方法:https://blog.csdn.net/littlehaes/article/details/104139611
5.最后:就在刚刚,还经历了项目完成前的最后一个bug!IDEA上传到github出错,也是最后一块绊脚石了,附上解决方案:
https://blog.csdn.net/u011493599/article/details/54378461