为了账号安全,请及时绑定邮箱和手机立即绑定

Java Web项目的入门教程

标签:
Java WebApp Spring
概述

Java Web项目是指使用Java语言开发的Web应用程序,通常运行在Web服务器上,通过HTTP协议与客户端浏览器交互。这些项目可以提供动态网页、处理表单数据、实现用户交互等功能。本文详细介绍了Java Web项目的配置、开发环境搭建、基本结构和基础功能实现,帮助读者全面了解Java Web项目。

Java Web项目简介

什么是Java Web项目

Java Web项目是指使用Java语言开发的Web应用程序,通常运行在Web服务器上,并通过HTTP协议与客户端浏览器交互。这些项目可以提供动态网页、处理表单数据、实现用户交互等功能,是现代Web开发不可或缺的一部分。Java Web项目通常包含Servlet、JSP、JavaBean等组件,这些组件协同工作,为用户提供丰富的Web功能。

Java Web项目的优势

  1. 跨平台性:Java具有“一次编写,到处运行”的特性,因此Java Web项目可以在不同的操作系统和硬件平台上运行,无需重新编译。
  2. 丰富的库支持:Java拥有大量的开源库和框架,如Spring、Hibernate、MyBatis等,这些库和框架能够帮助开发人员快速构建功能强大的Web应用。
  3. 强大的安全性:Java提供的安全机制可以防止各种攻击,如SQL注入、XSS攻击等,保证Web应用的安全性。
  4. 易于维护和扩展:Java Web项目通常采用MVC(Model-View-Controller)架构,将业务逻辑、界面展示和用户输入分离,使得代码易于维护和扩展。
  5. 强大的社区支持:Java拥有庞大的开发者社区,使得开发者可以轻松获取技术支持和共享资源。

Java Web项目的应用场景

  1. 企业级应用:Java Web项目广泛应用于企业级应用,如ERP(企业资源计划)、CRM(客户关系管理)、OA(办公自动化)等。
  2. 电子商务:电子商务网站通常使用Java Web技术来构建,提供用户注册、登录、购物车、支付等功能。
  3. 社交网络:社交网络平台如Facebook、Twitter等也可以使用Java Web技术来开发。
  4. 金融服务:金融服务网站如银行、证券交易所等,通常使用Java Web技术来实现在线交易和数据处理。
  5. 教育平台:在线教育平台如Coursera、Khan Academy等,可以使用Java Web技术来提供学习资源和在线测试功能。
开发环境搭建

Java开发环境的搭建

  1. 安装Java JDK

    • 首先,访问Oracle官方网站或OpenJDK官方网站下载Java开发工具包(JDK)。
    • 下载完成后,运行安装程序,并按照提示完成安装。
    • 设置环境变量:安装完成后,需要设置环境变量,确保系统能够识别Java命令。
      # 设置JAVA_HOME环境变量
      export JAVA_HOME=/path/to/jdk
      # 设置PATH环境变量
      export PATH=$JAVA_HOME/bin:$PATH
    • 验证安装是否成功:打开终端或命令行,输入java -version命令,查看Java版本信息。
  2. 安装并检查Java环境

    • 可以使用java -version命令来检查Java环境是否安装成功。
    • 可以使用javac命令来检查Java编译器是否可用。
      # 检查Java版本
      java -version
      # 检查Java编译器
      javac -version
  3. 环境变量配置
    • 配置JAVA_HOME环境变量:确保Java安装目录路径正确。
    • 配置PATH环境变量:确保包含JAVA_HOME/bin目录。
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
      export PATH=$JAVA_HOME/bin:$PATH

Tomcat服务器的安装与配置

  1. 下载Tomcat

    • 访问Apache Tomcat官方网站下载Tomcat服务器。
    • 选择合适的版本下载,例如最新稳定版或特定版本。
  2. 安装Tomcat

    • 解压下载的Tomcat压缩包到指定目录。
    • 设置环境变量:
      export CATALINA_HOME=/path/to/tomcat
      export PATH=$CATALINA_HOME/bin:$PATH
    • 验证安装:运行catalina.sh脚本检查Tomcat是否安装成功。
      # 启动Tomcat
      $CATALINA_HOME/bin/startup.sh
      # 停止Tomcat
      $CATALINA_HOME/bin/shutdown.sh
  3. 配置Tomcat
    • 修改conf/server.xml文件中的端口号,确保与其他应用不冲突。
    • 配置虚拟目录:
      <Context docBase="/path/to/webapp" path="/app" reloadable="true"/>
    • 启动Tomcat:启动Tomcat服务器并访问http://localhost:8080验证安装。

开发工具的选择与使用

  1. 开发工具选择

    • Eclipse: Eclipse是一款流行的Java集成开发环境(IDE),具有丰富的插件支持。
    • IntelliJ IDEA: IntelliJ IDEA是一款功能强大的Java IDE,支持多种编程语言。
    • NetBeans: NetBeans是另一款流行的Java IDE,支持多种Web技术。
    • Visual Studio Code: 虽然主要是针对前端开发,但配合Java插件也可用于Java Web开发。
  2. Eclipse配置

    • 安装Eclipse:下载Eclipse并解压到所需目录。
    • 安装插件:安装Eclipse插件,如Tomcat插件、MyBatis插件等。
      • 通过Eclipse Marketplace安装插件。
      • Help -> Eclipse Marketplace中搜索并安装相关插件。
    • 配置Java环境:确保Eclipse能够找到Java开发工具包(JDK)。
    • 创建项目:在Eclipse中创建新的Java Web项目。
      # 在Eclipse中创建Java Web项目
      File -> New -> Dynamic Web Project
  3. IntelliJ IDEA配置

    • 安装IntelliJ IDEA:下载并安装IntelliJ IDEA。
    • 安装插件:安装Tomcat插件和MyBatis插件等。
      • 通过Settings -> Plugins安装插件。
      • 在插件市场搜索并安装相关插件。
    • 创建项目:在IntelliJ IDEA中创建新的Java Web项目。
      # 在IntelliJ IDEA中创建Java Web项目
      File -> New -> Project -> Java Enterprise -> Web Application
  4. 代码示例

    • 创建简单的Servlet:

      import java.io.*;
      import javax.servlet.*;
      import javax.servlet.http.*;
      
      public class HelloWorldServlet extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           out.println("<html><body>");
           out.println("<h1>Hello World!</h1>");
           out.println("</body></html>");
       }
      }
Java Web项目的基本结构

web.xml文件的解析

web.xml文件是Java Web项目的配置文件,位于WEB-INF目录下。它定义了项目的Servlet、过滤器、监听器等配置信息。以下是web.xml文件的基本结构:

<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_3_1.xsd"
         version="3.1">
    <display-name>My Web Application</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>com.example.web.HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
  • <web-app>:根元素,定义了web应用的基本配置。
  • <display-name>:定义了应用的显示名称。
  • <welcome-file-list>:定义了应用的欢迎文件列表。
  • <servlet>:定义了Servlet的信息。
    • <servlet-name>:定义了Servlet的名字。
    • <servlet-class>:定义了Servlet的类名。
  • <servlet-mapping>:定义了Servlet的URL映射。
    • <servlet-name>:指定了Servlet的名字。
    • <url-pattern>:定义了URL路径模式。

Servlet与JSP的区别与使用

  1. Servlet

    • 定义:Servlet是一种Java技术,用于生成动态Web内容。
    • 特点

      • 处理请求:处理客户端发送的HTTP请求。
      • 数据处理:处理业务逻辑并生成响应。
      • 生成HTML:生成HTML内容发送给客户端。
      • 需要手动配置web.xml
      • 示例代码:
        
        import java.io.*;
        import javax.servlet.*;
        import javax.servlet.http.*;

      public class HelloWorldServlet extends HttpServlet {
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<html><body>");
      out.println("<h1>Hello World!</h1>");
      out.println("</body></html>");
      }
      }

  2. JSP(JavaServer Pages)
    • 定义:JSP是一种动态网页技术,结合了HTML和Java代码。
    • 特点
      • 内嵌Java代码:可以在JSP页面中嵌入Java代码。
      • 配置简单:不需要手动配置web.xml
      • 数据绑定:支持数据绑定,方便展示动态数据。
      • 示例代码:
        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
        <html>
        <body>
        <h1>Hello World!</h1>
        </body>
        </html>

MVC设计模式的基本介绍

MVC(Model-View-Controller)是一种常见的软件架构模式,特别适用于Web开发。它将应用分为三个组成部分:

  1. Model(模型层)

    • 功能:处理数据逻辑,封装数据对象。
    • 特点:负责数据的存储和检索。
  2. View(视图层)

    • 功能:负责数据展示,生成HTML页面。
    • 特点:不处理业务逻辑,只关注展示数据。
  3. Controller(控制器层)
    • 功能:处理用户请求,调用模型和视图。
    • 特点:作为模型和视图之间的桥梁,处理用户输入。

示例代码

// Model层
public class User {
    private String name;
    private String email;

    // 省略getter和setter方法
}

// Controller层
public class UserController {
    public View showUserPage() {
        User user = new User();
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        return new UserView(user);
    }
}

// View层
public class UserView {
    private User user;

    public UserView(User user) {
        this.user = user;
    }

    public String render() {
        return "<html><body><h1>User Name: " + user.getName() + "</h1><p>Email: " + user.getEmail() + "</p></body></html>";
    }
}
基础功能实现

创建第一个Java Web应用

创建一个简单的Java Web应用,包括创建Servlet、配置web.xml、部署到Tomcat服务器。

  1. 创建Servlet

    • 创建一个Java类继承HttpServlet,重写doGet方法。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      
      public class HelloWorldServlet extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           out.println("<html><body>");
           out.println("<h1>Hello World!</h1>");
           out.println("</body></html>");
       }
      }
  2. 配置web.xml

    • WEB-INF目录下创建web.xml文件,配置Servlet。
      <web-app>
       <servlet>
           <servlet-name>HelloWorldServlet</servlet-name>
           <servlet-class>com.example.web.HelloWorldServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>HelloWorldServlet</servlet-name>
           <url-pattern>/hello</url-pattern>
       </servlet-mapping>
      </web-app>
  3. 部署到Tomcat
    • 将项目部署到Tomcat服务器,访问http://localhost:8080/yourapp/hello

用户注册与登录功能的实现

  1. 用户注册

    • 创建一个Servlet处理用户注册逻辑。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.util.*;
      
      public class RegisterServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String name = request.getParameter("name");
           String email = request.getParameter("email");
           String password = request.getParameter("password");
      
           // 假设用户注册逻辑在这里
           out.println("<html><body>");
           out.println("<h1>User Registered: " + name + "</h1>");
           out.println("</body></html>");
       }
      }
  2. 用户登录

    • 创建另一个Servlet处理用户登录逻辑。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.util.*;
      
      public class LoginServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String email = request.getParameter("email");
           String password = request.getParameter("password");
      
           // 假设用户登录逻辑在这里
           out.println("<html><body>");
           out.println("<h1>User Login: " + email + "</h1>");
           out.println("</body></html>");
       }
      }

数据库连接与数据操作

  1. 添加数据库驱动

    • WEB-INF/lib目录下添加数据库驱动JAR文件,如MySQL的mysql-connector-java.jar
  2. 配置数据源

    • WEB-INF/classes目录下创建jdbc.properties文件,配置数据库连接信息。
      # jdbc.properties
      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/mydatabase
      jdbc.username=root
      jdbc.password=root
  3. 编写数据库操作代码

    • 使用Properties类读取配置文件,并连接到数据库。

      import java.io.*;
      import java.sql.*;
      
      public class DatabaseUtil {
       private static Properties dbProps = new Properties();
       private static Connection conn;
      
       static {
           try {
               dbProps.load(new FileInputStream("WEB-INF/classes/jdbc.properties"));
               Class.forName(dbProps.getProperty("jdbc.driver"));
               conn = DriverManager.getConnection(
                       dbProps.getProperty("jdbc.url"),
                       dbProps.getProperty("jdbc.username"),
                       dbProps.getProperty("jdbc.password")
               );
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
      
       public static Connection getConnection() {
           return conn;
       }
      }
  4. 使用JDBC执行SQL操作

    • 创建一个Servlet,执行数据库操作。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class DatabaseServlet extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String query = "SELECT * FROM users";
      
           try (Connection conn = DatabaseUtil.getConnection();
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(query)) {
               while (rs.next()) {
                   out.println(rs.getString("name") + " - " + rs.getString("email"));
               }
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }

复杂数据库操作示例

  1. 插入数据

    • 创建一个Servlet,插入新用户数据。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class InsertUserServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String name = request.getParameter("name");
           String email = request.getParameter("email");
           String password = request.getParameter("password");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users (name, email, password) VALUES (?, ?, ?)")) {
               pstmt.setString(1, name);
               pstmt.setString(2, email);
               pstmt.setString(3, password);
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>User " + name + " Inserted</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
  2. 更新数据

    • 创建一个Servlet,更新用户数据。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class UpdateUserServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String name = request.getParameter("name");
           String email = request.getParameter("email");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("UPDATE users SET email = ? WHERE name = ?")) {
               pstmt.setString(1, email);
               pstmt.setString(2, name);
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>User " + name + " Updated</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
  3. 删除数据

    • 创建一个Servlet,删除用户数据。

      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class DeleteUserServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String name = request.getParameter("name");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("DELETE FROM users WHERE name = ?")) {
               pstmt.setString(1, name);
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>User " + name + " Deleted</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
常见问题与调试技巧

常见错误分析与解决方法

  1. Servlet未被加载

    • 问题:Servlet未被加载到服务器。
    • 解决方法:检查web.xml文件,确保Servlet配置正确。
      <servlet>
       <servlet-name>HelloWorldServlet</servlet-name>
       <servlet-class>com.example.web.HelloWorldServlet</servlet-class>
      </servlet>
      <servlet-mapping>
       <servlet-name>HelloWorldServlet</servlet-name>
       <url-pattern>/hello</url-pattern>
      </servlet-mapping>
  2. Tomcat启动失败

    • 问题:Tomcat无法启动。
    • 解决方法:检查Tomcat日志文件,查找错误信息并解决。
      $CATALINA_HOME/logs/catalina.out
  3. 数据库连接失败
    • 问题:数据库连接失败。
    • 解决方法:检查数据库驱动是否正确添加,数据库URL是否正确。
      // 数据库连接代码示例
      Class.forName(dbProps.getProperty("jdbc.driver"));
      conn = DriverManager.getConnection(
           dbProps.getProperty("jdbc.url"),
           dbProps.getProperty("jdbc.username"),
           dbProps.getProperty("jdbc.password")
      );

调试工具的使用

  1. Eclipse调试

    • 使用Eclipse的调试功能,设置断点,逐步执行代码。
      # 设置断点
      # Run -> Debug Configurations -> Servlet
  2. IntelliJ IDEA调试

    • 使用IntelliJ IDEA的调试功能,设置断点,逐步执行代码。
      # 设置断点
      # Run -> Debug
  3. Tomcat日志
    • 查看Tomcat的日志文件,定位错误信息。
      $CATALINA_HOME/logs/catalina.out

代码优化建议

  1. 使用连接池

    • 使用连接池管理数据库连接,提高性能。

      import javax.sql.*;
      import java.sql.*;
      
      public class DatabasePoolUtil {
       private static DataSource ds;
      
       static {
           try {
               InitialContext ctx = new InitialContext();
               ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyDatabase");
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
      
       public static Connection getConnection() {
           try {
               return ds.getConnection();
           } catch (SQLException e) {
               e.printStackTrace();
               return null;
           }
       }
      }
  2. 异常处理

    • 使用try-catch块捕获并处理异常,避免程序崩溃。
      try {
       // 数据库操作
      } catch (SQLException e) {
       e.printStackTrace();
      }
  3. 代码重构
    • 将重复代码提取为公共方法,提高代码可读性和可维护性。
      public void commonMethod() {
       // 公共代码
      }
实践与进阶

小项目实战

  1. 项目需求

    • 创建一个简单的在线图书管理系统。
    • 功能包括:用户注册、登录、图书列表展示、图书详细信息展示、图书添加、图书修改、图书删除。
  2. 技术选型

    • 使用Java、Servlet、JSP、JDBC、MySQL。
    • 数据库设计:用户表、图书表、借阅记录表。
  3. 项目结构

    • /WEB-INF:存放配置文件web.xml
    • /WEB-INF/classes:存放编译后的Java类文件。
    • /WEB-INF/lib:存放第三方库文件。
    • /:存放JSP页面、静态资源等。
  4. 开发步骤

    • 数据库设计:设计用户表、图书表、借阅记录表。

      CREATE TABLE users (
       id INT AUTO_INCREMENT PRIMARY KEY,
       name VARCHAR(255) NOT NULL,
       email VARCHAR(255) NOT NULL,
       password VARCHAR(255) NOT NULL
      );
      
      CREATE TABLE books (
       id INT AUTO_INCREMENT PRIMARY KEY,
       title VARCHAR(255) NOT NULL,
       author VARCHAR(255) NOT NULL,
       published_date DATE NOT NULL
      );
      
      CREATE TABLE borrow_records (
       id INT AUTO_INCREMENT PRIMARY KEY,
       user_id INT NOT NULL,
       book_id INT NOT NULL,
       borrow_date DATE NOT NULL,
       return_date DATE
      );
    • 创建Servlet:创建Servlet处理用户注册、登录、图书展示、添加、修改、删除等操作。

      // 用户注册Servlet
      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class RegisterServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String name = request.getParameter("name");
           String email = request.getParameter("email");
           String password = request.getParameter("password");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users (name, email, password) VALUES (?, ?, ?)")) {
               pstmt.setString(1, name);
               pstmt.setString(2, email);
               pstmt.setString(3, password);
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>User " + name + " Registered</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
      
      // 图书列表展示Servlet
      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class BookListServlet extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
      
           try (Connection conn = DatabaseUtil.getConnection();
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM books")) {
               out.println("<html><body>");
               out.println("<table>");
               out.println("<tr><th>Title</th><th>Author</th><th>Published Date</th></tr>");
               while (rs.next()) {
                   out.println("<tr>");
                   out.println("<td>" + rs.getString("title") + "</td>");
                   out.println("<td>" + rs.getString("author") + "</td>");
                   out.println("<td>" + rs.getDate("published_date") + "</td>");
                   out.println("</tr>");
               }
               out.println("</table>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
      
      // 图书添加Servlet
      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class AddBookServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String title = request.getParameter("title");
           String author = request.getParameter("author");
           String publishedDate = request.getParameter("published_date");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO books (title, author, published_date) VALUES (?, ?, ?)")) {
               pstmt.setString(1, title);
               pstmt.setString(2, author);
               pstmt.setDate(3, java.sql.Date.valueOf(publishedDate));
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>Book " + title + " Added</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
      
      // 图书删除Servlet
      import javax.servlet.*;
      import javax.servlet.http.*;
      import java.io.*;
      import java.sql.*;
      
      public class DeleteBookServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           String title = request.getParameter("title");
      
           try (Connection conn = DatabaseUtil.getConnection();
                PreparedStatement pstmt = conn.prepareStatement("DELETE FROM books WHERE title = ?")) {
               pstmt.setString(1, title);
               int rows = pstmt.executeUpdate();
               out.println("<html><body>");
               out.println("<h1>Book " + title + " Deleted</h1>");
               out.println("</body></html>");
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }
      }
  5. 配置web.xml

    • WEB-INF目录下创建web.xml文件,配置Servlet。

      <web-app>
       <servlet>
           <servlet-name>RegisterServlet</servlet-name>
           <servlet-class>com.example.web.RegisterServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>RegisterServlet</servlet-name>
           <url-pattern>/register</url-pattern>
       </servlet-mapping>
      
       <servlet>
           <servlet-name>LoginServlet</servlet-name>
           <servlet-class>com.example.web.LoginServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>LoginServlet</servlet-name>
           <url-pattern>/login</url-pattern>
       </servlet-mapping>
      
       <servlet>
           <servlet-name>BookListServlet</servlet-name>
           <servlet-class>com.example.web.BookListServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>BookListServlet</servlet-name>
           <url-pattern>/booklist</url-pattern>
       </servlet-mapping>
      
       <servlet>
           <servlet-name>AddBookServlet</servlet-name>
           <servlet-class>com.example.web.AddBookServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>AddBookServlet</servlet-name>
           <url-pattern>/addbook</url-pattern>
       </servlet-mapping>
      
       <servlet>
           <servlet-name>DeleteBookServlet</servlet-name>
           <servlet-class>com.example.web.DeleteBookServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>DeleteBookServlet</servlet-name>
           <url-pattern>/deletebook</url-pattern>
       </servlet-mapping>
      </web-app>
  6. 部署测试
    • 将项目部署到Tomcat服务器,测试各个功能模块是否正常工作。

参考资料与进阶阅读推荐

  1. 官方文档

  2. 在线教程

  3. 书籍

    • 《Java Web开发技术内幕》
    • 《Java Web开发实战指南》
  4. 实践指南
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消