我在使用spring mvc 3和extjs 4时遇到问题,当exjs尝试加载我的控制器或我的图像时,路径问题正是如此。
我的webapp的结构是这样的:
src
-- webapp
-- app
-- extjs4.1.3
-- css
-- icons
-- WEB-INF
-- jsp
app.js
我有一个像这样的控制器
@RequestMapping(value = "/path/init.do", method = RequestMethod.GET)
它返回一个与我的WEB-INF / jsp文件夹中的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:resources魔术标签,这可以从春季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" />
我知道如果将所有这些内容放在资源文件夹中会更好。我只想写:
<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,网址将是
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文件中放置一个图标,我会遇到同样的问题,网址将是
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时,例如“path2”,我将不得不定义一个相应的mvc:resources mapping。
我试图在我的jsp文件中定义一个全局“baseUrl”javascript变量,在app.js文件中用appFolder作为前缀,并在此变量前面加上extjs代码中使用的所有图标和内容,但它不是可接受的。
我错过了什么?我google了很多,我来到这个“/”url-pattern和mvc:resources方法(对于spring mvc webapp来说看起来很干净)但是我无法解决我的“uri”问题(我不知道路径是如何生成的requestMapping以真实英语调用。)
非常感谢你,如果你可以帮助我,如果没有,谢谢你的时间
答案 0 :(得分: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" />