Controller

本文围绕Java的Controller展开,介绍其在MVC中的角色,主要负责功能处理,完整的C由DispatcherServlet和Controller组成。还提及Spring Web MVC支持多种控制器类型。阐述了Controller接口的handleRequest方法,以及WebContentGenerator的属性,如支持的请求方法、session要求和缓存控制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Controller1、Controller简介2、Controller接口3、WebContentGenerator4、AbstractController

1、Controller简介

Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:

  1. 收集、验证请求参数并绑定到命令对象;
  2. 将命令对象交给业务对象,由业务对象处理并返回模型数据;
  3. 返回ModelAndView(Model部分是业务对象返回的模型数据,视图部分为逻辑视图名)。

还记得DispatcherServlet吗?主要负责整体的控制流程的调度部分:

  1. 负责将请求委托给控制器进行处理;
  2. 根据控制器返回的逻辑视图名选择具体的视图进行渲染(并把模型数据传入)。

因此MVC中完整的C(包含控制逻辑+功能处理)由(DispatcherServlet + Controller)组成。

因此此处的控制器是Web MVC中部分,也可以称为页面控制器、动作、处理器。

Spring Web MVC支持多种类型的控制器,比如实现Controller接口,从Spring2.5开始支持注解方式的控制器(如@Controller、@RequestMapping、@RequestParam、@ModelAttribute等),我们也可以自己实现相应的控制器(只需要定义相应的HandlerMapping和HandlerAdapter即可)。

因为考虑到还有部分公司使用继承Controller接口实现方式,因此我们也学习一下,虽然已经不推荐使用了。

2、Controller接口

package org.springframework.web.servlet.mvc;
public interface Controller {
       ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

这是控制器接口,此处只有一个方法handleRequest,用于进行请求的功能处理,处理完请求后返回ModelAndView(Model模型数据部分 和 View视图部分)。

3、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时,则什么都不设置,即保留上次的缓存设置。

此处简单说一下以上响应头的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值