`
jbm3072
  • 浏览: 209118 次
  • 性别: 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基础上的web框架

    这个框架是在学习Spring的时候,为了积累学习成果,自己搭建的,一般的系统开发也可以直接使用,包括一个系统开发的基础功能。 以下是当时自己开发时的日志,大致可以说明框架里已有功能 1.0.5 从web项目迁移成maven...

    springmvc demo

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发...

    SpringMVC学习指南.pdf

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

    Spring.MVC-A.Tutorial-Spring.MVC学习指南

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

    基于SpringMvc的云音乐网站

    比较全面,值得学习和下载。5分少了,满意请好评。 ## 配置 开发环境 Eclipse Java EE IDE for Web Developers 4.3.2 开发语言 Java 1.8 MVC框架 Spring 4.3.3 web服务器 Tomcat 开发系统 mac OSX Mysql数据库 ...

    spring-springMVC-mybatis项目

    本项目是用的spring springMVC myBatis框架,前段没用框架,只写了简单的页面效果,做增删查改 这是我系统学习所得,希望能对你有所帮助 项目部署: 1;导包,就是web-inf下lib,让后把这些选中,单击右键build ...

    Spring MVC Demo

    SpringMVC是一个项目团队非常喜欢的框架。 本工程主要是一个练手,里面对web.xml和applicationContext-base.xml有一个详细的说明。 &lt;servlet&gt; &lt;servlet-name&gt;Dispatcher &lt;servlet-class&gt;org.springframework.web....

    学习J2EE ( spring、springmvc、mybatis、hibernate )

    2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、...

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

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

    ssm框架思维导图.rar

    本文档压缩了SSM三大框架的学习思维导图,可以帮您更方便更高效的学习,资源制作过程相当繁琐,好资源且下且珍惜吧。 SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是...

    Spring MVC学习指南 第2版 高清版

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

    基于SSM的人才招聘网站(源码+部署说明+演示视频+源码介绍).zip

    本项目整合了Java Web开发中的三个核心框架:Spring、SpringMVC和MyBatis,为开发者提供了一个完整的解决方案。Spring:Spring是一个开源的Java企业级应用开发框架,它提供了一系列模块化的组件,如依赖注入、面向切面...

    Java项目源码_ssm_芝麻开门博客网.rar

    SSM芝麻开门博客网是一个基于Java技术栈的Web应用项目,采用Spring、SpringMVC和MyBatis三大框架进行开发。该项目源码丰富、结构清晰,适合作为学习和二次开发的优秀素材。 主要特点: 1. **技术全面**:项目涵盖...

    weixin128在线视频教育系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    采用SpringMVC作为Web层框架,简化了Controller的编写,提高了开发效率。 使用MyBatis作为持久层框架,实现了与数据库的高效交互,同时支持多种数据库类型。 引入了Redis作为缓存数据库,提高了系统的性能和响应速度...

    基础的java web项目,完成了应用骨架的搭建,提供了底层框架的支持

    (1)这是一个基础的java web项目,完成了应用骨架的搭建,提供了底层框架的支持,但里面的内容是空白的,可以在此基础上进行项目开发或用来学习。 (2)运行环境为:maven3.2 + jdk1.8 + tomcat8 + mysql5。 (3)mysql...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南.rar

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

    xmljava系统源码-learn:Spring+SpringMVC+MyBatis+Bootstrap+Vue开发在线学习系统

    使用的开发环境是以MyEclipse为开发环境,采用Tomcat服务器作为Web应用容器,并应用MySQL为系统的数据库管理。 在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,...

    weiit-frame:# JAVA极速开发框架[Weiit]

    JAVA极速开发框架[Weiit]Weiit是基于Java语言的极速web开发框架,其核心设计目标是开发Swift、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。Weiit适用于快速开发,轻应用型的应用开发,大大降低开发人员...

    Java项目源码_ssm_明日知道.rar

    2. Web层:采用SpringMVC框架进行开发,实现了简洁的Controller层和清晰的URL映射,提高了代码的可读性和可维护性。 3. 持久层:采用MyBatis框架进行数据库操作,支持自定义SQL语句和存储过程,提高了数据库操作的...

Global site tag (gtag.js) - Google Analytics