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项目的优势
- 跨平台性:Java具有“一次编写,到处运行”的特性,因此Java Web项目可以在不同的操作系统和硬件平台上运行,无需重新编译。
- 丰富的库支持:Java拥有大量的开源库和框架,如Spring、Hibernate、MyBatis等,这些库和框架能够帮助开发人员快速构建功能强大的Web应用。
- 强大的安全性:Java提供的安全机制可以防止各种攻击,如SQL注入、XSS攻击等,保证Web应用的安全性。
- 易于维护和扩展:Java Web项目通常采用MVC(Model-View-Controller)架构,将业务逻辑、界面展示和用户输入分离,使得代码易于维护和扩展。
- 强大的社区支持:Java拥有庞大的开发者社区,使得开发者可以轻松获取技术支持和共享资源。
Java Web项目的应用场景
- 企业级应用:Java Web项目广泛应用于企业级应用,如ERP(企业资源计划)、CRM(客户关系管理)、OA(办公自动化)等。
- 电子商务:电子商务网站通常使用Java Web技术来构建,提供用户注册、登录、购物车、支付等功能。
- 社交网络:社交网络平台如Facebook、Twitter等也可以使用Java Web技术来开发。
- 金融服务:金融服务网站如银行、证券交易所等,通常使用Java Web技术来实现在线交易和数据处理。
- 教育平台:在线教育平台如Coursera、Khan Academy等,可以使用Java Web技术来提供学习资源和在线测试功能。
Java开发环境的搭建
-
安装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版本信息。
-
安装并检查Java环境
- 可以使用
java -version
命令来检查Java环境是否安装成功。 - 可以使用
javac
命令来检查Java编译器是否可用。# 检查Java版本 java -version # 检查Java编译器 javac -version
- 可以使用
- 环境变量配置
- 配置
JAVA_HOME
环境变量:确保Java安装目录路径正确。 - 配置
PATH
环境变量:确保包含JAVA_HOME/bin
目录。export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
- 配置
Tomcat服务器的安装与配置
-
下载Tomcat
- 访问Apache Tomcat官方网站下载Tomcat服务器。
- 选择合适的版本下载,例如最新稳定版或特定版本。
-
安装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
- 配置Tomcat
- 修改
conf/server.xml
文件中的端口号,确保与其他应用不冲突。 - 配置虚拟目录:
<Context docBase="/path/to/webapp" path="/app" reloadable="true"/>
- 启动Tomcat:启动Tomcat服务器并访问
http://localhost:8080
验证安装。
- 修改
开发工具的选择与使用
-
开发工具选择
- Eclipse: Eclipse是一款流行的Java集成开发环境(IDE),具有丰富的插件支持。
- IntelliJ IDEA: IntelliJ IDEA是一款功能强大的Java IDE,支持多种编程语言。
- NetBeans: NetBeans是另一款流行的Java IDE,支持多种Web技术。
- Visual Studio Code: 虽然主要是针对前端开发,但配合Java插件也可用于Java Web开发。
-
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
-
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
-
代码示例
-
创建简单的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>"); } }
-
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的区别与使用
-
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>");
}
}
- 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开发。它将应用分为三个组成部分:
-
Model(模型层)
- 功能:处理数据逻辑,封装数据对象。
- 特点:负责数据的存储和检索。
-
View(视图层)
- 功能:负责数据展示,生成HTML页面。
- 特点:不处理业务逻辑,只关注展示数据。
- 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服务器。
-
创建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>"); } }
-
-
配置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>
- 在
- 部署到Tomcat
- 将项目部署到Tomcat服务器,访问
http://localhost:8080/yourapp/hello
。
- 将项目部署到Tomcat服务器,访问
用户注册与登录功能的实现
-
用户注册
-
创建一个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>"); } }
-
-
用户登录
-
创建另一个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>"); } }
-
数据库连接与数据操作
-
添加数据库驱动
- 在
WEB-INF/lib
目录下添加数据库驱动JAR文件,如MySQL的mysql-connector-java.jar
。
- 在
-
配置数据源
- 在
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
- 在
-
编写数据库操作代码
-
使用
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; } }
-
-
使用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(); } } }
-
复杂数据库操作示例
-
插入数据
-
创建一个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(); } } }
-
-
更新数据
-
创建一个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(); } } }
-
-
删除数据
-
创建一个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(); } } }
-
常见错误分析与解决方法
-
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>
-
Tomcat启动失败
- 问题:Tomcat无法启动。
- 解决方法:检查Tomcat日志文件,查找错误信息并解决。
$CATALINA_HOME/logs/catalina.out
- 数据库连接失败
- 问题:数据库连接失败。
- 解决方法:检查数据库驱动是否正确添加,数据库URL是否正确。
// 数据库连接代码示例 Class.forName(dbProps.getProperty("jdbc.driver")); conn = DriverManager.getConnection( dbProps.getProperty("jdbc.url"), dbProps.getProperty("jdbc.username"), dbProps.getProperty("jdbc.password") );
调试工具的使用
-
Eclipse调试
- 使用Eclipse的调试功能,设置断点,逐步执行代码。
# 设置断点 # Run -> Debug Configurations -> Servlet
- 使用Eclipse的调试功能,设置断点,逐步执行代码。
-
IntelliJ IDEA调试
- 使用IntelliJ IDEA的调试功能,设置断点,逐步执行代码。
# 设置断点 # Run -> Debug
- 使用IntelliJ IDEA的调试功能,设置断点,逐步执行代码。
- Tomcat日志
- 查看Tomcat的日志文件,定位错误信息。
$CATALINA_HOME/logs/catalina.out
- 查看Tomcat的日志文件,定位错误信息。
代码优化建议
-
使用连接池
-
使用连接池管理数据库连接,提高性能。
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; } } }
-
-
异常处理
- 使用
try-catch
块捕获并处理异常,避免程序崩溃。try { // 数据库操作 } catch (SQLException e) { e.printStackTrace(); }
- 使用
- 代码重构
- 将重复代码提取为公共方法,提高代码可读性和可维护性。
public void commonMethod() { // 公共代码 }
- 将重复代码提取为公共方法,提高代码可读性和可维护性。
小项目实战
-
项目需求
- 创建一个简单的在线图书管理系统。
- 功能包括:用户注册、登录、图书列表展示、图书详细信息展示、图书添加、图书修改、图书删除。
-
技术选型
- 使用Java、Servlet、JSP、JDBC、MySQL。
- 数据库设计:用户表、图书表、借阅记录表。
-
项目结构
/WEB-INF
:存放配置文件web.xml
。/WEB-INF/classes
:存放编译后的Java类文件。/WEB-INF/lib
:存放第三方库文件。/
:存放JSP页面、静态资源等。
-
开发步骤
-
数据库设计:设计用户表、图书表、借阅记录表。
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(); } } }
-
-
配置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>
-
- 部署测试
- 将项目部署到Tomcat服务器,测试各个功能模块是否正常工作。
参考资料与进阶阅读推荐
-
官方文档
- Apache Tomcat官方文档:https://tomcat.apache.org/tomcat-9.0-doc/index.html
- Java Servlet规范文档:https://jakarta.ee/specifications/servlet/4.0/
-
在线教程
- 慕课网Java Web课程:https://www.imooc.com/course/list/java
- Oracle Java官方文档:https://docs.oracle.com/javase/8/docs/api/index.html
- Apache Maven官方文档:https://maven.apache.org/guides/index.html
-
书籍
- 《Java Web开发技术内幕》
- 《Java Web开发实战指南》
- 实践指南
- 使用Spring框架构建Java Web应用:https://spring.io/
- 使用MyBatis进行数据库操作:https://mybatis.org/mybatis-3/zh/getting-started.html
共同学习,写下你的评论
评论加载中...
作者其他优质文章