spring mvc 之 servlet.xml

最近在研究springmvc,于是乎把看到的相关文章贴来,没事看一看,转自http://code.google.com/p/simplejee/source/browse/trunk/simplejee/WebContent/WEB-INF/springmvc-servlet.xml?r=46

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!--struts1的action的方法是返回ActionForward,找到相应的JSP,

而spring是根据controller的方法返回的ModelAndView对象,找到相应的JSP

前者actionForward对象是调用mapping对象,和struts-config.xml里的actionForward的配置对应起来的

而springmvc是根据ModelAndView和viewResolver来决定的,

不同的viewResolver有不同的决定方法。

这里的逻辑是这样,比如你返回的ModelAndView是这么生成的newModelAndView("hello")

那么这里的viewResolver,就是去找prefix+"hello"+suffix,也就是

/springmvc/hello.jsp

InternalResourceViewResolver

AconveniencesubclassofUrlBasedViewResolverthatsupports

InternalResourceView(i.e.ServletsandJSPs),andsubclassessuchas

JstlViewandTilesView.Theviewclassforallviewsgeneratedbythis

resolvercanbespecifiedviasetViewClass(..).SeetheJavadocsfor

theUrlBasedViewResolverclassfordetails.

-->

<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="prefix"value="/springmvc/"/>

<propertyname="suffix"value=".jsp"/>

</bean>

<!--这是urlMapping

意思就是说什么请求由哪个controller来处理

-->

<beanid="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<propertyname="mappings">

<props>

<propkey="/hello.spring">helloController</prop>

</props>

</property>

</bean>

<!--这里定义了一个controller,就是一个实现了Controller接口的普通类-->

<beanid="helloController"class="com.yuqiaotech.simplejee.spring.springmvc.HelloController">

<!--

<propertyname="helloManager"ref="helloManager"/>

-->

</bean>

<!--BeanNameUrlHandlerMapping顾名思义,是根据bean的name来决定某个url应该由哪个Contrlloer的bean来处理的

除此之外,如下所示你还可以添加拦截器,以便在Controller处理请求之前和之后做一些预处理和善后处理。

只要是实现了HandlerMapping的bean,spring都会用来做url影射,但如果两个HandlerMapping都能解析

某个url就出现问题了,所以常用的HandlerMapping还实现了Ordered接口。用来决定其优先顺序。

-->

<beanid="handlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

<propertyname="order"value="1"/><!---->

<propertyname="interceptors">

<list>

<refbean="authInterceptor"/>

</list>

</property>

</bean>

<!--拦截器-->

<beanid="authInterceptor"class="com.yuqiaotech.simplejee.spring.springmvc.AuthInterceptor">

<propertyname="redirectTo"value="/unAuth.html"/>

</bean>

<!--以下为SimpleFormController的例子

注意的是当你访问/login.spring的时候,onSubmit方法没有被执行,

而是在你点击了提交按钮后onSubmit方法才被执行的,另外是如果你把login.jsp里的form中的method去掉的话,

即便点击提交按钮onSubmit方法也不会被调用。

-->

<beanname="/login.spring"

class="com.yuqiaotech.simplejee.spring.springmvc.LoginController">

<propertyname="commandClass">

<value>com.yuqiaotech.simplejee.hibernate.model.User</value>

</property>

<propertyname="formView">

<value>login</value>

</property>

<propertyname="successView">

<value>redirect:/index.html</value><!--注意这里的redirect方式-->

</property>

<propertyname="jdbcTemplate"ref="jdbcTemplate"/><!--注入了一个jdbcTemplate对象-->

</bean>

<!---->

<beanid="methodNameResolver"class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">

<propertyname="paramName">

<value>method</value>

</property>

<propertyname="defaultMethodName">

<value>list</value>

</property>

</bean>

<beanname="/userAdmin.spring"

class="com.yuqiaotech.simplejee.spring.springmvc.UserAdminController">

<propertyname="methodNameResolver"ref="methodNameResolver"/>

<propertyname="jdbcTemplate"ref="jdbcTemplate"/>

<propertyname="dataSource"ref="dataSource"/>

</bean>

<!--最开始的例子我是如下来写的,但对于User里的birthday属性,没办法处理

因为除了重写initBinder方法似乎无法为springmvc指定定制的CustomEditor,只能写一个

Controller继承MultiActionController,然后重写initBinder了。

当然也可以写个MultiActionController的子类来替换下面这个配置里的MultiActionController,

并保持delegate方式。

spring有个CustomEditorConfigurer可以添加自定义的CustomEditor,但只在ApplicationContext

范围内有效,就是说在<propertyname="birthday"value="2009-01-01"/>

这种场合才能使用。

还有个办法就是在User类的包里添加一个UserPropertyEditorextendsPropertyEditorSupport。

但像日期转换这种通用操作而给User添加一个PropertyEditor类,似乎不太好。

-->

<!--<beanname="/userAdmin.spring"-->

<!--class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">-->

<!--<propertyname="methodNameResolver"ref="methodNameResolver"/>-->

<!--<propertyname="delegate">-->

<!--<beanclass="com.yuqiaotech.simplejee.spring.springmvc.UserAdminController">-->

<!--<propertyname="jdbcTemplate"ref="jdbcTemplate"/>-->

<!--<propertyname="dataSource"ref="dataSource"/>-->

<!--</bean>-->

<!--</property>-->

<!--</bean>-->

<!--这种配置方法把methodNameResolver直接定义在里面了,这种方式有点类似匿名类的用法

这是spring里的标准用法,和MultiActionController没有特定关系。

-->

<!--<beanid="paramMultiController"-->

<!--class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">-->

<!--<propertyname="methodNameResolver">-->

<!--<bean-->

<!--class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">-->

<!--<propertyname="paramName"value="method"/>-->

<!--</bean>-->

<!--</property>-->

<!--<propertyname="delegate">-->

<!--<beanclass="com.yuqiaotech.simplejee.spring.springmvc.StudentController"/>-->

<!--</property>-->

<!--</bean>-->

<beanname="/chart.spring"class="com.yuqiaotech.simplejee.spring.springmvc.ChartController">

</bean>

<beanid="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource">

<propertyname="basename"value="messages"/>

</bean>

</beans>

相关推荐