JavaEE小项目——作业管理系统(jsp+servlet+mysql)

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

猜你喜欢

转载自blog.csdn.net/weixin_44004667/article/details/104841695