论坛首页 Java企业应用论坛

spring in action学习笔记 6 spring的mvc框架

浏览 5178 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-31  
8.spring的MVC框架
     以前一直是用spring的mvc开发,但是是别人搭建的,自己也不是很懂,就在那用,也就是程序员最悲哀的事情,会用,不懂原理,一离开人家写的框架,自己就像不会编程似的,现在看了spring这本书,一下就明白了原来前辈们写的spring框架的东西,还是因为自己没去学习的缘故。
    我自己的这份总结写的很快,中间很多如acegi安全框架,RMI远程服务,还有企业级应用,这些我暂时都还用不上,所以就没去看。我认为spring最重要的就是装配bean,理解ioc,aop,以及它的MVC(当然你要喜欢这个MVC),总共5-6章知识就够了,现在就来写spring的mvc。
    要说spring的mvc框架,给从请求说起,当请求离开浏览器时,会带有用户提交的信息,那么请求的第一站就是spring的前端控制器---DispatcherServlet.
     1.DispatcherServlet,从名字可以看出,他自身应该不会处理请求,而是委托给系统中的其他模块进行真正的处理。没错,你没有看错,又是委托,spring中到处都是使用委托,它的aop,事务处理,现在的前端控制器都是如此。到达 DispatcherServlet后,它会根据一组规则,来确定这个请求有怎样的方式去找控制器对象(真正处理的那个bean)。这个规则就是HandlerMapping。
    2.HandlerMapping,共有4种,可以帮助 DispatcherServlet找到处理请求的正确控制器。处理器映射可以帮助DispatcherServlet找到处理请求的正确控制器
处理器映射
如何将请求映射到控制器
BeanNameUrlHandlerMappping
根据控制器的名字将控制器映射到URL
SimpleUrlHandlerMapping
用上下文配置文件中定义的属性集合将控制器映射到URL
ControllerCalssNameHandlerMapping
通过将控制器的类名作为URL的基础将控制器映射到URL
CommonsPathMapHandlerMapping
使用控制器代码中的元数据将控制映射到URL。元数据使用Jakarta Commons Attributes(http://jakarta.aqache.org/commons/attributes)定义

它的默认值是BeanNameUrlHandlerMappping,也就是说通过bean的名字来找真正的处理器。
现在已经找到了控制器Controller.
    3.Controller 在控制器上,请求卸载下它的负载,等待控制器处理这些信息,完成业务逻辑后,需要返回给用户并在浏览器中显示的信息。这些信息被称为模型,一般是在jsp上显示出来(用jstl),控制器一般只有很少的处理工作,它一般是用service层给它提供的服务,所以这里就用到了ioc,你怎么获得这个service层的服务呢?注入进来,获得。有了模型,给告诉它被发送到哪里显示啊,所以还有视图,控制器将模型和视图打包到一个对象里叫做ModelAndView。接着将ModelAndView发送回 DispatcherServlet。
    4.ModelAndView 它本身并不带有JSP的路径,而是只有视图的逻辑名,你可以想象成关键字。比如/WEB-INF/jsp/home.jsp。视图的逻辑名就是home,而/WEB-INF/jsp/和.jsp这2个信息, DispatcherServlet会要求一个视图解析器根据这2个信息来协助查找实际的jsp。
    5.请求工作基本完成了,将相应对象返回给浏览器。

配置 DispatcherServlet
    
<servlet>
        <servlet-name>Dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/myproject-spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>


其中 xxxx-spring-servlet.xml是你配置所有 Controller的地方。这里面要配置视图解析器
<bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass">
            <value>org.springframework.web.servlet.view.JstlView</value>
        </property>
        <property name="prefix">
            <value>/WEB-INF/view/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
        <property name="contentType">
            <value>text/html;charset=UTF-8</value>
        </property>
    </bean>

spring建议将配置文件分开配置,Controller在一个配置文件,dao和service也要分开,不过我自己觉得没必要,所以把dao和service配置在一起。
当然还要有
 <servlet-mapping>
        <servlet-name>Dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


配置上Controller依赖的dao和service
   
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/myproject-spring-ds.xml</param-value>
    </context-param>

其中 myproject-spring-ds.xml就是dao和service的配置文件。
最后还要配置一个上下文载入器,保证其他上下文文件都载入。
  
 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

这样web.xml中的配置文件就基本完成了,当然像日志啊,encodingFilter,hibernateFilter等,也要在这里配置,不细说了。
    写控制器的时候,你可以实现Controller接口,但是我认为比较好的方法是继承AbstractController,或者你可以自己再写一个核心控制器,来继承AbstractController,里面有你自己的方法。当然要根据实际情况来编写。
    spring的mvc,想要搞出一套自己用的爽的,要花很大功夫,比如Dao层可以自己写BaseDAOHibernate,来继承AbstractHibernateDAO,当然自己写个牛B的通用分页,也是很重要的。诸如此类的细节太多了。要慢慢完善自己的mvc框架。
   发表时间:2008-12-31  
超超

javaeye长度补丁
0 请登录后投票
   发表时间:2009-01-01  
mayday85 写道
超超

javaeye长度补丁

。。。。。
0 请登录后投票
   发表时间:2009-01-02  
不错不错,还有后续吗
0 请登录后投票
   发表时间:2009-01-03  
jinwenhong 写道
不错不错,还有后续吗

呵呵,spring已经告一段落了,现在在看hibernate,后期要整合一个属于自己的mvc~
0 请登录后投票
   发表时间:2009-03-20  
嘿嘿为什么不看看 spring anno mvc开发上很顺手!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics