springmvc 3.1 통합 속도

spring mvc 를 괴 롭 히 고 싶 었 습 니 다. 오늘 오후 간장 시간 에 이것 에 대해 접촉 을 했 습 니 다. 주로 springMVC 와 velocity 의 설정 입 니 다.
 
1. 먼저 웹. xml 에 MVC 의 통합 을 추가 합 니 다.
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.htm</url-pattern>
	</servlet-mapping>

 contextConfigLocation 초기 화 인자 가 없 으 면 classpath 에서 {servlet - name} - servlet. xml 설정 파일 을 찾 습 니 다.
	public String getNamespace() {
		return (this.namespace != null ? this.namespace : getServletName() + DEFAULT_NAMESPACE_SUFFIX);
	}

 
 
 
2. spring - mvc. xml 설정 에서 velocity 설정 속성 과 보기 분석
	<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
		<property name="resourceLoaderPath" value="/WEB-INF/vm"/>
		<property name="configLocation" value="classpath:velocity.properties"/>
        </bean>

 velocity. properties 에 velocity 속성 설정:
#encoding
input.encoding	=UTF-8
output.encoding=UTF-8
contentType=text/html;charset=UTF-8

#autoreload when vm changed
file.resource.loader.cache=false
file.resource.loader.modificationCheckInterval	=1
velocimacro.library.autoreload=true

#macro
velocimacro.library=macro.vm
#velocimacro.library	=/WEB-INF/vm/macro.vm

#layout
#tools.view.servlet.layout.directory	=/WEB-INF/vm/layout/
#tools.view.servlet.error.template=/WEB-INF/vm/error.vm
#tools.view.servlet.layout.default.template=default.vm

runtime.log.logsystem.class=org.springframework.ui.velocity.CommonsLoggingLogSystem
runtime.log=com.sa
runtime.log.error.stacktrace=true
runtime.log.warn.stacktrace=true
runtime.log.info.stacktrace=false
runtime.log.invalid.reference=true

위의 velocimacro. library 설정 macro 는 classpath 에 놓 여 있 습 니 다. 다른 경로 가 있 으 면 velocimacro. library = / WEB - INF / vm / macro. vm 와 같은 이상 을 던 집 니 다.이것 은 내 가 배치 하 는 데 문제 가 있 는 지, 달인 을 지나 가서 구 해 달라 고 부탁 했다.
VelocityException: Velocimacro : Error using VM library : /WEB-INF/vm/macro.vm

 
물론 이 속성 들 은 spring - mvc. xml 에서 설정 할 수 있 습 니 다.
	<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
		<property name="resourceLoaderPath" value="/WEB-INF/vm"/>
		<property name="configLocation" value="classpath:velocity.properties"/>

		<!--
			<property name="velocityProperties">
				<props>
					<prop key="input.encoding">UTF-8</prop>
					<prop key="output.encoding">UTF-8</prop>
					<prop key="contentType">text/html;charset=UTF-8</prop>

					<prop key="file.resource.loader.cache">false</prop>
					<prop key="file.resource.loader.modificationCheckInterval">1</prop>
					<prop key="velocimacro.library.autoreload">true</prop>

					<prop key="velocimacro.library">macro.vm</prop>

					<prop key="runtime.log.logsystem.class">org.apache.velocity.runtime.log.SimpleLog4JLogSystem</prop>
					<prop key="runtime.log">com.sa</prop>
					<prop key="runtime.log.error.stacktrace">true</prop>
					<prop key="runtime.log.warn.stacktrace">true</prop>
					<prop key="runtime.log.info.stacktrace">false</prop>
					<prop key="runtime.log.invalid.reference">true</prop>
				</props>
			</property>
			-->
	</bean>

물론 layot 도 지원 합 니 다: 위의 해상도 기 는 수정 이 필요 합 니 다:
org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver

속성 증가:
<property name="layoutUrl" value="layout.vm"/>

 여기 서 주의해 야 할 것 은 layot. vm 과 layot. vm 에 관련 된 템 플 릿 파일, 예 를 들 어 head. vm, bottom. vm 등 은 classpath 경로 에 함께 놓 아야 합 니 다.그렇지 않 으 면 해당 템 플 릿 을 찾 을 수 없 는 이상 을 던 집 니 다.
 
 
3. velocity 의 보기 해석 기
	<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
		<property name="suffix" value=".vm"/>
		
		<!--   springMacro、  servlet    -->
		<property name="exposeSpringMacroHelpers" value="true"/>
		<property name="exposeRequestAttributes" value="true"/>
		<property name="exposeSessionAttributes" value="true"/>
		
		<property name="contentType" value="text/html;charset=UTF-8" />
		
		<!-- spring       -->
		<property name="dateToolAttribute" value="dateTool"/>
		
		<!-- velocity toolbox -->
		<property name="toolboxConfigLocation" value="/WEB-INF/vm/toolbox.xml"/>
	</bean>

 위의 velocity toolbox 설정 에서 toolbox. xml 을 다른 위치 에 두 면 NullPointer Exception 을 볼 수 있 습 니 다.
http://forum.springsource.org/showthread.php?30783-Exposing-Velocity-generic-tool-results-in-NullPointer
 
다음은 사용자 정의 toolbox. xml 입 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
	<tool>
		<key>dateUtil</key>
		<scope>application</scope>
		<class>com.sa.common.util.DateUtil</class>
	</tool>
</toolbox>
 
 
4. 테스트:
사용자 정의 매크로 와 toolbox 를 테스트 합 니 다.
macro 에 간단 한 테스트 를 썼 습 니 다:
#macro(test)
    nnnnnnnnnnnn
#end

com. sa. comon. util. Dateutil 에서 간단 한 테스트 방법 이 있 습 니 다.
    public static String test(String str){
        return "this is a test. hello "+str;
    }

테스트 vm 에서: index. vm
#test()
<br>
$!dateUtil.test("velocity")

결과:
 쓰다
nnnnnnnnnnnn
this is a test. hello velocity
 
 
5. 일부 이상 발생:
물론 위 에서 이미 몇 가지 말 을 했 지만 아래 에는 또 있다.
java.lang.NoSuchMethodError: org.springframework.core.GenericTypeResolver.resolveTypeA

이것 은 다른 버 전의 spring jar 가방 을 넣 었 습 니 다.보다
http://fedora-commons.1317035.n2.nabble.com/fcrepo-user-java-lang-NoSuchMethodError-org-springframework-core-GenericTypeResolver-resolveTypeArguh-td7002643.html
 
toolbox 를 도입 할 때 컴 파일 오류:
/java.lang.NoClassDefFoundError: org/apache/commons/digester/RuleSet

이것 은 매우 간단 하 잖 아 요. digester 의존 을 넣 었 지만 3.2 버 전 을 넣 기 시 작 했 습 니 다. 항상 잘못 보 고 했 습 니 다. 나중에 이 버 전의 가방 구조 가 달라 진 것 을 발 견 했 습 니 다. 아니면 바 뀌 었 습 니까?
		<dependency>
			<groupId>commons-digester</groupId>
			<artifactId>commons-digester</artifactId>
			<version>2.0</version>
		</dependency>

자, 지금 은 이 정도 입 니 다. 좀 더 공부 하고 기록 하 세 요.

좋은 웹페이지 즐겨찾기