20:基于EL与JSTL的产品管理页-Java Web

简介: 20:基于EL与JSTL的产品管理页-Java Web

在Java Web开发中,Expression Language(EL)和JavaServer Pages Standard Tag Library(JSTL)是提升代码可读性、减少脚本元素并增强页面功能的关键工具。本文将通过一个完整的产品管理系统实例,深度解析如何利用EL表达式和JSTL标签库进行数据绑定和逻辑控制,同时总结它们之间的区别及应用场景。

20.1 项目背景与目标

为了更好地理解EL和JSTL的应用,我们将构建一个简单的Web产品管理系统。系统包括产品的增删改查操作,展示产品的列表以及详情页面,使用EL表达式处理后端传来的数据,并运用JSTL进行循环、条件判断等逻辑控制。

20.2 技术概述

  1. Expression Language (EL):EL提供了一种简洁的方式来访问JavaBean对象、Servlet上下文、请求参数等数据源中的数据,无需编写Java代码即可实现数据的动态绑定。
  2. JavaServer Pages Standard Tag Library (JSTL):JSTL包含一系列标签库,用于替换传统的Scriptlet,简化了迭代、条件判断、流程控制、URL操作等功能的实现。

20.3 代码示例

  • 产品列表页(products.jsp)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Product List</title>
</head>
<body>
    <h1>Products</h1>
    <!-- 使用c:forEach遍历产品列表 -->
    <c:forEach var="product" items="${productList}">
        <div>
            <h2>${product.name}</h2>
            <p>Price: ${product.price}</p>
            <a href="productDetails?id=${product.id}">View Details</a>
        </div>
    </c:forEach>
</body>
</html>
  • 产品详情页(productDetails.jsp)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Product Details</title>
</head>
<body>
    <h1>Product Details</h1>
    <c:if test="${not empty product}">
        <div>
            <h2>${product.name}</h2>
            <p>Price: ${product.price}</p>
            <p>Description: ${product.description}</p>
        </div>
    </c:if>
    <c:if test="${empty product}">
        <p>No product found with the given ID.</p>
    </c:if>
</body>
</html>
  • Servlet处理请求并设置属性
@WebServlet("/productDetails")
public class ProductDetailsServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int productId = Integer.parseInt(request.getParameter("id"));
        // 假设getProductById是从数据库获取产品信息的方法
        Product product = getProductById(productId);
        request.setAttribute("product", product); // 设置属性供JSP页面使用
        RequestDispatcher dispatcher = request.getRequestDispatcher("productDetails.jsp");
        dispatcher.forward(request, response);
    }
}

20.4 区别总结

  • EL: 主要用于数据绑定,从作用域对象中获取或计算值,如${product.name}
  • JSTL: 提供了一系列标签来执行循环、条件判断、异常处理、输出等任务,增强了JSP的功能性和可维护性。

20.5 应用场景总结

  • EL: 在任何需要动态显示数据的地方,例如显示用户信息、商品价格、查询结果等。
  • JSTL:
  • c:forEach标签可用于遍历集合数据,渲染列表、表格等内容。
  • c:if, c:choose, c:when, c:otherwise等标签可以用来做条件分支判断。
  • 还有其他标签如fmt标签库处理国际化与格式化,sql标签库处理SQL操作等。

20.6 进阶功能与扩展

在产品管理系统中,我们还可以进一步利用EL和JSTL实现更多高级功能,例如分页显示、搜索过滤等。

分页示例

假设我们的产品列表需要分页展示,可以使用EL和JSTL结合Java代码处理分页逻辑,并动态渲染页面内容。

<!-- products.jsp -->
...
<c:forEach var="product" items="${currentPageProducts}">
    <!-- 显示产品信息 -->
</c:forEach>
<!-- 分页导航栏 -->
<div>
    <c:if test="${not firstPage}">
        <a href="?page=1">First</a>
        <a href="?page=${previousPage}">Previous</a>
    </c:if>
    <c:forEach var="i" begin="1" end="${totalPages}">
        <c:choose>
            <c:when test="${currentPage eq i}">
                <span>${i}</span>
            </c:when>
            <c:otherwise>
                <a href="?page=${i}">${i}</a>
            </c:otherwise>
        </c:choose>
    </c:forEach>
    <c:if test="${not lastPage}">
        <a href="?page=${nextPage}">Next</a>
        <a href="?page=${totalPages}">Last</a>
    </c:if>
</div>

在Servlet中,根据请求参数计算当前页码及对应的产品数据,并将其设置到请求属性中:

@WebServlet("/products")
public class ProductsServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int currentPage = Integer.parseInt(request.getParameter("page")) || 1;
        // 根据当前页码查询相应的产品列表
        List<Product> currentPageProducts = getProductListByPage(currentPage);
        int totalPages = calculateTotalPages(); // 计算总页数
        request.setAttribute("currentPageProducts", currentPageProducts);
        request.setAttribute("currentPage", currentPage);
        request.setAttribute("totalPages", totalPages);
        RequestDispatcher dispatcher = request.getRequestDispatcher("products.jsp");
        dispatcher.forward(request, response);
    }
}

搜索过滤示例

同样地,如果需要添加搜索功能,可以在JSP页面中使用表单提交搜索关键词,然后在Servlet中处理并返回结果。

<!-- searchForm.jsp -->
<form action="searchResults" method="post">
    <input type="text" name="keyword" placeholder="Search for products...">
    <button type="submit">Search</button>
</form>
@WebServlet("/searchResults")
public class SearchResultsServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String keyword = request.getParameter("keyword");
        List<Product> searchedProducts = searchProducts(keyword);
        request.setAttribute("searchedProducts", searchedProducts);
        RequestDispatcher dispatcher = request.getRequestDispatcher("searchResults.jsp");
        dispatcher.forward(request, response);
    }
}
<!-- searchResults.jsp -->
<c:forEach var="product" items="${searchedProducts}">
    <!-- 显示搜索结果 -->
</c:forEach>


目录
相关文章
|
8天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
40 7
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
75 9
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java 开发者
Java 开发者注意!限时招募产品体验官,100% 获得好礼
🚀【开发者福音】SoFlu-JavaAI 开发助手来袭!💻 摆脱熬夜赶需求的压力,SoFlu-JavaAI 助你轻松应对:理清需求、设计架构、编写逻辑与代码、一键构建工程。立即体验高效开发![了解更多](https://mp.weixin.qq.com/s/h9lwDGbwhYodoNjOxsaxIQ) # 产品体验官限时招募中!
Java 开发者注意!限时招募产品体验官,100% 获得好礼
|
2月前
|
人工智能 自然语言处理 Java
重塑 Java 开发体验:SoFlu-JavaAI 产品体验官招募!100% 有礼!
Java 作为历史悠久且广泛应用的编程语言,在企业级应用、Web 开发、移动应用(尤其是 Android)及大数据处理等领域占据重要地位。其成熟稳定的特性和庞大的生态系统吸引了众多开发者,但也带来了高学习成本、复杂开发流程和竞争激烈等问题。为解决这些挑战,SoFlu-JavaAI 应运而生。这是一款基于大模型技术的 AI 开发工具,能通过自然语言对话自动生成 Java Maven 工程代码,提供引导式开发、一键工程构建与迭代支持等功能,大幅提高开发效率并减轻设计焦虑。目前,SoFlu-JavaAI 正在招募产品体验官,参与即可获得专属礼品和技术交流机会。
|
3月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
87 7
|
3月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
110 4
|
3月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
90 0
|
4月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
67 1
WK
|
3月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
168 0

热门文章

最新文章