WARN PageNotFound: No mapping found for HTTP request with URI

Posted

技术标签:

【中文标题】WARN PageNotFound: No mapping found for HTTP request with URI【英文标题】:WARN PageNotFound:No mapping found for HTTP request with URI 【发布时间】:2017-05-14 11:25:04 【问题描述】:

我正在尝试构建一个示例 mvc 项目,但我遇到了这个问题。当我调用 /products url 时,样式工作正常,但是当我尝试调用 /products/viewProducts/productId url 时,没有为此添加样式称呼。这是调用第二个网址时捕获的图像 Image2

请帮我找出我实际上做错了什么? 以下是项目详情。

错误详情

WARN  PageNotFound:1147 - No mapping found for HTTP request with URI [/course-project/productsList/viewProduct/resources/js/bootstrap.min.js] in DispatcherServlet with name 'dispatcher'

Project Structure

调度程序-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>course-project</display-name>

	<!-- Bootstraps the root web application context before servlet initialization -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- needed for ContextLoaderListener -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
		/WEB-INF/dispatcher-servlet.xml
		/WEB-INF/applicationContext.xml
		</param-value>
	</context-param>

	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>


</web-app>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:src="http://www.springframework.org/schema/mvc"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/mvc/cache.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

	 <context:component-scan base-package="com.pavan.mvc"/>
    <mvc:annotation-driven/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>

    </bean>
    
    <mvc:resources  mapping="/resources/**" location="/WEB-INF/resources/"/>
   <tx:annotation-driven/>
</beans>

HomeController.java

package com.pavan.mvc.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import com.pavan.mvc.dao.ProductDao;
import com.pavan.mvc.model.Product;

@Controller
public class HomeController 
	
	@Autowired
	private ProductDao productDao;
	
	@RequestMapping("/")
	public String goHome()
		return "home";
	
	@RequestMapping("/productsList")
	public String getProducts(Model model)
		List<Product> products = productDao.getAllProduct();
		model.addAttribute("products", products);
		return "productsList" ;
	
	
	
	@RequestMapping("/form")
	public String getForm()
		return "form" ;
	
	
	@RequestMapping("/productsList/viewProduct/productId")
	public String viewProduct(@PathVariable Long productId, Model model) throws IOException
		Product product = productDao.getProductById(productId);
		model.addAttribute(product);
		return "viewProducts";
	

productsList.jsp

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@include file="/WEB-INF/views/template/header.jsp"%>
<div class="container-wrapperr">
	<div class="container">
		<div class="page-header">
			<h1>All Product</h1>
			<p class="lead">Chechout all the awesome products available now</p>
		</div>

		<table class="table table-striped table-hover">
			<thead>
				<tr class="bg-sucess">
					<th>Phto Thumb</th>
					<th>Product Name</th>
					<th>Category</th>
					<th>Condition</th>
					<th>Price</th>
					<th></th>
				</tr>
			</thead>
			<c:forEach items="$products " var="product">
				<tr>
					<td><img src="#"  /></td>
					<td>$product.productName</td>
					<td>$product.productCategory </td>
					<td>$product.productCondition </td>
					<td>$product.productPrice </td>
					<td><a
						href="<spring:url value="/productsList/viewProduct/$product.productId"/>">
							<span class="glyphicon glyphicon-info-sign"></span>
					</a></td>
				</tr>
			</c:forEach>
		</table>
	</div>
</div>
<%@include file="/WEB-INF/views/template/footer.jsp"%>

viewProducts.jsp

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@include file="/WEB-INF/views/template/header.jsp"%>

<div class="container-wrapperr">
	<div class="container">
		<div class="page-header">
			<h1>Product Detail</h1>
			<p class="lead">Here is the detail information of the product</p>
		</div>
		<div class="container">
			<div class="row">
				<div class="col-md-5">
					<img src="#"  style = "width: 100% ; height: 100px"/>
				</div>
				<div class="col-md-5">
					<h3>$product.productName</h3>
					<p>
						<strong>Catogary</strong>: $product.productCategory
					</p>
					<p>
						<strong>Condition</strong>: $product.productCondition
					</p>
					<p>
						<strong>Product Price</strong>: $product.productPrice
					</p>
				</div>
			</div>
		</div>
	</div>
</div>

<%@include file="/WEB-INF/views/template/footer.jsp"%>

【问题讨论】:

/course-project/productsList/viewProduct/resources/js/里面有bootstrap.min.js吗 您的 jsp 中似乎没有正确包含 css 文件。它应该包含 contextPath//css-file 你的 js 文件的位置是什么?以及它包含在 jsp 中的什么位置? 像这样在项目中包含你的 js 文件。我面临同样的问题,然后我用谷歌搜索并找到了这样的解决方案: 跨度> 我在 WEB-INF/resources 文件夹中有所有的 css 和 js 文件 【参考方案1】:

在您的 JSP 中,您在哪里包含引导文件?你的项目中有引导文件吗?如果没有,则将这些添加到您的 JSP 顶部:

<link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

这些将在您的 JSP 中包含引导库(和 jquery 库),然后它会显示您的 样式

@Pavan 如果您真的不想在每个 jsp 中编写包含内容,那么您必须在部署描述符(您的 web.xml 文件)中配置 JSP,如下所示:

<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<include-prelude>/WEB-INF/jsp/base.jspf</include-prelude>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>

现在,如果您看到,我将这一行放在上面的配置中 &lt;include-prelude&gt;/WEB-INF/jsp/base.jspf&lt;/include-prelude&gt; 部署描述符中的标签告诉 容器以在属于的每个 JSP 的开头包含 /WEB-INF/jsp/base.jspf 文件 此属性组。这对于定义公共变量、标签库声明或其他 应该对组中的所有 JSP 可用的资源。同样,一个标签 定义要包含在组中每个 JSP 末尾的文件。您可以更多地使用这两个标签 在单个 JSP 组中不止一次。例如,您可以创建 header.jspf 和 footer.jspf 文件 分别包含在每个 JSP 的开头和结尾。

现在 base.jspf 将包含什么?这个:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@include file="/WEB-INF/views/template/header.jsp"%>
<%@include file="/WEB-INF/views/template/footer.jsp"%>
<link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">   </script>
<script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"> </script>

但我不知道您添加引导行是否会被 JSP 拾取。但是试试看。如果它们不起作用,那么就假设我从未回答过这个问题。对不起。哦,确保这个base.jspf位于/WEB-INF/jsp/然后你所有的JSP文件也在那个路径下。

警告:如果你这样做,你必须在你的 jsps 上稍微移动一下才能让它工作。

我希望这会有所帮助,我希望我没有进一步混淆您或让您的工作更加努力!

【讨论】:

我在 WEB-INF/resources 文件夹中有引导文件 谢谢,这已经解决了问题,但不能使用 /WEB-INF/resources 文件夹中已经存在的 bootstrap 和 js 文件 如果我删除这些文件,我还需要在所有其他 jsp 文件中包含这些链接。 当然可以,但是您在哪里添加更多内容?【参考方案2】:

尝试使用以下 url 模式:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

【讨论】:

当我添加 /* 我得到 404 错误和这个警告 WARN PageNotFound:1147 - 在名为“dispatcher”的 DispatcherServlet 中找不到带有 URI [/course-project/WEB-INF/views/home.jsp] 的 HTTP 请求的映射 标签中删除 /WEB-INF/dispatcher-servlet.xml

以上是关于WARN PageNotFound: No mapping found for HTTP request with URI的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC PageNotFound.noHandlerFound No mapping found for HTTP request with URI

WARN PageNotFound:208 - Request method 'POST' not supported

Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决(转)

Web.servlet.PageNotFound - 没有 GET 映射

PageNotFound:在DispatcherServlet中找不到带有URI [../j_spring_security_check]的HTTP请求的映射

java出现以下警告:WARN No appenders;WARN Please initialize the log4j的处理方法