image not displayed in jsp with spring

16,635

Solution 1

What you want to do is add this line in your spring servlet-context xml configuration.

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

The mvc xml namespace is at xmlns:mvc="http://www.springframework.org/schema/mvc"

The resources tag basically tells Spring to handle requests to the declared mapping by serving up a named file from the declared location, instead of going through your controller stack. The mapping can also be used to serve up any resource: css, js, pdf, etc.

You don't need multiple <mvc:resources> tags, just one with a generic mapping, eg. /resources/**, and a comma separated list of locations, eg. /resources/css/, /resources/js/.

<mvc:resources mapping="/resources/**" location="/resources/images/, /resources/css/" />

The <resources> tag was introduced in spring 3.0.4, so you need at least that version of Spring and of the xsd. You can use

http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd`

Also, as JB Nizet says, you should reference your image as

<img src="<c:url value='/images/top.jpg'/>"/>

for a relative path.

Solution 2

The location of the JSP file is irrelevant when it comes to URL paths. What matters is the location of the page displayed by your browser, i.e. the address of the page displayed in the address bar of your browser.

So if the address of the page is /webapp/foo/bar/someAction.html and the image is at /webapp/images/top.jpg, the path should be /webapp/images/top.jpg (absolute path, preferrable and clearer), or ../../images/top.jpg (relative path, harder to refactor if you move files or change URLs).

My advice: always use absolute paths, and use the JSTL's c:url tag to avoid hard-coding the context path of the webapp:

<img src="<c:url value='/images/top.jpg'/>"/>

The above line will always work.

Share:
16,635
Lakshmi
Author by

Lakshmi

Updated on June 06, 2022

Comments

  • Lakshmi
    Lakshmi almost 2 years

    I am new to spring with jsp i am basically trying to display an image in my jsp

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
            <title>JSP-Page</title>
        </head>
        <body>
            <img src="images/top.jpg">
        </body>
    </html> 
    

    Spring-servlet xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           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">
    
        <!-- Enable annotation driven controllers, validation etc... -->
        <mvc:annotation-driven />
     <mvc:resources location="/images/" mapping="/images/**"/>
    
        <!-- Application controllers package -->
        <context:component-scan base-package="net.ignou.onlinetest.controller" />
    
        <bean id="viewoseesolver"
                  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/views/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                  destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url"
                              value="jdbc:mysql://localhost:3306/online_test" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </bean>
    
        <bean id="sessionFactory"
                  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="annotatedClasses">
                <list>
                    <value>net.ignou.onlinetest.domain.Question</value>
                    <value>net.ignou.onlinetest.domain.Student</value>
                    <value>net.ignou.onlinetest.domain.Answer</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">none</prop>
                </props>
            </property>
        </bean>
    
        <bean id="multipartResolver"
                  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        </bean>
    
        <bean id="questionDao" class="net.ignou.onlinetest.dao.daoImpl.QuestionDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="loginDao" class="net.ignou.onlinetest.dao.daoImpl.LoginDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    
        <bean id="answerDao" class="net.ignou.onlinetest.dao.daoImpl.AnswerDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    
        <bean id="service" class="net.ignou.onlinetest.service.serviceImpl.ServiceImpl">
            <property name="questionDao" ref="questionDao"/>
        </bean>
    
    </beans>
    

    My web.xml

    <web-app 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>Person Detail</display-name>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
       </web-app>
    

    I am using maven.My image file is located at

    online-test\src\main\webapp\images and my jsp page is in

    online-test\src\main\webapp\web-inf\views

    I also tried replacing the src as <img src="../../images/top.jpg"> but it didnt work i also tried moving my jsp and image to webapp folder directly also but no use. Is there anything im doing wrong how exactly does spring handle img requests?

  • Sotirios Delimanolis
    Sotirios Delimanolis about 11 years
    @Lakshmi What is the context root of your web application? And put your full servlet context configuration in your question, so we can see if everything is in order.
  • Lakshmi
    Lakshmi about 11 years
    added code in my question also one more thing i get SaxParserException on adding mvc:resources though i have added the schema definition this is the cause The matching wildcard is strict, but no declaration can be found for element 'mvc:resources'
  • Lakshmi
    Lakshmi about 11 years
    didn't work tried it separately and also along with Sotirios Delimanolis solution.
  • Sotirios Delimanolis
    Sotirios Delimanolis about 11 years
    @Lakshmi Use http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd. The resources tag was introduced in spring 3.0.4. As in don't have the suffix -3.0 in the schema location for mvc.
  • Sotirios Delimanolis
    Sotirios Delimanolis about 11 years
    What version of spring are you using?
  • Lakshmi
    Lakshmi about 11 years
    it worked had to change my spring mvc jar also to 3.0.4.RELEASE and it worked thanks. Can we have multiple <mvc:resources> tag in configuration?
  • Lakshmi
    Lakshmi about 11 years
    it worked had to change my spring mvc to 3.0.4.RELEASE thanks a lot hope i can use multiple mvc:resources for javascript and css rite?
  • Lakshmi
    Lakshmi about 11 years
    it worked changed my spring mvc version to 3.0.4 thanks :) hope i can use multiple mvc resource tag for javascript and css rite?
  • Sotirios Delimanolis
    Sotirios Delimanolis about 11 years
    You don't need multiple <mvc:resources> tags, just one with a generic mapping, eg. /resources/**, and a comma separated list of locations, eg. /resources/css, /resources/js. See updates in answer.