`
tjuximo
  • 浏览: 50599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringMVC学习(二)

阅读更多
今天又看了一点儿SpringMVC的东东,明天就要开始百阿的培训了,赶紧记下来,要不又都忘了,呵呵~~

如果在项目中启用Log4J呢,需要你的log4j.properties文件,当然了,要配置一下才行啊,要不Spring容器怎么知道去哪里找log4j.properties啊,呵呵,那只需要在web.xml中配置一下,哈哈,如下:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
这样就行啦~~~

接下来咱们再来说一下控制器、处理器映射和视图解析器的高级点儿的东东,哈哈~~

先来回顾一下,咱们已经知道,Controller接口是控制器的接口,它的所有实现类都要实现一个叫做handleRequest的方法,默认呢,进入Controller的时候就会调用它的handleRequest方法,对数据进行处理,并返回一个ModelAndView对象。如果像提交表单类的操作,咱们需要将Request参数和咱们的类对象进行绑定,那就需要Command Controller啦。那现在Controller返回了一个带名字的ModelAndView对象,根据ViewResolver的配置,它就能去找到合适的页面解析后呈现给客户端,哈~~~大致过程明白了吧,呵呵。

但是要是对于每个请求都写一个Controller,那样多麻烦啊,唉呀,不好不好,要是能够把一类操作都写在一个类里多好啊,呵呵,别急,SpringMVC有实现的噢~~~这个Controller就是MultiActionController,Spring2.5参考手册中是这样写它的,“它可以定义页面请求到控制器方法名的映射, 然后在处理相应请求时调用该方法。”所以如果有一些Controller有公用方法啊,或是处理相关逻辑啊什么的,就可以写到一个MultiActionController里,但是如果逻辑比较复杂或是各个处理关系不大的话,不建议使用噢~~~
一般来讲,使用MultiActionController有两种方式,一种呢就是继承MultiActionController,另一种就是给它指定一个委托对象,当有请求来的时候呢,实际上是去调用这个委托对象里的方法,哈哈。有点晕吧,是不是很疑问这一个类里这么多处理请求的方法,Spring怎么根据请求去调用正确的方法来呢,哈哈,其实呢,咱们需要MethodNameResolver来对请求进行解析,然后根据解析出来的参数去调用合适的方法。那先说说对于MultiActionController咱们该怎么用,呵呵。
对于咱们自己的MultiActionController的方法,咱们有个规矩,就是要符合这样的格式:public [ModelAndView | Map | void] anyMeaningfulName(HttpServletRequest, HttpServletResponse [,HttpSession] [,AnyObject])
返回类型呢,当然最好就是ModelAndView啦,呵呵,这样跟咱们之前的Controller一样了,不多说。要是返回值是void呢,就是直接往客户端写response了,就不用后面的视图解析器了,呵呵,这个也不难理解,那如果返回值是Map呢,视图解析器就从请求中抽取视图名,而返回数据将被放入model,也就是说,根据请求的URL找到页面,而Map里封装的呢就是咱们要的数据啦,呵呵~~还需要注意的是,函数的参数,HttpSession和AnyObject都是可选的,HttpSession如果有的话,必须是在第三个位置上,一定噢~~
好啦,那现在MultiActionController写好了,那MethodNameResolver呢?哈哈,Spring也有很多实现啦,默认是使用InternalPathMethodNameResolver,规则就是如果你的请求url为http://localhost:8080/springmvc/test.do,那么就会调用test方法啦,呵呵。有一种实现是ParameterMethodNameResolver,它呢是根据你的url参数进行方法匹配的,比如说url为http://localhost:8080/springmvc/index.do?method=test,那他就获取method参数值,也就是test,调用test方法,具体呢,咱拿个例子来说~~
<bean  class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
    <property name="methodNameResolver">
   <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
            <property name="paramName" value="method"/>
        </bean>
    </property>
    <property name="delegate">
        <bean class="com.springmvc.Delegate "/>
    </property>
</bean>

public class Delegate {
    public ModelAndView test(HttpServletRequest req, HttpServletResponse resp) {
        return new ModelAndView("index", "date", new Long(System.currentTimeMillis()));
    }
}
这样呢,对于http://localhost:8080/springmvc/index.do?method=test的请求,就会调用这个test方法啦,还有啊,那个参数名并不是定死的是method的啊,是可以配置的,你也应该看到了,在配置MethodNameResolver的时候有个属性是paramName,哈哈~~
还有一种实现呢,是PropertiesMethodNameResolver,它可以完成与我们定义的方法的任意数量的URL的匹配,不多说,咱还是看例子~~
<bean id="propsResolver"
      class="org....mvc.multiaction.PropertiesMethodNameResolver">
    <property name="mappings">
        <value>
/index/welcome.html=test
/**/notwelcome.html=nottest
/*/user?.html=user
        </value>
    </property>
</bean>
<bean id="paramMultiController" class="org....mvc.multiaction.MultiActionController">
    <property name="methodNameResolver" ref="propsResolver"/>
    <property name="delegate">
        <bean class=" com.springmvc.Delegate "/>
    </property>
</bean>
看吧,很简单吧,呵呵, 直接将请求要调用的方法名和请求映射到一块儿了,哈哈,牛叉!!!

然后再看看处理器映射吧,它呢,是把DispatcherServlet转发过来的请求进行处理,并调用相应的Controller进行处理的,那它是怎么处理请求的呢?拦截器呗,哈哈~~
AbstractHandlerMapping及其子类都有一个叫做interceptors的属性,可以通过它来注入要注入的拦截器,拦截器的实现都要继承org.springframework.web.servlet包中的HandlerInterceptor接口。 这个接口定义了三个方法,一个在处理器执行前被调用,一个在处理器执行后被调用,另一个在整个请求处理完后调用。 这三个方法提供你足够的灵活度做任何处理前后的操作。
preHandle(..)方法有一个boolean返回值。 使用这个值,可以调整执行链的行为。 当返回true时,处理器执行链将继续执行,当返回false时,DispatcherServlet认为该拦截器已经处理完了请求(比如显示正确的视图),而不继续执行执行链中的其它拦截器和处理器。

嗯,接下来,咱们看看本地化解析器,i18n嘛,呵呵~~
当收到请求时,DispatcherServlet查找一个本地化解析器,如果找到,就使用它设置本地化信息。 通过RequestContext.getLocale()方法,总可以获取由本地化解析器解析的客户端的本地化信息。 可以通过在应用上下文中配置得到启用,呵呵,先来看一些实现类~~
AcceptHeaderLocaleResolver,这个本地化解析器检查请求中客户端浏览器发送的accept-language头信息, 通常这个HTTP Header包含客户端操作系统的本地化信息。
CookieLocaleResolver,这个本地化解析器检查客户端中的Cookie是否包含本地化信息。 如果有的话,就使用。当配置这个解析器的时候,可以指定cookie名,以及cookie的最长生存期(Max Age)。 下面这个例子定义了一个CookieLocaleResolver。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="cookieName" value="clientlanguage"/>
    <property name="cookieMaxAge" value="100000">
</bean>
SessionLocaleResolver,允许从用户请求相关的session中获取本地化信息。

嗯嗯,差不多了,哈哈,咱们再进一步吧~~~

不管说Ruby还是Python,这些发展很迅速的语言都有个优点就是约定优于配置,就是说,咱们先约定好规则,这样就省去了挨个配置的麻烦,嗯嗯,SpringMVC也有实现噢~~
原来咱们需要配置handlerMapping,容器才知道请求应该让哪个Controller去处理,哈,现在呢,有ControllerClassNameHandlerMapping啦,就不需要去配置根据挨个请求去配置handlerMapping啦,比如说有个叫testController的Controller,所有对test.do的请求都会调用这个请求,很强悍吧~~
还有就是咱们Controller里,一般要返回一个ModelAndView,因为它是一个Map实现,所以都是Key-Value对应的,现在呢,咱们不用显示的给它名字了,它自己会处理,比如有个User类型的对象,它默认的名字就是user,不过在加入一个Set、List或者对象数组之后, 生成名称的策略是深入这个集合,取出集合中第一个对象的简短类名,并使用这个名称并在后面加上List。比如是ArrayList<User> users,默认是解析为userList的~~
RequestToViewNameTranslator接口的功能是当没有显式的提供这样一个逻辑视图名称的时候, 确定一个逻辑的View名称。 这个接口只有一个实现,叫做 DefaultRequestToViewNameTranslator。 默认就是这样处理的啦,比如在registerController里返回的ModelAndView木有名字,那怎么办呢?就返回register算啦~~~~

,那现在呢,咱们再进一步,咱们看注解驱动滴开发,嘿嘿~~配置更少了哈~~~

Controller的注解呢,是在Controller类名的前面加上@Controller注解,这样呢,就认为这是一个Controller实现啦,在其类前或是实现方法前加上@RequestMapping(“/test.do”)注解呢,那就能处理“/test.do”请求啦~~那对于来的请求参数怎么办呢?哈哈,有@RequestParam注解啦,现在咱来看个例子,呵呵
@Controller
Public Class TestController{
@Autowired
Public TestController(){
}
@RequestMapping(“/test.do”)
Public ModelAndView test(@RequestParam(“paramId”) int id){
//do something with the id and return a ModelAndView~~
}
}
哈,还有个问题,参数咱可以获取了,那怎么绑定到一个目标对象上呢,嘿嘿,还有一招,就是@ ModelAttribute 注解,使用方式呢和@RequestParam差不多,例如Public ModelAndView test(@ModelAttribute(“user”)User user){
//do something with the user and return a ModelAndView~~
}

哎呀哎呀,SpringMVC太强大啦,看看人家这设计,皑皑,葱白啊~~~~~~~~
1
1
分享到:
评论
1 楼 dc1357 2012-09-01  
怎一个萌字了得

相关推荐

    超级详细SpringMVC学习资料

    本资料包包含丰富的SpringMVC学习资源,提供了代码示例和详细介绍,对于深入理解和掌握SpringMVC非常有帮助。 一、SpringMVC基础 SpringMVC的核心组件包括DispatcherServlet(前端控制器)、Controller(控制器)、...

    springMVC学习

    二、SpringMVC 框架的特点 SpringMVC 框架有以下特点: * 清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象;分发器、处理器映射和视图解析器等 * 直接将框架类和应用类都作为 JavaBean 配置,包括...

    SpringMVC学习指南

    SpringMVC是Spring框架的一个重要模块,用于构建Web应用程序的后端控制器。它是一个轻量级的MVC..."SpringMVC学习指南"这个压缩包中的PDF文档,很可能会涵盖这些内容的详细讲解,是学习和提升SpringMVC技能的好资源。

    springMVC 学习参考第二版本 数据库

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。在本文中,我们将深入探讨SpringMVC与MongoDB数据库的集成,以及...不断学习和实践,你将能够更好地掌握这一强大的技术组合。

    springmvc学习第一天

    #### 二、SpringMVC框架原理 SpringMVC的核心原理主要包括以下几个组件: 1. **前端控制器DispatcherServlet**:它是整个流程的入口,用于接收HTTP请求,并负责分发给其他组件处理。 2. **处理器映射器...

    SpringMVC学习课堂笔记

    ### SpringMVC学习课堂笔记知识点总结 #### 一、SpringMVC基础知识 ##### 1.1 什么是SpringMVC? SpringMVC是Spring框架的一部分,主要用于构建Web应用程序。它遵循了MVC(Model-View-Controller)设计模式,提供...

    SpringMVC学习指南(第二版文字版)

    Spring MVC 是Spring 框架中用于Web 应用快速开发的一个模块,其中的MVC 是 Model-View-Controller 的缩写。作为当今业界最主流的Web 开发框架,Spring MVC 已经成为 当前最热门的开发技能,同时也广泛用于桌面开发...

    SpringMVC学习笔记.zip

    SpringMVC是Java web开发中一个非常重要的框架,它基于模型-视图-控制器(Model-View-Controller)设计模式...这份“SpringMVC学习笔记”包括了从基础到进阶的全面内容,旨在帮助读者从零开始掌握SpringMVC的各个方面。

    springmvc-学习指南(第二版)源码

    在"springmvc-学习指南(第二版)源码"中,你可以找到关于Spring MVC的详细示例和代码实现,这些资源对于深入理解和学习该框架非常有帮助。 在"描述"中提到,这个源码包含书中的各种实例,可以在Spring Tool Suite ...

    SpringMVC 学习笔记一

    ### 二、SpringMVC 核心组件 1. **DispatcherServlet**:作为SpringMVC的前端控制器,负责接收HTTP请求,根据请求信息找到合适的处理器,并调用处理器执行。 2. **HandlerMapping**:处理器映射器,用于将请求URL...

    springMVC 学习参考第二版

    在“springMVC 学习参考第二版”中,我们可以深入学习以下几个关键知识点: 1. **配置Spring MVC**:首先,我们需要配置Spring MVC的DispatcherServlet,它作为应用程序的前端控制器,接收HTTP请求并分发到合适的...

    SpringMVC学习笔记整合搭建框架

    第二天 1、高级参数绑定 a)数组类型的参数绑定 b)List类型的绑定 2、@RequestMapping注解的使用 3、Controller方法返回值 4、SpringMVC中异常处理 5、图片上传处理 6、Json数据交互 7、SpringMVC实现RESTful 8、拦截...

    mybatis,springmvc学习笔记

    【标题】"mybatis,springmvc学习笔记"涵盖了两个核心的Java Web开发框架:MyBatis和Spring MVC。这两个框架在现代企业级应用中扮演着重要角色,它们各自解决了不同的问题,但通常会结合使用以构建高效、灵活的后端...

    黑马程序员SpringMVC课堂笔记

    《黑马程序员SpringMVC课堂笔记》是一份详细记录了SpringMVC框架学习过程的资料,主要针对Java EE开发者,特别是那些希望通过黑马程序员的教程来提升自己SpringMVC技能的学员。SpringMVC作为Spring框架的重要组成...

    SpringMvc学习

    《SpringMvc 学习深度解析》 SpringMvc 是 Spring 框架的重要组成部分,它是一个基于 Model-View-Controller(MVC)设计模式的轻量级 Web 开发框架。SpringMvc 的核心目标是简化 Web 应用的开发,提供一个灵活、可...

    Springmvc第二天

    在Spring MVC的学习过程中,第二天通常会深入探讨框架的核心特性,以增强对Web应用程序开发的理解。以下是对标题和描述中涉及的知识点的详细说明: 1. **Springmvc数据响应**:在Spring MVC中,数据响应主要涉及到...

    springMVC学习笔记

    ### SpringMVC学习笔记 #### 一、SpringMVC概述 **1.1 什么是SpringMVC** SpringMVC作为Spring Framework的一个重要组成部分,主要针对Web应用开发提供了一个功能全面的MVC(Model-View-Controller)框架。它是...

    可二次开发springmvc实现登陆

    在这个"可二次开发springmvc实现登陆"的主题中,我们将深入探讨如何利用Spring MVC来实现一个登录功能,以及其背后的逻辑思路和代码实现。 首先,登录功能的核心在于验证用户输入的身份信息(通常为用户名和密码)...

    springMVC hessian

    SpringMVC 和 Hessian 是两种在 Java 开发中常见的技术,它们在构建分布式系统时扮演着重要角色。SpringMVC 是 Spring 框架的一部分,...通过学习和实践,你不仅可以掌握这两种技术,还能深入了解分布式系统的构建。

Global site tag (gtag.js) - Google Analytics