You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC项目product2.jsp加载商品图片<c:url标签报错求助

问题描述

我尝试在商品详情JSP页面添加图片,对应数据库表结构如下:

CREATE TABLE PRODUCTS (
ID VARCHAR(25) PRIMARY KEY,
NAME VARCHAR(50),
DESCRIPTION VARCHAR(250),
UNIT_PRICE DECIMAL,
MANUFACTURER VARCHAR(50),
CATEGORY VARCHAR(50),
CONDITION VARCHAR(50),
UNITS_IN_STOCK BIGINT,
UNITS_IN_ORDER BIGINT,
DISCONTINUED BOOLEAN
);

数据库中的测试商品数据如下:

INSERT INTO PRODUCTS VALUES ('P1234', 'iPhone 6s', 'Apple iPhone 6s smartphone with 4.00-inch 640x1136 display and 8-megapixel rear camera','500','Apple','Smartphone','New',450,0,false);
INSERT INTO PRODUCTS VALUES ('P1235', 'Dell Inspiron', 'Dell Inspiron 14-inch Laptop (Black) with 3rd Generation Intel Core processors',700,'Dell','Laptop','New',1000,0,false);
INSERT INTO PRODUCTS VALUES ('P1236', 'Nexus 7', 'Google Nexus 7 is the lightest 7 inch tablet With a quad-core Qualcomm Snapdragon™ S4 Pro processor', 300,'Google','Tablet','New',1000,0,false);

Product控制器代码如下:

// 第103页新增
@RequestMapping("/product")
public ModelAndView getProductById(@RequestParam("id") String productId, Model model) {
    ModelAndView netice = new ModelAndView("product");
    netice.addObject("product", productService.getProductById(productId));
    System.out.println("109");
    // model.addAttribute("product",productService.getProductById(productId));
    return netice;
}
@RequestMapping("/product2")
public String getProduct2ById(@RequestParam("id") String productId, Model model) {
    System.out.println("117");
    Product product = productService.getProductById(productId);
    model.addAttribute("product", product);
    return "product2";
}

可正常运行的product.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet"
href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<title>商品</title>
</head>
<body>
    <section>
        <div class="jumbotron">
           <div class="container">
               <h1>商品</h1>
           </div>
       </div>
   </section>
   <section class="container">  
        <div class="row">
           <div class="col-md-5">
               <!-- 向用户展示图片的位置 -->
               <img src="<c:url value="/img/${product.productId}.png"></c:url>" alt="image" style = "width:100%"/>
               <h3>${product.name}</h3>
               <p>${product.description}</p>
               <p>
                   <strong>商品编码:</strong><span class="label label warning">${product.productId}
                   </span>
            </p>
            <p>
                <strong>生产商</strong> : ${product.manufacturer}
            </p>
            <p>
                <strong>分类</strong> : ${product.category}
            </p>
            <p>
                <strong>库存可用数量</strong> : ${product.unitsInStock}
            </p>
            <h4>${product.unitPrice}美元</h4>
            <p>
                <a href="<spring:url value="/listproducts" />"
                    class="btn btn-default"> <span
                    class="glyphicon-hand-left glyphicon"></span> 返回
                </a> <a href="#" class="btn btn-warning btn-large"> <span
                    class="glyphicon-shopping-cart glyphicon"> </span> 立即下单
                </a>
            </p>
        </div>
    </div>
</section>
</body>
</html>

出现报错的product2.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet"
href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<title>商品</title>
</head>
<body>
    <section>
        <div class="jumbotron">
            <div class="container">
                <h1>商品</h1>
            </div>
        </div>
    </section>
    <section class="container">
        <div class="row">
            <div class="col-md-5">  
                <!-- 向用户展示图片的位置 -->           
                <img src="<c:url value="/img/${product.productId}.png"></c:url>" alt="image" style = "width:100%"/>
                <h3>${product.name}</h3>
                <p>${product.description}</p>
                <p>
                    <strong>商品编码:</strong>
                    <span class="label label warning">${product.productId} </span>
                </p>
                <p>
                    <strong>生产商</strong> : ${product.manufacturer}
                </p>
                <p>
                    <strong>分类</strong> : ${product.category}
                </p>
                <p>
                    <strong>库存可用数量</strong> :
                ${product.unitsInStock}
                </p>
                <p>
                    <a
                    href=" <spring:url value="/product2?id=${product.productId}" /> "
                    class="btn btn-primary"> <span
                    class="glyphicon-info-sign glyphicon" /> 
                </span> 详情
                    </a>
                </p>
                <a href="<spring:url value="product" />" class="btn btn-default"> <span  class="glyphicon-hand-left glyphicon"></span> 返回
                </a>
            </div>
        </div>
    </section>
</body>
</html>

当前访问product2.jsp时收到如下报错:

org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping for GET /springmvc197/%3Cc:url%20value=


问题原因及解决方法

报错核心原因是JSP无法识别c:前缀的标签,导致<c:url>没有被正常解析,直接作为字符串拼接进了请求路径,%3Cc:url%20value=就是<c:url value=的URL编码结果。
对比正常运行的product.jsp和报错的product2.jsp头部可以发现,product.jsp引入了JSTL核心标签库,而product2.jsp缺少这行引入:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

只要在product2.jsp头部、spring标签库引入的相邻位置加上上述代码即可解决问题。
另外还有两个可优化的细节:

  1. product2.jsp的详情按钮<span>标签多写了一个闭合,多余的</span>可以删除
  2. 返回按钮的<spring:url>路径建议加斜杠开头,写成value="/product"避免相对路径出错

内容的提问来源于stack exchange,提问作者tahasozgen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:51:00