随笔-13  评论-9  文章-9  trackbacks-0

总体图表(参照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 阅读(1597) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航: