2013-03-21 43 views
3

我有一个问题,使用弹簧mvc 3和extjs 4或更精确地是exjs尝试加载我的控制器或我的图像时的路径问题。Spring mvc 3.2和extjs 4.1.3:我必须为al requestMapping路径定义mvc:resources映射吗?

我的web应用程序的结构是这样的:

src 
-- webapp 
    -- app 
    -- extjs4.1.3 
    -- css 
    -- icons 
    -- WEB-INF 
     -- jsp 
    app.js 

我annoted这样

@RequestMapping(value = "/path/init.do", method = RequestMethod.GET) 

控制器它返回一个视图名称在我的匹配JSP是WEB-INF/JSP夹。这个jsp加载extjs文件。

的ViewResolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 

<display-name>tiana Web Application</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/spring/application-context.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

</web-app> 

因为我的URL模式 “/”,我不得不做出使用MVC的:资源魔法标记,因为春季3.0中提供。 5(近似)如下:

<mvc:resources mapping="/css/**" location="/css/" /> 
<mvc:resources mapping="/app/**" location="/app/" /> 
<mvc:resources mapping="/extjs-4.1.3/**" location="/extjs-4.1.3/" /> 
<mvc:resources mapping="/app.js" location="/app.js" /> 

我知道如果我把所有这些东西放在资源中es文件夹。我会只写:

<mvc:resources mapping="/resources/**" location="/resources/" /> 

但我不认为它会解决我的问题

我的JSP文件是这样的:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    <html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>My jsp title</title> 
    <link rel="stylesheet" type="text/css" href='<c:url value="/extjs-4.1.3/resources/css/ext-all.css" />'> 

    <link rel="stylesheet" type="text/css" href='<c:url value="/css/myStyle.css" />'> 
    <script type="text/javascript" src='<c:url value="/extjs-4.1.3/ext-all-debug.js" />'></script> 
    <script type="text/javascript" src="<c:url value="/app.js" />"></script> 
    </head> 
    <body></body> 
    </html> 

所有我不得不首先使用jstl标签将引用写入我的资源文件。 没有这些标签,如果我继续喜欢的网址/myresource.xxx,将URL

localhost:8080/myresource.xxx 

而且如果我写myresource.xxx没有斜杠,这是

localhost:8080/mywebapp/path/myresource.xxx 

但它的工作原理是这个,任何建议,将不胜感激跳过jstl依赖项,但它的作品。

我真正的问题是我的app.js会加载extjs的控制器,并且它使用某种'window.location'来构造url。就我而言,这将是

localhost:8080/mywebapp/path/app/controller/myController.js 

,但我想它是

localhost:8080/mywebapp/app/controller/myController.js 

我面临着同样的那种,如果我把我的ExtJS的文件图标的问题,将URL

localhost:8080/mywebapp/path/icons/myIcon.png 

,而不是

localhost:8080/mywebapp/icons/myIcon.png as expected. 

我可以通过添加

<mvc:resources mapping="/path/app/**" location="/app" /> 
<mvc:resources mapping="/path/icons/**" location="/icons" /> 

解决这个问题,但我可以相信,每一次我定义一个Spring MVC控制器新requestMapping,“路径2”为例,我必须定义一个对应MVC:资源映射。

我试图定义一个全局“的baseUrl”在我的JSP文件中的JavaScript变量,通过在app.js文件这个变量的前缀和appFolder前缀的所有图标,并通过这个变量在ExtJS的代码中使用的东西,但它也不可以接受的。

我错过了什么?我google了很多,我来到这个“/”url模式和mvc:资源方法(这似乎很干净的春天mvc webapp),但我无法解决我的“uri”问题(我不知道如何生成的路径requestMapping在真实英语中被调用)。

谢谢你这么多,如果你能帮助我,如果没有,感谢您的时间

+0

嗨Samuel Gaiffe我也面临同样的问题。你是如何解决这个问题 – Learner 2015-06-14 11:04:10

回答

0

你可以尝试把所有的资源(我不知道自己的哪些内容是静态资源)在:

-- webapp 
    --resources 
     -- app 
     -- extjs4.1.3 
     -- css 
     -- icons 
    -- WEB-INF 
    -- jsp 
    app.js 

那么你定义一个映射:

<mvc:resources mapping="/resources/**" location="/resources/" /> 

在这一点上,你会使用访问css文件夹,例如:

<c:url value="/resources/css/myStyle.css" /> 

,并以同样的方式任何其他的路径,也可以通过尝试(但没有测试):

<mvc:resources mapping="/**" location="/resources/" /> 

,我想你会访问你的css文件夹:

<c:url value="/css/myStyle.css" /> 
+0

嗨matteo,谢谢你的回答。正如我在文章中所说的,如果我将所有资源都放在资源文件夹中,我认为它不会改变extjs将继续使用localhost:8080/mywebapp/path/resources/css/myStyle的事实。 CSS。仍然会有错误的“路径”,但我会尝试你的解决方案 – 2013-03-21 16:41:09

+0

正如我所想,资源文件夹不能解决任何问题 – 2013-03-22 10:20:42