📜  带有 JDBC 的 Servlet

📅  最后修改于: 2022-05-13 01:54:46.619000             🧑  作者: Mango

带有 JDBC 的 Servlet

Servlet 是在支持Java的 Web 服务器或应用程序服务器上运行的 Java 程序。它们用于处理从网络服务器获得的请求,处理请求,产生响应,然后将响应发送回网络服务器。 Servlet 的属性如下:

  • Servlet 在服务器端工作。
  • Servlet 能够处理从网络服务器获得的复杂请求。

先决条件:

  • 基本的 Servlet 知识。
  • Java中的 JDBC 连接。
  • 我们可以使用任何数据库来存储数据,在这个例子中,使用的是 PostgreSQL 数据库管理系统。
  • SQL 语言——插入、删除、更新和选择语句。
  • Eclipse IDE 和 Tomcat 服务器。

我们将在本文中构建什么?

在这个例子中,我们将创建一个简单的“学生数据库管理系统”,我们可以在其中插入、更新、删除和查看学生详细信息。

应用

分步实施

第 1 步:在 PostgreSQL 中创建表

  • 创建一个表studentdetails来存储学生的详细信息。
  • 添加列, stuid-存储学生ID, stuname-存储学生姓名, email-存储学生的电子邮件ID和phonenum-存储学生的电话号码。并在表中插入一些数据。

表和列

第 2 步:在 Eclipse 中创建一个动态 Web 项目

  • 在 Eclipse IDE 中,创建一个动态 Web 项目,如下面的项目结构。
  • 要连接 PostgreSQL DB,请在“WEB-INF/lib”文件夹下的项目中添加“postgresql-42.2.18.jar”。

项目结构

第 3 步:创建所需的 JSP 以从学生那里获取详细信息

主页.jsp

这是项目的欢迎页面。在此页面上,我们将在学生详细信息中显示不同类型的操作,例如插入、删除和选择数据。

HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Welcome Page


  
    

Welcome to Student database management system

    
                                                                                                                                                
To insert your details into the Database:
To delete your details from the Database:
To view your details from the Database:
        


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Insert Details


  
    

Fill in the details

       
                                                                                                                                                                                                                                                                              
ID:
Name:
Email Id:
Phone Number:
        
       
    
             


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Delete Details


  
    
                                                                                
Enter ID:
        
    
    
             


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Success Page


    
        

            <%=request.getParameter("msg")%>             Successful         

           
       
  


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Select Details


  
    
                                                                                
Enter ID:
        
    
    
          


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Student Details - Result


  
    

Details

       
        ">                                                                                                                                                                                                                                                                                  
ID:<%=request.getParameter("id")%>
Name:<%=request.getParameter("name")%>
Email Id:<%=request.getParameter("email")%>
Phone Number:<%=request.getParameter("phone")%>
        
    
    
         
          


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Update Details


  
    

Fill in your details

       
                                                                                                                                                                                                                                                                              
ID:" readonly="readonly">                 
Name:
Email Id:
Phone Number:
        
    
    
       


Java
public class DbUtil {
  
    public static String url = "jdbc:postgresql://localhost/postgres";
    public static String user = "root";
    public static String password = "root";
    public static String driver = "org.postgresql.Driver";
  
}


Java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/InsertDetails")
public class InsertDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        // Jdbc Connection
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
              
              // Query/statement to insert the values
            PreparedStatement st = conn.prepareStatement("insert into studentdetails values(?, ?, ?, ?)");
  
            // set values into the query
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
            st.setString(2, request.getParameter("name"));
            st.setString(3, request.getParameter("email"));
            st.setString(4, request.getParameter("phnum"));
  
            // Execute the query
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            // Redirect the response to success page
            response.sendRedirect("Success.jsp?msg=Insert");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/DeleteDetails")
public class DeleteDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn.prepareStatement("delete from studentdetails where stuid=?");
  
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
  
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            response.sendRedirect("Success.jsp?msg=Delete");
  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/SelectDetails")
public class SelectDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
  
            int id = 0;
            String name = "", email = "", ph = "";
  
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn.prepareStatement("select * from studentdetails where stuid=?");
  
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
  
            ResultSet rs = st.executeQuery();
  
            while (rs.next()) {
  
                id = rs.getInt(1);
                name = rs.getString(2);
                email = rs.getString(3);
                ph = rs.getString(4);
  
            }
  
            rs.close();
            st.close();
            conn.close();
  
            response.sendRedirect("Result.jsp?id=" + id + "&name=" + name + "&email=" + email + "&phone=" + ph);
  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
}


Java
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/UpdateDetails")
public class UpdateDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn
                    .prepareStatement("update studentdetails set stuname=?, email=?, phonenum=? where stuid=?");
  
            st.setString(1, request.getParameter("name"));
            st.setString(2, request.getParameter("email"));
            st.setString(3, request.getParameter("phnum"));
            st.setInt(4, Integer.valueOf(request.getParameter("id")));
  
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            response.sendRedirect("Success.jsp?msg=Update");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
}


根据学生的选择,将显示相应的 JSP 页面。

插入.jsp

此页面从学生那里获取所需的值——学生 ID、学生姓名、电子邮件 ID 和电话号码,并将页面提交给 Insert servlet 以将值存储在 DB 中。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Insert Details


  
    

Fill in the details

       
                                                                                                                                                                                                                                                                              
ID:
Name:
Email Id:
Phone Number:
        
       
    
             

根据指定的操作和方法,它将映射相应的 servlet 并转到该 servlet 中的 doPost 方法()。

删除.jsp

要从数据库中删除学生信息,我们需要学生的 ID。此页面从学生那里获取 id 并将值提交给 Delete servlet。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Delete Details


  
    
                                                                                
Enter ID:
        
    
    
             

成功.jsp

在插入、更新和删除操作后显示成功消息。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Success Page


    
        

            <%=request.getParameter("msg")%>             Successful         

           
       
  

成功插入或删除值后,此页面将向 UI 显示成功消息。

选择.jsp

要从 DB 中填充学生信息,我们需要学生的 ID。此页面获取提供的 id 并将其提交给 Select servlet 以获取详细信息。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Select Details


  
    
                                                                                
Enter ID:
        
    
    
          

结果.jsp

此页面用于在 UI 中填充学生信息。根据给定的 id 显示学生详细信息的结果集。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Student Details - Result


  
    

Details

       
        ">                                                                                                                                                                                                                                                                                  
ID:<%=request.getParameter("id")%>
Name:<%=request.getParameter("name")%>
Email Id:<%=request.getParameter("email")%>
Phone Number:<%=request.getParameter("phone")%>
        
    
    
         
          

更新.jsp

填充信息后,如果学生想要更新他们的详细信息,此页面会从学生那里获取更新的信息并将其提交给 Update servlet。

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Update Details


  
    

Fill in your details

       
                                                                                                                                                                                                                                                                              
ID:" readonly="readonly">                 
Name:
Email Id:
Phone Number:
        
    
    
       

我们将 ID 值设为只读,这样它就不会被更改,并且信息将根据 ID 值进行更新。

第 4 步:创建 DBUtil。Java

要与 PostgreSQL 建立 JDBC 连接,我们需要指定 PostgreSQL 的驱动程序、URL、用户名和密码对象。为了在所有 servlet 中重用这些对象以与 DB 建立连接,我们可以在单独的类中提供这些值,如下所示。

Java

public class DbUtil {
  
    public static String url = "jdbc:postgresql://localhost/postgres";
    public static String user = "root";
    public static String password = "root";
    public static String driver = "org.postgresql.Driver";
  
}

除了使用Java类,我们也可以在属性文件中指定这些值。

第 5 步:创建相应的 servlet 类

Servlet 类和 JSP 页面可以通过 web.xml(部署描述符)或使用注释进行映射。在此示例中,我们使用 @WebServlet 注释将 jsp 页面映射到它们各自的 servlet。要使用 servlet,我们需要从 HttpServlet 扩展Java类。

插入详细信息。Java

当学生通过Insert.jsp输入数据并提交页面以将详细信息插入DB时,基于JSP页面中的URL“/InsertDetails”,InsertDetails。 Java servlet 类将被映射并执行。

Java

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/InsertDetails")
public class InsertDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        // Jdbc Connection
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
              
              // Query/statement to insert the values
            PreparedStatement st = conn.prepareStatement("insert into studentdetails values(?, ?, ?, ?)");
  
            // set values into the query
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
            st.setString(2, request.getParameter("name"));
            st.setString(3, request.getParameter("email"));
            st.setString(4, request.getParameter("phnum"));
  
            // Execute the query
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            // Redirect the response to success page
            response.sendRedirect("Success.jsp?msg=Insert");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 我们需要为 servlet 和 JDBC 连接导入所有必需的包。
  • 要插入详细信息,我们需要使用 servlet 类的 doPost 方法。
  • 首先,在 try/catch 块内建立 JDBC 连接以处理出现的异常。
  • 使用 Class.forName(),加载 PostgreSQL 驱动程序。
  • 然后使用 Connection 和 DriverManager 对象,获取到 PostgreSQL 服务器的连接。
  • 使用插入查询准备语句对象,并将学生信息设置为相应的参数并执行查询。
  • 执行查询后,关闭语句和连接对象以避免资源泄漏。
  • 然后将页面重定向到 Success.jsp 页面,并在屏幕上显示一条成功消息。

删除详细信息。Java

与插入操作一样,删除 servlet 也将根据指定的 URL 进行映射。当学生输入ID值删除学生信息时,DeleteDetails。 Java servlet 类将被映射并执行。

Java

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/DeleteDetails")
public class DeleteDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn.prepareStatement("delete from studentdetails where stuid=?");
  
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
  
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            response.sendRedirect("Success.jsp?msg=Delete");
  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 正如在插入 servlet 中指定的那样,删除 servlet 的相同方式也将起作用。
  • 首先,建立 JDBC 连接并准备删除以 ID 作为输入参数的语句。
  • 删除操作完成后,在 UI 中显示成功消息。

选择详细信息。Java

根据提交的 ID 填充学生信息。

Java

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/SelectDetails")
public class SelectDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
  
            int id = 0;
            String name = "", email = "", ph = "";
  
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn.prepareStatement("select * from studentdetails where stuid=?");
  
            st.setInt(1, Integer.valueOf(request.getParameter("id")));
  
            ResultSet rs = st.executeQuery();
  
            while (rs.next()) {
  
                id = rs.getInt(1);
                name = rs.getString(2);
                email = rs.getString(3);
                ph = rs.getString(4);
  
            }
  
            rs.close();
            st.close();
            conn.close();
  
            response.sendRedirect("Result.jsp?id=" + id + "&name=" + name + "&email=" + email + "&phone=" + ph);
  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
}
  • 在这里,我们正在获取详细信息,因此我们需要使用 servlet 类的 doGet() 方法。
  • 建立 JDBC 连接并准备一个以 ID 作为输入参数的 select 语句并获取所有详细信息。
  • 为了显示此信息,请将这些值发送到 Result.jsp 页面。

更新详情。Java

如果学生想要更新任何信息,那么我们需要获取相应的 ID 并执行操作。

Java

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
  
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
@WebServlet("/UpdateDetails")
public class UpdateDetails extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  
        try {
            Class.forName(DbUtil.driver);
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection conn = DriverManager.getConnection(DbUtil.url, DbUtil.user, DbUtil.password);
            System.out.println("connection successful");
            PreparedStatement st = conn
                    .prepareStatement("update studentdetails set stuname=?, email=?, phonenum=? where stuid=?");
  
            st.setString(1, request.getParameter("name"));
            st.setString(2, request.getParameter("email"));
            st.setString(3, request.getParameter("phnum"));
            st.setInt(4, Integer.valueOf(request.getParameter("id")));
  
            st.executeUpdate();
  
            st.close();
            conn.close();
  
            response.sendRedirect("Success.jsp?msg=Update");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  
}
  • 我们正在更新学生信息,因此调用了 doPost() 方法。
  • 建立 JDBC 连接并准备更新语句,将 ID 作为输入参数。
  • 执行查询并在 UI 中显示成功消息。

第 6 步:运行应用程序

现在,使用 Run As -> Run on Server 运行应用程序。该应用程序将部署在 Tomcat 服务器上。在浏览器运行 URL http://localhost:8081/ServletsPostgre/Home.jsp以获取应用程序的主页。

主页.jsp

  • 要插入详细信息,请单击插入数据。单击时,重定向到 Insert.jsp 页面并显示在 UI 下方。

插入.jsp

  • 输入所有详细信息,然后单击插入数据。
  • 插入成功后,屏幕上会显示成功消息。

成功留言

  • 返回主页。
  • 检查数据是否成功插入 PostgreSQL DB。

插入

  • 要从数据库中获取值,请单击主页上的选择数据。

选择.jsp

  • 输入您要获取详细信息的 ID,然后单击查看数据。
  • 结果将显示在 Result.jsp 页面上。

学生信息

  • 如果需要更新数据,点击更新数据,或者如果不直接返回主页。
  • 如果我们单击更新数据,则重定向到 Update.jsp 页面。

更新.jsp

  • 在这里,Id 将在页面加载时显示,并且是只读的。
  • 更新数据并单击更新数据。更新成功后会显示信息。
  • 检查 PostgreSQL 数据库中的数据是否更新。

更新详情

  • 最后,要从数据库中删除数据,请单击主页上的删除数据。

删除.jsp

  • 输入要删除的 ID,然后单击删除数据。
  • 该信息将从数据库中删除,并显示成功消息,如下所示。

删除_成功

  • 如果信息被删除,请检查数据库。

删除操作后

通过这种方式,我们可以使用带有 JDBC 的 Servlet 执行所有的插入、更新、删除和选择操作。