日期:2014-05-17  浏览次数:20800 次

spring-mvc 注解的问题
web.xml配置如下
XML code
<servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/appServlet/servlet-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


模版是velocity 类似这样的
XML code
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

现在的问题是
我在一个方法上配置如下
Java code
@RequestMapping(value="/trend/test", method=RequestMethod.GET)
    public String test(Model model) {
        // model.addAttribute("foo", "bar");
        // model.addAttribute("fruit", "apple");
        return "index";
    }

转向到/WEB-INF/views/index.vm上去了
这个页面时找到了,但是其他的图片,css等都通过/trend 去转向 。所以这个页面上的图片,还有嵌入的其他的vm都无法找到
比如index.vm这个页面引用了
HTML code

<iframe width="100%" ....  src="velocity/layout/header.vm"/>


就会从/trend/velocity/layout/header.vm去找 。
请问这样的问题怎么解决??

------解决方案--------------------
/trend/test

这个是你的访问路径
forward出来的路径也是这个

用相对路径的访问得到的css,js当然也是这个路径的
比如引入a.css,b.js
那css和js的路径是
/trend/a.css /trend/b.js
但是由于你直接把/作为servlet拦截路径,所以这2个访问实际也被spring截取了,并且找不到相应的转发请求

解决办法是在spring中配置一个静态映射
<mvc:resources location="/static/" mapping="/static/**"/>
指定/static/下的文件不作为spring-mvc的请求处理

在jsp中载入css和js的代码修改为相对或绝对路径
../static/a.css ../static/b.js
或者
项目/static/a.css 项目/static/b.js
类似这样