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的工作原理,以及如何构建一个简单的Web应用。通过下载并研究提供的压缩包文件,你可以看到实际项目中的配置和代码结构,这对于加深理解非常有帮助。在...
总之,"springMVC框架学习备份"涵盖了SpringMVC的基础理论、工作流程、实践技巧以及源码分析,是全面学习和进阶SpringMVC的宝贵资源。无论你是初学者还是有经验的开发者,都可以从中受益匪浅。通过深入学习和实践,...
《跟开涛学SpringMVC(4.3)Controller接口控制器详解》是针对Java开发者的一份深入学习资料,主要探讨了SpringMVC框架中的Controller组件。SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求和响应。...
**SpringMVC 入门与框架搭建** SpringMVC 是 Spring 框架...随着对 SpringMVC 的深入学习,你可以了解到更多高级特性,如拦截器、异常处理、数据绑定、AOP 集成等,这些都能帮助你构建更高效、更健壮的 Web 应用程序。
总的来说,这个"springmvc web开发源码"项目展示了如何使用SpringMVC作为Web框架,结合MyBatis处理数据库操作,构建出一个完整的、功能完善的Web应用程序。通过深入学习和分析这些源码,开发者不仅可以掌握这两个...
这个"springmvc基础框架(有示例)"的压缩包应该包含了从创建项目、配置环境、编写 Controller、实现数据绑定到处理异常的完整示例,非常适合初学者进行学习和实践。通过这些实例,你可以深入理解 Spring MVC 的工作...
### SpringMVC框架学习指南:理解与应用 #### 引言 SpringMVC框架作为Spring框架的一个重要组成部分,为Web应用...希望本文能为初学者提供一份有价值的SpringMVC框架学习指南,帮助大家在Web开发的道路上更进一步。
在本课程"跟开涛学SpringMVC(4.6)Controller接"中,我们将深入探讨SpringMVC框架中的Controller接口控制器。这个部分是SpringMVC核心组件之一,用于处理HTTP请求并返回响应。Controller接口提供了将用户请求映射到...
【标题】:基于SpringMVC的web框架 ...通过这个基于SpringMVC的web框架,开发者可以深入学习如何利用Spring的IoC(控制反转)和AOP(面向切面编程)特性,以及Maven的强大功能,来构建现代、高效的Web应用。
这个“springMVC初始框架模板”是为开发者提供了一个快速启动SpringMVC项目的基础结构,方便进行测试和学习。 在SpringMVC框架中,主要有以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器...
SpringMVC是Spring框架的一个模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够清晰地分离业务逻辑、数据处理和用户界面。下面将详细介绍SpringMVC的核心概念、工作流程、配置...
SpringMvc是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个“SpringMvc完美框架”可能是聪聪工作室为了简化开发流程、提高开发效率而封装的一套完整的解决方案。下面,...
SpringMVC是Spring框架的一部分,专门用于处理Web应用程序的请求-响应模型。它是一个轻量级的、基于注解的模型-视图-控制器(MVC)架构,...这个完整的框架搭建实例是学习和实践SpringMVC与Hibernate集成的一个好起点。
SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个框架简化了开发过程,提供了丰富的功能,包括请求处理、数据绑定、异常处理和视图渲染等。对于初学者来说,理解并掌握...
SpringMvc和iBatis是Java开发中常用的两个框架,它们在Web应用开发中扮演着重要的角色。SpringMvc作为Spring框架的一部分,主要负责处理HTTP请求,实现Model-View-Controller(MVC)的设计模式,而iBatis则是一个轻...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,专门用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。在这个名为 "springmvc_controller_01" 的资源包中,我们很可能会...
SpringMVC是Spring框架的一部分,专门用于构建Web应用的MVC框架。它负责处理HTTP请求,将请求分发到对应的控制器,控制器处理业务逻辑后,通过模型将数据返回,最后由视图渲染并展示给用户。SpringMVC的设计模式使得...
在SpringMVC框架的学习中,注解驱动的控制器是其核心特性之一,极大地简化了Web应用的开发。本文将深入探讨SpringMVC中的注解使用,以及如何通过它们实现URL自定义和请求参数自动绑定。 首先,`@Controller`注解是...