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>


目录
相关文章
|
11天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
17天前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
19 1
|
10天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
25 0
|
15天前
|
前端开发 Java UED
JSF遇上Material Design:一场视觉革命,如何让传统Java Web应用焕发新生?
【8月更文挑战第31天】在当前的Web开发领域,用户体验和界面美观性至关重要。Google推出的Material Design凭借其独特的动画、鲜艳的颜色和简洁的布局广受好评。将其应用于JavaServer Faces(JSF)项目,能显著提升应用的现代感和用户交互体验。本文介绍如何通过PrimeFaces等组件库在JSF应用中实现Material Design风格,包括添加依赖、使用组件及响应式布局等步骤,为用户提供美观且功能丰富的界面。
25 0
|
15天前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
26 0
|
15天前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
26 0
|
15天前
|
开发者 Java Spring
【绝技揭秘】掌握Vaadin数据绑定:一键同步Java对象,告别手动数据烦恼,轻松玩转Web应用开发!
【8月更文挑战第31天】Vaadin不仅是一个功能丰富的Java Web应用框架,还提供了强大的数据绑定机制,使开发者能轻松连接UI组件与后端Java对象,简化Web应用开发流程。本文通过创建一个简单的用户信息表单示例,详细介绍了如何使用Vaadin的`Binder`类实现数据绑定,包括字段与模型属性的双向绑定及数据验证。通过这个示例,开发者可以更专注于业务逻辑而非繁琐的数据同步工作,提高开发效率和应用可维护性。
38 0
|
17天前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
14 0
|
17天前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
23天前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容