要完成这个任务,首先要知道需要什么东西并且想想怎么去做。
有一说一,在周五之前我只学了MySQL,其他的知识都是在朝勇的指点下跟随他的路线去突击学习的,并且通过和他一样的方法完成的本次项目(勇哥nb!)。
在开始做这个任务之前,首先,梳理一下需要的知识储备
①需要学习SQL语句实现对数据库的增删改以及查询的操作
②在IDEA或Eclipse中通过JDBC去连接数据库
③需要建立Marven项目并导入相对应的依赖或在项目中导入jar包以完成连接MySQL的驱动器
④用servlet去处理.jsp中的信息(由于功能较为简单,直接在servlet中实现了把数据传入数据库和异常处理的操作)
⑤了解一些jsp的知识,简单绘制页面(由于时间不太够,而且基础的功能非常简单就没有学习怎么去写,只是稍微了解了一下,这里我是直接抄过来的)
下载MySQL、Maven、TomCat并进行环境配置是提前需要完成的准备工作,具体不在此详谈。
注意工程中webapp文件夹下的web.xml与TomCat的版本不一致时,需要进行更新
接下来复盘一下这次作业的实现过程:
来先看一下项目目录:
具体的实现过程如下:
(1)先在SQLyog中直接创建jbdcstudy数据库和lesson表,详细信息如下(ipp是课程名称,teacher是老师名字,position是上课地点):
(2)在IDEA中新建Maven项目,具体选择如下:
(3)在pom.xml中导入相对应需要的依赖:(注意,如果在这里不是使用的Maven则需要进行手动导入jar包。而且对应的jar包必须和mysql的版本相对应,否则会报错。切记,版本问题!版本问题!版本问题!)
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency>
(4)进行TomCat的配置(安装完TomCat并配置完变量后可以打开bin目录下的startup.bat,然后打开浏览器输入localhost:8080。当然这里可以手动进行修改为你自己上传的web,狂神的视频里有将,感兴趣的可以去康康,挺香的)
(5)在web.xml文件中进行注册:
(6)在根目录下创建JBDC工具类去连接数据库:(注意应当把数据库连接的地方和对数据库操作的部分分开来写)
import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JDBCUtils {
//用户信息和url public static String url = "jdbc:mysql://localhost:3306/jdbcstudy?&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true";
//这个语句中,jdbcstudy为相对应连接的数据库名 public static String user = "root";
//数据库用户名 public static String driver = "com.mysql.cj.jdbc.Driver";
//此处,如果mysql版本为较老,driver值应为"com.msyql.jdbc.Driver" public static String password = "123456"; //密码 static { try {
//加载驱动 Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } //连接成功,数据库对象,Connection代表数据库 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); }
public static void release(Connection conn, PreparedStatement st, ResultSet rs, Statement stt) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stt != null) { try { stt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
(7)编写servelet(这里图省事儿直接把对数据库操作搞里头)
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.*; import java.util.HashSet; import java.util.Set; public class servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); String classname = req.getParameter("classname"); String teachername = req.getParameter("teachername"); String place = req.getParameter("place"); //这里使用hashset,以确保课程信息不会出现重复 Set<String> hashSet = new HashSet<String>(8); hashSet.add("王建民"); hashSet.add("刘立嘉"); hashSet.add("刘丹"); hashSet.add("杨子光"); hashSet.add("张云霞"); hashSet.add("武勇亮"); hashSet.add("高飞"); if (!hashSet.contains(teachername)) { resp.getWriter().print("<script> alert(\"Teacher name input error\") </script>"); return; } Set<String> hashSet2 = new HashSet<String>(5); hashSet2.add("一教"); hashSet2.add("二教"); hashSet2.add("三教"); hashSet2.add("四教"); //System.out.println(classname); if (!hashSet2.contains(place)) { resp.getWriter().print("<script> alert(\"Classroom location input error\") </script>"); return; } Connection conn = null; ResultSet rs = null; Statement stt = null; try { conn = JDBCUtils.getConnection(); stt = conn.createStatement(); String sql = "select * from lesson"; rs = stt.executeQuery(sql); while (rs.next()) { if (rs.getString("ipp").equals(classname)) { resp.getWriter().print("<script> alert(\"Duplicate course name, please re-enter\") </script>"); return; } } } catch (SQLException e) { e.printStackTrace(); } try { conn = JDBCUtils.getConnection(); String sql = "insert into `lesson`(`ipp`,`teacher`,`position`) values(?,?,?)"; PreparedStatement st = null; try { //创建语句传输对象 st = conn.prepareStatement(sql); st = conn.prepareStatement(sql); st.setString(1, classname); st.setString(2, teachername); st.setString(3, place); st.executeUpdate(); int i = st.executeUpdate(sql); if (i > 0) { System.out.println("插入成功"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //关闭资源 JDBCUtils.release(conn, st, rs, stt); } } catch (SQLException e) { e.printStackTrace(); } } }
(8)绘制jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>课程添加页面</title> </head> <body> <form action="${pageContext.request.contextPath}\p" method="get"> <table align="center" border="1" width="500"> <tr> <td>课程名称 : </td> <td> <input type="text" name="classname" /> </td> </tr> <tr> <td>任课教师:</td> <td> <input type="text" name="teachername" /> </td> </tr> <tr> <td>上课地点:</td> <td> <input type="text" name="place" /> </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" value="提交" /> <input type="reset" value="重置" /> </td> </tr> </table> <% %> </form> </body> </html>
运行截图如下:
至此就完成了这次的任务。
由于这次是突击进行准备的,学习的过程中很多的知识都直接跳过去没有看,并且很多地方还是一知半解,只能说对这次的任务实现了最基本的完成,具体关于jsp、MySQL在Java中编程的内容还需要多加学习。底下的时间得抓紧把剩的知识点补上!