`

Spring3MVC 学习笔记 二

 
阅读更多

   使用 继承 AbstractController 重写 Spring3MVC 学习笔记 一 内的Controller  处理器/页面控制器


HelloWorldController.java 

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldController extends AbstractController{

//	public ModelAndView handleRequest(HttpServletRequest arg0,
//			HttpServletResponse arg1) throws Exception {
//		
//		//1、收集参数、验证参数
//		//2、绑定参数到命令对象
//		//3、将命令对象传入业务对象进行业务处理
//		//4、选择下一个页面
//		ModelAndView mv = new ModelAndView();
//		//添加模型数据可以是任意的POJO对象
//		mv.addObject("message", "Hello World!");
//		//设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
//		mv.setViewName("hello");
//		return mv;
//		
//	}

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		//1、收集参数、验证参数
		//2、绑定参数到命令对象
		//3、将命令对象传入业务对象进行业务处理
		//4、选择下一个页面
		ModelAndView mv = new ModelAndView();
		//添加模型数据可以是任意的POJO对象
		mv.addObject("message", "Hello World!");
		//设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
		mv.setViewName("hello");
		return mv;
	}

}

 

AbstractController 该抽象类实现了Controller,并继承了WebContentGenerator


该类有如下属性:
boolean synchronizeOnSession = false:表示该控制器是否在执行时同步session,从而保证该会话的用户串行访问该控
制器。

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    //委托给WebContentGenerator 进行缓存控制
    checkAndPrepare(request, response, this instanceof LastModified);
    //当前会话是否应串行化访问.
    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);
}

 
可以看出AbstractController 实现了一些特殊功能,如继承了WebContentGenerator 缓存控制功能,并提供了可选的会话
的串行化访问功能。而且提供了handleRequestInternal 方法,因此我们应该在具体的控制器类中实现
handleRequestInternal方法,而不再是handleRequest


WebContentGenerator

用于提供如浏览器缓存控制、是否必须有session 开启、支持的请求方法类型(GET、POST 等)等,该类主要有如下
属性:
Set<String> supportedMethods:设置支持的请求方法类型,默认支持“GET”、“POST”、“HEAD”,如果我们想支持
“PUT”,则可以加入该集合“PUT”。
boolean requireSession = false:是否当前请求必须有session,如果此属性为true,但当前请求没有打开session将抛出
HttpSessionRequiredException异常;
boolean useExpiresHeader = true:是否使用HTTP1.0 协议过期响应头:如果true则会在响应头添加:“Expires:”;需
要配合cacheSeconds 使用;
boolean useCacheControlHeader = true:是否使用HTTP1.1 协议的缓存控制响应头,如果true则会在响应头添加;需
要配合cacheSeconds 使用;
boolean useCacheControlNoStore = true:是否使用HTTP 1.1 协议的缓存控制响应头,如果true则会在响应头添加;需
要配合cacheSeconds 使用;
private int cacheSeconds = -1:缓存过期时间,正数表示需要缓存,负数表示不做任何事情(也就是说保留上次的缓存
设置),
1、cacheSeconds =0 时,则将设置如下响应头数据:
Pragma:no-cache // HTTP 1.0 的不缓存响应头
Expires:1L // useExpiresHeader=true时,HTTP 1.0
Cache-Control :no-cache // useCacheControlHeader=true时,HTTP 1.1
Cache-Control :no-store // useCacheControlNoStore=true时,该设置是防止Firefox 缓存
2、cacheSeconds>0 时,则将设置如下响应头数据:
Expires:System.currentTimeMillis() + cacheSeconds * 1000L // useExpiresHeader=true时,HTTP 1.0
Cache-Control :max-age=cacheSeconds // useCacheControlHeader=true时,HTTP 1.1
3、cacheSeconds<0 时,则什么都不设置,即保留上次的缓存设置。
此处简单说一下以上响应头的作用,缓存控制已超出本书内容:
HTTP1.0缓存控制响应头
Pragma:no-cache:表示防止客户端缓存,需要强制从服务器获取最新的数据;
Expires:HTTP1.0 响应头,本地副本缓存过期时间,如果客户端发现缓存文件没有过期则不发送请求,HTTP 的日
期时间必须是格林威治时间(GMT), 如“Expires:Wed, 14 Mar 2012 09:38:32 GMT”;
HTTP1.1缓存控制响应头
Cache-Control :no-cache 强制客户端每次请求获取服务器的最新版本,不经过本地缓存的副本验证;
Cache-Control :no-store 强制客户端不保存请求的副本,该设置是防止Firefox 缓存
Cache-Control:max-age=[秒] 客户端副本缓存的最长时间,类似于HTTP1.0 的Expires,只是此处是基于请求的
相对时间间隔来计算,而非绝对时间。
还有相关缓存控制机制如Last-Modified(最后修改时间验证,客户端的上一次请求时间在 服务器的最后修改时间之
后,说明服务器数据没有发生变化返回 304 状态码)、ETag(没有变化时不重新下载数据,返回304)。
该抽象类默认被AbstractController 和WebContentInterceptor 继承。

分享到:
评论

相关推荐

    Spring3 MVC 学习笔记 入门

    ### Spring3 MVC 学习笔记入门知识点解析 #### 一、Spring MVC 概念与架构 **Spring MVC** 是 Spring Framework 的一个重要模块,主要用于构建基于 Web 的应用。它实现了 Model-View-Controller(MVC)设计模式,...

    spring_mvc学习笔记

    在Spring MVC的学习过程中,了解和掌握其核心概念与机制至关重要。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序。在Spring 3.0.x版本中,Spring MVC进行了大量的改进,引入了许多新特性和优化,使其...

    Spring MVC 学习笔记

    以下是对Spring MVC学习笔记的详细解释: 1. **创建项目**: 创建Spring MVC项目通常从构建一个Maven工程开始。在命令行中使用Maven的`archetype:generate`命令创建一个JEE5的Web工程。在提供的例子中,使用了特定...

    spring mvc学习笔记

    ### Spring MVC 学习笔记 #### 一、Spring MVC 核心组件与工作流程 **Spring MVC** 是 **Spring Framework** 的一个重要模块,主要用于构建基于 Web 的应用程序。它提供了简化 Web 开发的一系列功能,包括但不限于...

    Spring MVC学习笔记MD.7z

    这个压缩包“Spring MVC学习笔记MD.7z”包含了作者在学习Spring MVC过程中的笔记、源代码以及相关文档,非常适合初学者或希望深入理解Spring MVC的开发者。 首先,`SpringMVC-Study.7z` 可能是作者整理的Spring MVC...

    Spring MVC 学习笔记 一 创建项目

    **Spring MVC 学习笔记 一 创建项目** 在IT领域,Spring MVC是Java Web开发中的一个强大框架,它简化了构建交互式Web应用程序的过程。本笔记将深入探讨如何创建一个基本的Spring MVC项目,让我们开始吧。 首先,...

    spring MVC学习笔记

    在学习Spring MVC的过程中,我们首先需要了解的是控制器(Controller)的基本概念。控制器是处理用户请求并返回响应给用户的组件。在Spring MVC中,通过@Controller注解标记一个类为控制器。一个控制器类中可以包含...

    Spring MVC 学习笔记 十二 PDF/Excel格式输出

    本学习笔记主要围绕Spring MVC的使用、配置和核心组件进行深入探讨,旨在帮助开发者更好地理解和掌握这一框架。 在Spring MVC中,Model代表业务逻辑和数据,View负责数据的展示,而Controller处理用户请求,协调...

    Spring MVC 学习笔记 九 json格式的输入和输出

    在这个学习笔记中,我们将深入探讨如何在Spring MVC中处理JSON格式的数据,包括输入和输出。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输。 1. **JSON格式简介** ...

    Spring MVC 学习笔记(一)

    **Spring MVC 学习笔记(一)** Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架。Spring MVC 通过解耦应用程序的不同部分,使开发人员能够更轻松地进行...

    Spring MVC 学习笔记 十一 data binding

    本学习笔记将深入探讨Spring MVC中的数据绑定特性。 1. **数据绑定的基本概念** 数据绑定是Spring MVC中的一种核心功能,它允许我们将HTTP请求参数、JSON或XML数据自动映射到Java对象的属性上。这减少了手动提取...

    javaSSM 学习笔记spring spring MVC mybatis

    【Java SSM 学习笔记:Spring、Spring MVC、MyBatis】 SSM 是 Java Web 开发中常用的三大框架,即 Spring、Spring MVC 和 MyBatis。它们各自负责不同的职责,共同构建了一个高效、灵活的 web 应用程序。 1. **...

    Spring MVC 学习笔记 七 controller中其他可用的annotation

    这篇"Spring MVC 学习笔记 七 controller中其他可用的annotation"可能涵盖了除我们常见的`@RequestMapping`之外的其他注解,这些注解使得控制器功能更加丰富和灵活。下面将详细探讨Spring MVC中Controller相关的注解...

    基于注解的spring_3.0.x_MVC学习笔记

    在本篇基于注解的Spring 3.0.x MVC学习笔记中,我们将深入探讨Spring MVC在3.0版本中的变化,以及如何通过注解实现快速开发。Spring 3.0.x相较于2.5版本有着显著的改进,尤其在MVC模块上,提供了更加灵活和强大的...

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

Global site tag (gtag.js) - Google Analytics