實驗十四 EL和JSTL
一、實驗目的
1、掌握EL表達式的使用
2、掌握JSTL的使用
二、實驗過程
1、在數據庫Book中建立表Tbook,包含圖書ID,圖書名稱,圖書價格。實現在bookQuery.jsp頁面中模糊查詢圖書,如果圖書的價格在50元以上,則以黃色字體顯示書名。相應的模糊查詢放在Servlet中實現,bookQuery.jsp頁面中圖書的顯示代碼注意使用JSTL。
2、提交實驗報告,實驗報告中附代碼和運行結果以及實驗心得。
數據庫Tbook:
bookQuery.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title><style>.mainContainer{width: 40%;text-align: center;display: grid;place-content: center;}table{align-content: center;border: 1px solid black;}.yellowColor{color: yellow;}</style>
</head>
<body><form action="Servlet" method="post"><div>請輸入圖書信息的模糊圖書名稱:<input type="text" name="searchWord" id="searchWord" required><input type="submit" value="查詢"></div></form><div class="mainContainer"><c:if test="${bookList != null}"><h2>圖書列表</h2><table><tr><th>圖書名稱</th><th>圖書價格</th></tr><c:forEach items="${bookList}" var="book"><tr><td><c:if test="${book.price gt 50}"><span class="yellowColor">${book.name}</span></c:if><c:if test="${book.price le 50}">${book.name}</c:if></td><td>${book.price}</td></tr></c:forEach></table></c:if></div>
</body>
</html>
Servlet
package servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import com.example.Book;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "Servlet" )
public class Servlet extends HttpServlet {private static final String url = "jdbc:mysql://localhost:3306/Tbook";protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("searchWord");try {// 加載和注冊JDBC驅動Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection(url, "root", "123456");String sql = "select * from book where bookname like ?";//創建PreparedStatement對象,這有助于防止SQL注入攻擊PreparedStatement stmt = conn.prepareStatement(sql);//使用setString方法設置SQL查詢中的參數值stmt.setString(1,"%" + name + "%");ResultSet rs = stmt.executeQuery();List<Book> bookList = new ArrayList<>();while(rs.next()){int id = rs.getInt("id");String bookname = rs.getString("bookname");Double bookprice = rs.getDouble("bookprice");Book book = new Book(id,bookname,bookprice);bookList.add(book);}//將集合保存到會話中HttpSession session = request.getSession();session.setAttribute("bookList",bookList);//重定向到bookQuery.jsp頁面
response.sendRedirect("bookQuery.jsp");rs.close();stmt.close();conn.close();} catch (SQLException se) {se.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}
Book
package com.example;public class Book {private Integer id;private String name;private double price;public Book(Integer id, String name, double price) {this.id = id;this.name = name;this.price = price;}
}
結果截圖