2012-11-14 10 views
6

Jestem dość nowy, aby wiosną i mam problemy z uzyskaniem dostępu do moich zasobów w mojej aplikacji Spring mvc. Próbowałem wypróbować Google'a i użyć przepełnienia stosu, aby znaleźć odpowiedź (żadna z nich nie pomogła mi w uzyskaniu lub possible solution, possible solution 3, spring framework), ale nie znalazłem żadnego, który albo rozwiązałby mój problem, albo poprawił moje zrozumienie problemu (może to być po prostu ponieważ nie do końca zrozumiałem wspomniane rozwiązania).Dostęp do zasobów na stronie JSP aplikacji Spring MVC

udało mi się mój plik css osadzony na stronie internetowej, ale przy użyciu kodu:

<%@include file="css/style.css" %> 

ale nie można uzyskać do niego dostęp za pomocą adresu URL w ten sposób z oczywistych powodów. Próbowałem również za pomocą następujących w moim pliku web.xml, ale to nie ma znaczenia, muszę przyznać, że nie bardzo rozumiem odwzorowanie w tym przypadku tak, że może być problem

<mvc:annotation-driven /> 
<mvc:resources mapping="/images/**" location="/images/" /> 
<mvc:resources mapping="/css/**" location="/css/" /> 

Próbowałem również za pomocą każdy z następujących oddzielnie:

<img src="<%=request.getContextPath()%>/images/logo.jpg"/> 

<img src="<%=request.getContextPath()%>/src/main/resources/images/logo.jpg"/> 

to mój układ projekt:

My Project structure

to jest moja web.xml:

<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>MyProject Application</display-name> 
    <servlet> 
    <servlet-name>myServlet</servlet-name> 
     <servlet-class> 
        org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>myServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

To mój myServlet-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
    <!-- --> 
    <mvc:annotation-driven /> 
    <mvc:resources mapping="/images/**" location="/images/" /> 
    <mvc:resources mapping="/css/**" location="/css/" /> 
    <bean name="/index.html" 
    class="com.myproject.controller.AdminController" /> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" > 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 
</beans> 

i tylko w przypadku, tutaj jest mój pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myproject</groupId> 
    <artifactId>myProject</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>myProject Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <springVersion>3.0.4.RELEASE</springVersion> 
    </properties> 
    <dependencies> 

     <!-- JUnit --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- ORACLE JDBC driver, need install yourself --> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>11.2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.6.3.Final</version> 
     </dependency> 

     <!-- Spring framework --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${springVersion}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${springVersion}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${springVersion}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${springVersion}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${springVersion}</version> 
     </dependency> 

     <!-- for compile only, your container should have this --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <!-- Commons-logging & log4j --> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.12</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>admin_UI</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Byłbym szczęśliwy, jeśli mogę uzyskać dostęp obrazy i foldery css oraz zawartość tych folderów ze strony webapp/WEB-INF/stron w taki sam sposób, w jaki mogę uzyskać dostęp do stron jsp (np. poprzez URL), ale najlepiej chciałbym zrozumieć, jak powinienem to zrobić poprawnie, tj. folder powinien być mapowany (src \ main \ resources o r src \ main \ webapp \ WEB-INF \ some_resource_folder) i jak powinienem go odwzorować.

Jeśli potrzebujemy więcej informacji, chętnie dostarczę.

Odpowiedz

12

Powinieneś umieścić wszystkie swoje statyczne treści internetowe, takie jak obrazy, css i javascript w katalogu zasobów w katalogu webcontent (katalog główny).

enter image description here

Następnie w myServlet-servlet.xml określić katalog jako katalogu zasobów. Dzięki temu dyspozytor nie będzie przetwarzał żądań zasobów statycznych.

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 

w plikach JSP należy następnie uzyskać dostęp do tych zasobów za pomocą korzeni względny adres URL, który opiera się na ścieżce kontekstowego rozwiązane przez JSP EL.

<link href="${pageContext.servletContext.contextPath}/resources/My_CSS.css" rel="stylesheet"/> 
+0

Ty jesteś genem t, które działało idealnie, wyraźnie nie rozumiałem, gdzie powinien znajdować się folder zasobów. bardzo doceniane. Mam pytanie uzupełniające, teraz otrzymuję błąd w zaćmieniu na mojej stronie JSP 'javax.servlet.jsp.JspException nie można rozwiązać na typ \t index.jsp" jakiejkolwiek porady? – jonnie

+1

Cieszę się, że mogę pomóc, czy możesz skierować mnie do pytania uzupełniającego? Chciałbym odpowiedzieć na więcej twoich pytań. To było miłe pochwały na tak wczesnym rankiem. Aby odpowiedzieć na twoje pytanie, musiałbym zobaczyć twój kontroler. –

+0

Otrzymuję teraz błąd w zaćmieniu na mojej stronie JSP javax.servlet.jsp.JspException nie można rozwiązać na typ index.jsp jakiejkolwiek porady? – jonnie

0

podczas korzystania z tego:

<mvc:resources mapping="/resources/**" location="/META-INF/RESOURCES/" /> 

użyć tego kodu w JSP:

<link href="<c:url value="/"/>resources/My_CSS.css" rel="stylesheet"/> 

Sprawdzić różnicę. ZASOBY CAPS lokalizuje ścieżkę pliku. i środki lokuje w ścieżce internetowej

0

ustawić kolejność zasobu jak poniżej

<mvc:resources mapping="/resources/**" location="/resources/" order="-1"/> 
0

Zamiast mieszania JSTL i JSP EL, można skonfigurować sprężynę tak:

<mvc:resources mapping="/resources/**" location="/WEB-INF/pages/" /> 

w Twoim przypadku, w JSP użyj następującego:

<link href="<c:url value="/resources/My_CSS.css"/>" rel="stylesheet"/> 
+0

gdzie powinienem zaimportować tag mvc? –

0

W twoim pliku jsp y ou należy ustawić,

<c:set var="context" value="${pageContext.request.contextPath}" /> 

i pliki zasobów js, css, img itp obejmują je,

<script src="${context}/resources/your.file.js" type="text/javascript"></script> 
<link href="${context}/resources/your.min.css" rel="stylesheet" type="text/css"/> 

Również należy użyć tego wcześniej href linki do kontrolera, jak

<a href="${context}/yourPage"> 

W ten sposób można użyć ścieżki kontekstu zdefiniowanej w kontenerze serwletu lub serwerze aplikacji Tomcat, pomostu itp.

Powiązane problemy