浏览 5178 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-31
以前一直是用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框架。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-31
超超
javaeye长度补丁 |
|
返回顶楼 | |
发表时间:2009-01-01
mayday85 写道 超超
javaeye长度补丁 。。。。。 |
|
返回顶楼 | |
发表时间:2009-01-02
不错不错,还有后续吗
|
|
返回顶楼 | |
发表时间:2009-01-03
jinwenhong 写道 不错不错,还有后续吗
呵呵,spring已经告一段落了,现在在看hibernate,后期要整合一个属于自己的mvc~ |
|
返回顶楼 | |
发表时间:2009-03-20
嘿嘿为什么不看看 spring anno mvc开发上很顺手!
|
|
返回顶楼 | |