總體圖表(參照stucts)
DispatcherServlet=ActionServlet
HandlerMapping=Struts-config.xml
Controller=Action
ModelAndView=mapping.findforward(string) 中的string;
ViewResolver=mapping.findforward(string) 中string的解釋器
特別注意:
1.在web.xml里面配置好
<servlet>
??? <servlet-name>springapp</servlet-name>
??? <servlet-class>org.springframework.web.servlet.DispatcherServlet
??? </servlet-class>
??? <load-on-startup>1</load-on-startup>
? </servlet>
?<servlet-mapping>
??? <servlet-name>springapp</servlet-name>
??? <url-pattern>*.do</url-pattern>
? </servlet-mapping>
不需要配置context-param
<context-param>
? <param-name>contextConfigLocation</param-name>
? <param-value>/WEB-INF/springapp-servlet.xml</param-value>
</context-param>
DispatcherServlet?能夠自動的到WEB-INF下面查找與他同名的后面接-servlet,.xml的配置文件。
(springapp-servlet.xml)
注意:DispatcherServlet?處理的跳轉必須要在工程名下面。例如:工程名為:SpringMvc.則Http://localhost:8080/SpringMvc/test.htm可以跳轉。
Http://localhost:8080/test.htm?不能跳轉
?詳細說明MultiActionController的配置吧:
首先在bean.xml里面:
<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName"><value>method</value> //相當于DispatchAction的method后面接需要觸發的方法
</property>
?
//另一個觸發方法的配置
//當提交coureList.htm時候觸發coursesUnsorted方法,當提交coursesSort.htm時候觸發coursesSortByDate方法
<property name="mapping">
? <props>
????? <prop key="/coureList.htm">coursesUnsorted</prop>
???? ?<prop key="/coursesSort.htm">coursesSortByDate</prop>
???</props>
</property>
</bean>
//默認方式頁面跳轉到Controller
<bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">
<property name="methodNameResolver">
<ref local="methodNameResolver"/>
</property>
</bean>
?
//SimpleUrlHandlerMapping頁面跳轉到Controller
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHand">
<property name="mapping">
<props>
<prop key="/listCourses.htm">listCourseController</prop>
<prop key="/register.htm">registerController</prop>
<props>
</props>
</property>
</bean>
配置呢就這么簡單。methodNameResolver指定了調用MultiActionController中方法的方式,例如,如果在你的MultiActionController中有如下方法:
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account)
{
}
那么要調用這個方法,你的JSP頁面的請求URL就應該這樣寫:
<form action="test.do?method=insertAccount">
</form>
至于綁定什么command和JSP是沒有關系的。你在MultiActionController中的方法簽名第三個參數是什么對象,Spring就會把request中參數的值綁定到方法簽名的第三個對象中。
例子我倒是沒有,最直接的辦法就是去看一下MultiActionController的源代碼,非常簡單拉,一看就明白了。
protectedfinal ModelAndView invokeNamedMethod(String methodName, HttpServletRequest request, HttpServletResponse response)throwsException
{
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
// If last parameter isn't of HttpSession type, it's a command.
// 在這里,Spring會判斷你的請求方法里面第三個參數的類型。如果第三個參數類型不是HttpSession,就認為是要綁定的command。
if(method.getParameterTypes().length >= 3 &&
!method.getParameterTypes()[method.getParameterTypes().length - 1].equals(HttpSession.class))
{
? ? // 根據類型利用反射產生Command對象
? ? Object command = newCommandObject(method.getParameterTypes()[method.getParameterTypes().length - 1]);
? ? params.add(command);
? ?// 綁定command對象
? ?bind(request, command);
}
// 最后通過反射去調用你的方法,也就是說,在執行你的方法時,command已
// 經幫你綁定好拉,你直接用就可以了。? ? ? ? ? ? ? ? ? ? ? ?
return(ModelAndView) method.invoke(this.delegate, params.toArray(newObject[params.size()]));
}
使用模板視圖
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/jsp</value></property>//前綴
<property name="suffix"><value>.jsp</value></property>//后綴
</bean>
posted on 2006-06-20 10:50
Dragonofson 閱讀(1633)
評論(0) 編輯 收藏 所屬分類:
Spring