Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 512
Lakshmi Avatar asked Mar 08 '13 17:03

Lakshmi


People also ask

Can we use JSP with spring boot?

Undertow will not support JSP if used as an Embedded Servlet Container. If deploying in a web container, our @SpringBootApplication annotated class should extend SpringBootServletInitializer and provide necessary configuration options. We can't override the default /error page with JSP.

How can I get image from spring boot?

We start Spring Boot application. We navigate to http://localhost:8080/sid to display the image in the browser.


2 Answers

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.

like image 90
Sotirios Delimanolis Avatar answered Oct 03 '22 02:10

Sotirios Delimanolis


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.

like image 43
JB Nizet Avatar answered Oct 03 '22 00:10

JB Nizet