Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring控制器映射配置和静态资源_Java_Spring_Spring Mvc_Url Pattern_Static Resource - Fatal编程技术网

Java Spring控制器映射配置和静态资源

Java Spring控制器映射配置和静态资源,java,spring,spring-mvc,url-pattern,static-resource,Java,Spring,Spring Mvc,Url Pattern,Static Resource,我对控制器拦截对静态资源的请求有问题 以下是web.xml(与问题相关的部分): 以及doView.jsp和getView.jsp文件的最后一个片段,其中使用JavaScript声明了静态文件: <script src="testing/resources/js/jquery.js"></script> 有一件事我不明白——为什么只输入http://localhost:8080/app/testing但是为了获得getView.jsp,我需要输入http://loc

我对控制器拦截对静态资源的请求有问题

以下是web.xml(与问题相关的部分):

以及doView.jsp和getView.jsp文件的最后一个片段,其中使用JavaScript声明了静态文件:

<script src="testing/resources/js/jquery.js"></script>

有一件事我不明白——为什么只输入
http://localhost:8080/app/testing
但是为了获得getView.jsp,我需要输入
http://localhost:8080/app/testing/testing/getSomething
(“测试”键入两次)

现在是本主题的主要原因——当我从类定义中删除请求映射注释时(
@RequestMapping(value=“/testing”)
并将其保留在方法上,则我根本无法获取jquery.js文件。当我键入
http://localhost:8080/app/testing/resources/js/jquery.js
我得到了doView.jsp。浏览器中的开发人员工具没有报告任何问题(缺少jquery.js文件或其他东西)-此请求刚刚被Spring的dispatcher servlet截获。此配置的唯一优点是,我不必键入两次“testing”来打开getView.jsp


有人知道如何使
mvc:resources
标记在这种情况下工作吗?不,我不能将整个测试servlet的URL映射设置为“/”;)

首先是你问题的第一部分,这是一种正常的行为。您将
/testing/*
声明为DispatcherServlet的url模式,这意味着在/testing/之后出现的所有“东西”都被spring考虑并截取。然后,您添加了一个
@RequestMapping
注释,并用
testing
填充该注释的值参数,这可能会导致混淆。您可以考虑使用<强> /另一个名称>强> >代码> URL模式< /代码>,而不是测试并将您的控制器定义上的请求映射为<强>测试>/P> 第二部分,在我看来,你把JS文件放在<强> /SRC/主/资源< /强>中,这是一个私有的安全文件夹,你可以考虑把它放在<强> /SRC/WebAPP/公共资源< /强>中,然后配置你的<强> <强>如下:

<mvc:resources mapping="/resources/**"
           location="/, classpath:/WEB-INF/public-resources/"
           cache-period="10000" />

首先,你的问题的第一部分,这是一种正常的行为。您将
/testing/*
声明为DispatcherServlet的url模式,这意味着在/testing/之后出现的所有“东西”都被spring考虑并截取。然后,您添加了一个
@RequestMapping
注释,并用
testing
填充该注释的值参数,这可能会导致混淆。您可以考虑使用<强> /另一个名称>强> >代码> URL模式< /代码>,而不是测试并将您的控制器定义上的请求映射为<强>测试>/P> 第二部分,在我看来,你把JS文件放在<强> /SRC/主/资源< /强>中,这是一个私有的安全文件夹,你可以考虑把它放在<强> /SRC/WebAPP/公共资源< /强>中,然后配置你的<强> <强>如下:

<mvc:resources mapping="/resources/**"
           location="/, classpath:/WEB-INF/public-resources/"
           cache-period="10000" />

请添加这个罐子

<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:annotation-driven/>

此jar将自动下载为maven/pom.xml结构,但是如果是您自己的lib,那么您必须将此jar放入hamcrest-core-1.3.jar

请添加此jar

<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:annotation-driven/>


这个jar将自动下载为maven/pom.xml结构,但是如果是您自己的lib,那么您必须像我写的那样将这个jar
hamcrest-core-1.3.jar

/放在servlet映射中-我不想这样做,因为我不能这么做。在那个应用程序中有更多的servlet。/在我写的servlet映射中-我不想这样做,因为我不能。该应用程序中有更多servlet。谢谢您的回答。根据问题的第一部分,我的想法是相同的,但当我在注释值中添加了不同于“/测试”的内容时,我请求
http://localhost:8080/app/testing
不起作用,我必须在/之后添加新值。这就是我不理解这种行为的原因。关于第二部分,静态资源位于WEB-INF目录中,正如我之前所写的,开发人员工具没有报告任何问题,比如缺少文件或类似的问题。当我想手动访问静态资源时,我会被重定向到doView.jsp页面。。。在$root/webapp/resources内,因为WEB-INF是一个私有/受保护的目录,这意味着当您试图手动(通过URL)访问WEB-INF内的资源时,您将被拒绝并重定向(在您的情况下)默认视图,即您在控制器中定义的doView.jsp。我现在总是将这些文件放在WEB-INF/resources中,并使用mvc:resources使它们可用于请求,但WEB.xml描述符中有一个不同之处-url模式设置为“/”not to“/anyValue/*”。但对于这个应用程序,我无法做到这一点,我正试图找到解决这个问题的任何方法。我试试你的答案。此外,我还有一个问题,当您的文件位于与WEB-INF处于同一文件系统级别的公共资源目录中时,为什么要将位置指定为
/WEB-INF/public resources/
?直接位于webapp目录中?谢谢您的回答。根据问题的第一部分,我的想法是相同的,但当我在注释值中添加了不同于“/测试”的内容时,我请求
http://localhost:8080/app/testing
不起作用,我必须在/之后添加新值。这就是我不理解这种行为的原因。关于第二部分,静态资源位于WEB-INF目录中,正如我之前所写的,开发人员工具没有报告任何问题,比如缺少文件或类似的问题。当我想手动访问静态资源时,我会被重定向到doView.jsp页面
<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:annotation-driven/>