Configuration

JasperReports와 Spring MVC를 연계하기 위해서는 다음과 같이 2가지 XML 파일에 대해서 설정해야 한다.
이 매뉴얼상에 언급된 소스 코드들은 모두 Eclipse에 Import한 anyframe-sample-web 프로젝트에 예제로 들어있다.

web.xml 작성하기

anyframe-sample-web/src/webapp/WEB-INF 폴더 하위의 web.xml에 아래 내용을 추가해 넣는다. 기존의 Anyframe Web 관련 설정은 그대로 두고 JasperReports 관련한 설정만 더 추가한 것이다.

jasperaction 서블릿의 클래스인 DispatcherServlet은 Spring MVC 클래스로 url이 /reports/ pattern으로 요청되면 모두 jasperaction 서블릿을 통해 서비스 되도록 설정하고 있다.
image 서블릿은 HTML 형태로 Reporting 하는 경우 image 파일을 처리해주기 위해서 필요한 서블릿이다. HTML 형태로 Reporting 하지 않는다면 설정할 필요가 없다.
<servlet>
<servlet>
	<servlet-name>action</servlet-name>
	<servlet-class>
		org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/config/springmvc/action-servlet-*.xml, /WEB-INF/jasperaction-servlet.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
	
<servlet>
	<servlet-name>image</servlet-name>
	<servlet-class>
		net.sf.jasperreports.j2ee.servlets.ImageServlet
	</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>action</servlet-name>
	<url-pattern>/reports/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
	<servlet-name>image</servlet-name>
	<url-pattern>/reports/image</url-pattern>
</servlet-mapping>

jasperaction-servlet.xml 작성하기

action 서블릿의 클래스인 DispatcherServlet이 사용하는 빈 설정파일에 jasperaction-servlet.xml 파일을 등록해주도록 한다.
  • urlMappingJasper - 예를 들어 /userlistreport.html, /userlistreport.pdf 등등의 형태로 URL 요청 시 reportController 빈을 호출한다.
  • reportController - reportController 빈 클래스가 수행될 때 methodNameResolver를 사용한다.
  • resolver - /userlistreport.* 형태로 URL이 요청된 경우 해당 Controller 클래스의 viewReport 메소드를 수행시킨다.
  • reportView - 가장 핵심이 되는 빈으로 Controller로부터 뷰 이름을 알아낸 결과 reportView인 경우, ExtendedJasperReportsMultiFormatView 클래스를 실행시킨다. reportView 빈의 Property 설명은 다음과 같다.
    Property
    Value
    설명
    url /WEB-INF/reports/userList.jasper jrxml 파일을 JasperAssistant Preview를 이용하여 컴파일한 결과 파일
    jdbcDataSource dataSource 현재 HSQL DB를 사용하는 dataSource 빈 사용
    exporterParameters - ...IMAGES_URI image?image= HTML Reporting 시 이미지 파일을 출력하기 위해서 web.xml에 정의한 image 서블릿을 사용하도록 설정
    exporterParameters - ...CHARACTER_ENCODING euc-kr Reporting 시 한글 깨짐을 방지하기 위해서 설정
<bean id="urlMappingJasper" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    	<value>
      	**/userlistreport.* = reportController
    	</value>
    </property>
</bean>
    
<bean id="reportController" class="com.sds.emp.user.springmvc.ReportController">
    <property name="methodNameResolver" ref="resolver"/>
</bean>

<bean id="resolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
    <property name="mappings">
        <props>
            <prop key="/**/userlistreport.*">viewReport</prop>                
        </props>
    </property>
</bean>

<bean id="reportView" class="anyframe.web.springmvc.jasperreports.ExtendedJasperReportsMultiFormatView">
    <property name="url" value="/WEB-INF/reports/userList.jasper"/>
    <property name="jdbcDataSource" ref="dataSource"/>
    <property name="exporterParameters">
        <map>
            <entry key="net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IMAGES_URI" value="image?image="/>
            <entry key="net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING" value="euc-kr"/>
        </map>
    </property>
</bean>