Lakshmi
Lakshmi

Reputation: 2294

image not displayed in jsp with spring

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?

Upvotes: 6

Views: 17394

Answers (2)

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 279880

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.

Upvotes: 12

JB Nizet
JB Nizet

Reputation: 691625

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.

Upvotes: 4

Related Questions