3

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 パターンは「/」であるため、Spring 3.0.5 以降で利用可能な mvc:resources マジック タグを (およそ) 次のように使用する必要がありました。

<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 のような URL を保持すると、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 コントローラー (「path2」など) で新しい requestMapping を定義するたびに、対応する mvc:resources マッピングを定義する必要があると思います。

私はjspファイルでグローバルな「baseUrl」javascript変数を定義しようとしました.app.jsファイルでこの変数をappFolderの前に付け、extjsコードで使用されるすべてのアイコンとものをこの変数で前に付けましたが、どちらも受け入れられません.

私は何を逃したのですか?私はたくさんグーグルで検索し、この "/" url-pattern と mvc:resources メソッド (Spring mvc webapp では非常にクリーンなようです) にたどり着きましたが、「uri」の問題を解決できません (パスがどのように生成されたかわかりません) requestMapping は実際の英語で呼び出されます)。

お手伝いいただける場合は、どうもありがとうございます。そうでない場合は、お時間をいただきありがとうございます。

4

1 に答える 1

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" />
于 2013-03-21T13:06:58.917 に答える