Servlet一:通过jdbc连接数据库
-
创建基于tomcat的网页模块
-
创建add.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>add</title> </head> <body> <form action="add" method="post"> 序号:<input type="text" name="cust_id"/><br/> 姓名:<input type="text" name="cust_name"/><br/> 邮箱:<input type="text" name="cust_email"/><br/> 生日:<input type="text" name="cust_birth"/><br/> <input type="submit" value="添加"/> </form> </body> </html>
-
增加依赖
-
创建接收组件
package com.atguigu.servlets; import com.atguigu.bean.Customers; import com.atguigu.jdbcutils.JdbcUtils; import com.atguigu.optimization.CustomerDAOImpl; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; import java.net.InetAddress; import java.sql.Connection; import java.text.SimpleDateFormat; import java.util.Date; /** * @author e_n * @version 1.0.0 * @ClassName AddServlet.java * @Description 用于接收客户端发来的组件 * @CreateTime 2022/02/26 22:37 */ public class AddServlet extends HttpServlet { @Override /** * @title doPost * @Description 获取组件内的各参数 * @author e_n * @param req * @param resp * @return void * @throws * @CreateTime 2022/2/26 22:48 */ public void doPost(HttpServletRequest req, HttpServletResponse resp) { Connection conn = null; try { // post方式下,设置编码,防止中文乱码 req.setCharacterEncoding("UTF-8"); String cust_name = req.getParameter("cust_name"); String idStr = req.getParameter("cust_id"); int cust_id = Integer.parseInt(idStr); String cust_email = req.getParameter("cust_email"); String cust_birth = req.getParameter("cust_birth"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse(cust_birth); Customers cust = new Customers(cust_id, cust_name, cust_email,date); conn = JdbcUtils.getConnection(); CustomerDAOImpl dao = new CustomerDAOImpl(); dao.insert(conn,cust); System.out.println("添加成功"); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtils.closeResource(conn,null); } } }
-
修改web.xml文件
xml文件的作用
① 用户发请求:action=add
② 在项目中的web.xml中的< servlet-mapping>中找到与用户请求相对应的url-pattern = /add
③ 找到和< servlet-mapping>中的servlet-name相同的< servlet>
④ 获取< servlet>中的< servlet-class>,这样就使得用户的请求同Java类对应上了
用户发送的是post请求(method=post),因此tomcat服务器会自动执行对应Java类中的doPost方法。<?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"> <servlet> <servlet-name>AddServlet</servlet-name> <servlet-class>com.atguigu.servlets.AddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddServlet</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping> </web-app>
-
逻辑图
-
遇到的问题
在点击提交按钮后,报了空指针异常(JdbcUtils类中),原因是使用了ClassLoader
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties")
但是在JavaEE里面,要通过WebappClassLoader才能加载出来,使用 “当前类.class.getClassLoader()…”
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties")