Reputation: 2294
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
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
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