- 创建一个Java Web项目,并添加MySQL驱动依赖。
- 在项目中创建一个名为
BookServlet
的Servlet类,用于处理图书查询请求。 import java.io.IOException; import java.io.PrintWriter; 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("/BookServlet") public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String bookName = request.getParameter("bookName"); try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database_name", "username", "password"); String sql = "SELECT * FROM T_BOOK WHERE BOOK_NAME LIKE ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "%" + bookName + "%"); ResultSet rs = pstmt.executeQuery(); out.println("<table border='1'>"); out.println("<tr><th>图书ID</th><th>图书名称</th><th>图书价格</th></tr>"); while (rs.next()) { out.println("<tr>"); out.println("<td>" + rs.getInt("BOOK_ID") + "</td>"); out.println("<td>" + rs.getString("BOOK_NAME") + "</td>"); out.println("<td>" + rs.getDouble("BOOK_PRICE") + "</td>"); out.println("</tr>"); } out.println("</table>"); rs.close(); pstmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } finally { out.close(); } } }
- 在项目的
web.xml
文件中配置BookServlet
。 -
<servlet> <servlet-name>BookServlet</servlet-name> <servlet-class>com.example.BookServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>BookServlet</servlet-name> <url-pattern>/BookServlet</url-pattern> </servlet-mapping>
创建一个HTML文件,用于输入图书名称的模糊资料并提交给Servlet。
-
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图书模糊查询</title> </head> <body> <h1>图书模糊查询</h1> <form action="BookServlet" method="get"> <label for="bookName">图书名称:</label> <input type="text" id="bookName" name="bookName"> <input type="submit" value="查询"> </form> </body> </html>
然后部署到Java Web服务器上,访问
BookServlet
页面,输入图书名称的模糊资料,即可在界面下方显示图书信息。 -
效果图:
我们需要创建一个Java Web项目,并添加Servlet和数据库连接相关的依赖。这里我们使用Maven作为项目管理工具,在pom.xml文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
然后创建一个Servlet类,用于处理图书信息的显示和购物车的操作
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
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("/book")
public class BookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Book> books = getBooks();
request.setAttribute("books", books);
request.getRequestDispatcher("/book.jsp").forward(request, response);
}
private List<Book> getBooks() {
List<Book> books = new ArrayList<>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC", "root", "password");
String sql = "SELECT * FROM T_BOOK";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bookId = resultSet.getInt("BOOK_ID");
String bookName = resultSet.getString("BOOK_NAME");
double bookPrice = resultSet.getDouble("BOOK_PRICE");
books.add(new Book(bookId, bookName, bookPrice));
}
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
return books;
}
}
接下来,我们需要创建一个JSP页面,用于显示图书信息和购物车的内容。以下是book.jsp文件的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table border="1">
<tr>
<th>图书ID</th>
<th>图书名称</th>
<th>图书价格</th>
<th>操作</th>
</tr>
<c:forEach var="book" items="${books}">
<tr>
<td>${book.bookId}</td>
<td>${book.bookName}</td>
<td>${book.bookPrice}</td>
<td>
<a href="addToCart?bookId=${book.bookId}">添加到购物车</a>
</td>
</tr>
</c:forEach>
</table>
<br>
<a href="cart">查看购物车</a>
</body>
</html>
我们需要创建一个Servlet类,用于处理购物车的操作。以下是CartServlet类的代码:
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
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("/cart")
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Book> cartItems = getCartItems();
request.setAttribute("cartItems", cartItems);
request.getRequestDispatcher("/cart.jsp").forward(request, response);
}
private List<Book> getCartItems() {
List<Book> cartItems = new ArrayList<>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC", "root", "password");
String sql = "SELECT * FROM T_BOOK"; // 这里需要根据实际需求修改SQL语句,以获取购物车中的商品信息
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int bookId = resultSet.getInt("BOOK_ID");
String bookName = resultSet.getString("BOOK_NAME");
double bookPrice = resultSet.getDouble("BOOK_PRICE");
cartItems.add(new Book(bookId, bookName, bookPrice));
}
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
return cartItems;
}
}
效果图呈现代码:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>图书信息</title>
</head>
<body>
<p>图书名称:C++</p>
<p>作者:张三</p>
<p>价格:50元</p>
<a href="addToCartServlet?bookId=1">添加到购物车</a>
<h2>购物车</h2>
<!-- 购物车内容显示 -->
<a href="viewCartServlet">查看购物车</a>
<!-- 删除购物车中的书籍链接 -->
<a href="deleteFromCartServlet?bookId=1">从购物车中删除</a>
</body>
</html>
首先,我们需要创建一个Servlet来处理用户登录请求。在这个Servlet中,我们将检查用户的用户名和密码是否正确,如果正确,我们将在session中存储用户信息,并将用户重定向到欢迎页面。
- 创建一个名为
LoginServlet.java
的文件,并添加以下代码:import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 这里可以替换为从数据库中查询用户信息的逻辑 if ("admin".equals(username) && "123456".equals(password)) { HttpSession session = request.getSession(); session.setAttribute("user", username); response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("error.jsp"); } } }
- 创建一个名为
index.html
的文件,用于显示登录表单:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="login" method="post"> <label for="username">用户名:</label> <input type="text" id="username" name="username" required><br> <label for="password">密码:</label> <input type="password" id="password" name="password" required><br> <input type="submit" value="登录"> </form> </body> </html>
- 创建一个名为
welcome.jsp
的文件,用于显示欢迎页面:<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎</title> </head> <body> <h1>欢迎,${user}!</h1> </body> </html>
- 创建一个名为
error.jsp
的文件,用于显示错误信息:<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>错误</title> </head> <body> <h1>用户名或密码错误,请重试!</h1> <a href="index.html">返回登录页面</a> </body> </html>
- 创建一个名为
LoginFilter.java
的文件,用于实现过滤器:import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class LoginFilter implements Filter { private static final long serialVersionUID = 1L; public void init(FilterConfig filterConfig) throws ServletException {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpSession session = httpRequest.getSession(false); if (session != null && session.getAttribute("user") != null) { chain.doFilter(request, response); } else { response.sendRedirect("index.html"); } }
- 在
web.xml
文件中配置过滤器:<filter> <filter-name>LoginFilter</filter-name> <filter-class>com.example.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>