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

SpringMVC web框架学习 Controller 分析

阅读更多

org.springframework.web.servlet.mvc.AbstractController (implements org.springframework.web.servlet.mvc.Controller)

Spring MVC框架中的Controller对请求进行处理:所有的Controller都实现接口Controller:

public interface Controller { 

    /**
     * Process the request and return a ModelAndView object which the DispatcherServlet
     * will render. A <code>null</code> return value is not an error: It indicates that
     * this object completed request processing itself, thus there is no ModelAndView
     * to render.
     * @param request current HTTP request
     * @param response current HTTP response
     * @return a ModelAndView to render, or <code>null</code> if handled directly
     * @throws Exception in case of errors
     */
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; 

}
上面的doc表明Controller返回的modelandview可以使空,表明请求都是该函数中处理完成了,不需要modeland来进行渲染。
 
在继续之前先介绍一个有用的工具类:WebUtils。用这个可以简化session,request的处理。具体的内容可以参考文档。
 
Controller的第一个实现是:AbstractController。他是一个Abstract类,除了实现了Controller接口,它还继承了WebContentGenerator。
 
WebContentGenerator的作用是什么?参考文档可以发现,该类主要对Cache和Session进行管理。
 
cacheSeconds 指定内容缓存的时间,默认为1
requireSession 是否需要会话,默认支持
supportedMethods 支持的方法,默认是GET\post\Head
useCacheControlHeader 指定是否使用http1.1的cache控制头信息,默认使用
useCacheControlNoStore 指定是否设置http1.1的cache控制头信息为no-store。默认使用
useExpiresHeader 指定是否使用http1.0的expire头信息。默认使用
用户可以对这些参数进行测试,cache和expire信息涉及到了http协议信息,更多信息可以参考http协议文档。这里不再说明。
 
再看AbstractController的代码:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {

// Delegate to WebContentGenerator for checking and preparing.
checkAndPrepare(request, response, this instanceof LastModified);

// Execute handleRequestInternal in synchronized block if required.
if (this.synchronizeOnSession) {
HttpSession session = request.getSession(false);
if (session != null) {
Object mutex = WebUtils.getSessionMutex(session);
synchronized (mutex) {
return handleRequestInternal(request, response);
}
}
}
return handleRequestInternal(request, response);
}
checkandPrepare的目的就是使用用于进行的配置来对request进行预处理和准备。
他会检查支持的方法,和会话,然后应用cache设置。
如果需要session同步,就进行同步处理。session同步应用于有session的情况下。如果没有session,session同步是没有用的。
AbstractController会调用handleRequestInternal方法进行处理,继承AbstractController的类需要实现该方法。
下面我们再看看AbstractUrlViewController 的代码实现和文档,先看handleRequestInternal的实现:

 
/**
* Retrieves the URL path to use for lookup and delegates to
* {@link #getViewNameForRequest}.
*/
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
String viewName = getViewNameForRequest(request);
if (logger.isDebugEnabled()) {
logger.debug("Returning view name '" + viewName + "' for lookup path [" + lookupPath + "]");
}
return new ModelAndView(viewName);
}

可以看到,它使用了getViewNameForRequest获取需要的viewName。而getViewNameForRequest是一个抽象函数,需要子类实现。lookupPath就是我们请求的URL中的一部分。如我们使用UrlFilenameViewController来进行如下的配置:
<bean name="/index.do" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"></bean>、
09-11-25 11:56:06 - DEBUG [http-8200-1] - Returning view name 'index' for lookup path [/index.do]
该Controller对/index.do解析成index,然后再通过viewResolver对index进行扩展为/jsp/index.jsp。从而找到该页面。
可以看到这个类的主要是用于对url进行解析,然后转到合适的页面上,而在转到这个页面之前不需要进行特别的处理。
明白了该类的作用自然也就知道了UrlFilenameViewController的作用。这里不再进行详细分析。
 
 
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>
分享到:
评论

相关推荐

    纯springMVC基础框架

    这个“纯springMVC基础框架”适合初学者学习和理解SpringMVC的工作原理,以及如何构建一个简单的Web应用。通过下载并研究提供的压缩包文件,你可以看到实际项目中的配置和代码结构,这对于加深理解非常有帮助。在...

    springMVC框架学习备份

    总之,"springMVC框架学习备份"涵盖了SpringMVC的基础理论、工作流程、实践技巧以及源码分析,是全面学习和进阶SpringMVC的宝贵资源。无论你是初学者还是有经验的开发者,都可以从中受益匪浅。通过深入学习和实践,...

    跟开涛学SpringMVC(4.3)Controller接

    《跟开涛学SpringMVC(4.3)Controller接口控制器详解》是针对Java开发者的一份深入学习资料,主要探讨了SpringMVC框架中的Controller组件。SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求和响应。...

    SpringMVC 入门 框架搭建demo,

    **SpringMVC 入门与框架搭建** SpringMVC 是 Spring 框架...随着对 SpringMVC 的深入学习,你可以了解到更多高级特性,如拦截器、异常处理、数据绑定、AOP 集成等,这些都能帮助你构建更高效、更健壮的 Web 应用程序。

    springmvc web开发源码

    总的来说,这个"springmvc web开发源码"项目展示了如何使用SpringMVC作为Web框架,结合MyBatis处理数据库操作,构建出一个完整的、功能完善的Web应用程序。通过深入学习和分析这些源码,开发者不仅可以掌握这两个...

    springmvc基础框架(有示例)

    这个"springmvc基础框架(有示例)"的压缩包应该包含了从创建项目、配置环境、编写 Controller、实现数据绑定到处理异常的完整示例,非常适合初学者进行学习和实践。通过这些实例,你可以深入理解 Spring MVC 的工作...

    SpringMVC框架学习指南.pdf

    ### SpringMVC框架学习指南:理解与应用 #### 引言 SpringMVC框架作为Spring框架的一个重要组成部分,为Web应用...希望本文能为初学者提供一份有价值的SpringMVC框架学习指南,帮助大家在Web开发的道路上更进一步。

    跟开涛学SpringMVC(4.6)Controller接

    在本课程"跟开涛学SpringMVC(4.6)Controller接"中,我们将深入探讨SpringMVC框架中的Controller接口控制器。这个部分是SpringMVC核心组件之一,用于处理HTTP请求并返回响应。Controller接口提供了将用户请求映射到...

    一个基于SpringMVC的web框架

    【标题】:基于SpringMVC的web框架 ...通过这个基于SpringMVC的web框架,开发者可以深入学习如何利用Spring的IoC(控制反转)和AOP(面向切面编程)特性,以及Maven的强大功能,来构建现代、高效的Web应用。

    springMVC初始框架模板

    这个“springMVC初始框架模板”是为开发者提供了一个快速启动SpringMVC项目的基础结构,方便进行测试和学习。 在SpringMVC框架中,主要有以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器...

    SpringMVC框架学习指南

    SpringMVC是Spring框架的一个模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够清晰地分离业务逻辑、数据处理和用户界面。下面将详细介绍SpringMVC的核心概念、工作流程、配置...

    SpringMvc完美框架

    SpringMvc是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个“SpringMvc完美框架”可能是聪聪工作室为了简化开发流程、提高开发效率而封装的一套完整的解决方案。下面,...

    SpringMVC完整框架搭建(springMVC+Hibernate)

    SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。它是一个轻量级的、基于注解的模型-视图-控制器(MVC)架构,...这个完整的框架搭建实例是学习和实践SpringMVC与Hibernate集成的一个好起点。

    springMVC基础框架搭建

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个框架简化了开发过程,提供了丰富的功能,包括请求处理、数据绑定、异常处理和视图渲染等。对于初学者来说,理解并掌握...

    SpringMvc+Ibatis框架

    SpringMvc和iBatis是Java开发中常用的两个框架,它们在Web应用开发中扮演着重要的角色。SpringMvc作为Spring框架的一部分,主要负责处理HTTP请求,实现Model-View-Controller(MVC)的设计模式,而iBatis则是一个轻...

    springmvc_controller_01

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,专门用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。在这个名为 "springmvc_controller_01" 的资源包中,我们很可能会...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    SpringMVC是Spring框架的一部分,专门用于构建Web应用的MVC框架。它负责处理HTTP请求,将请求分发到对应的控制器,控制器处理业务逻辑后,通过模型将数据返回,最后由视图渲染并展示给用户。SpringMVC的设计模式使得...

    SpringMVC框架学习指南.doc

    在SpringMVC框架的学习中,注解驱动的控制器是其核心特性之一,极大地简化了Web应用的开发。本文将深入探讨SpringMVC中的注解使用,以及如何通过它们实现URL自定义和请求参数自动绑定。 首先,`@Controller`注解是...

Global site tag (gtag.js) - Google Analytics