春季控制器映射配置和静态资源(Spring controller mapping configura

2019-10-19 00:17发布

我有一个由控制器拦截请求静态资源的问题。

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

<servlet>
    <servlet-name>testing</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>testing</servlet-name>
    <url-pattern>/testing/*</url-pattern>
</servlet-mapping>

下面是测试-servlet.xml中:

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

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

这里是控制器类源代码:

@Controller
@RequestMapping(value = "/testing")
public class TestingController {
    @RequestMapping(method = RequestMethod.GET)
    public String doSomething() {
        return "doView";
    }

    @RequestMapping(value = "/getSomething", method = RequestMethod.GET)
    public String getSomething(@RequestParam String id) {
        return "getView";
    }
}

并与JavaScript的静态文件的声明doView.jsp和getView.jsp文件最后snipet:

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

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

而现在这个话题的主要原因-当我从类定义中删除请求映射注解( @RequestMapping(value = "/testing")离开那些方法,那么我不能够得到的jquery.js文件,同时当。 I型http://localhost:8080/app/testing/resources/js/jquery.js 。我得到doView.jsp没有通过开发工具在浏览器中报告的任何问题(缺少的jquery.js文件或东西) -这请求只是春天的调度的servlet拦截此配置中的唯一的好处就是我不用键入“测试”,以打开getView.jsp两次。)

有谁知道解决如何使mvc:resources标签在这样的情况下工作? 而且没有我无法设置的整个测试servlet以“/” URL映射。 ;)

Answer 1:

首先第一部分的你质疑,这是一种正常的行为。 您声明/testing/*以供调度员servlet作为URL模式,这意味着所有的“东西”的/测试后出现的被认为春/等拦截。 你有再增加一个@RequestMapping注解,你填补它与价值参数testing ,这可能导致混乱。 您可以考虑使用/ ANOTHER_NAME作为url-pattern ,而不是测试和keey在你的控制器定义测试请求映射。

第二部分,在我看来,你把你的js / src目录/主/资源,这是一个privte固定文件夹中的文件,你可以考虑把它放在/ src目录/ Web应用程序/公共资源的范围内再配置 如下 :

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


Answer 2:

请加入这个jar

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

这个jar将在行家/ pom.xml的结构,但在自己的LIB的情况下自动下载,那么你必须把这个罐子hamcrest-core-1.3.jar



文章来源: Spring controller mapping configuration and static resources