我有一个问题,使用弹簧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在真实英语中被调用)。
谢谢你这么多,如果你能帮助我,如果没有,感谢您的时间
嗨Samuel Gaiffe我也面临同样的问题。你是如何解决这个问题 – Learner 2015-06-14 11:04:10