SpringMVC小结

本文详细解析SpringMVC的执行流程、RESTful支持及其与Struts2的区别,包括Handler(Controller)的实现方式、参数注入、返回数据处理,并强调了RESTful架构在资源访问与处理的重点。

一放下就生疏,所以要温故,所以要笔记。

 

Tip,多数情况下,SpringMVC建议单例执行,Struts2建议多例执行。

原因就在于Struts2使用属性驱动或模型驱动,而SpringMVC则使用方法的形参接收参数。后者的方法在调用后数据就会销毁。

 

前提一,SpringMVC的执行流程:DispatcherServlet - HandlerMapping - HandlerAdapter - ViewResolver。

其实就是解析Url,调用合适的Handler,处理Handler的返回数据(ModelAndView,查源码可知其本质仍是操作request和response)。

注意,SpringMVC的Handler又叫Controller,概念可类比Struts2的Action。

前提二,SpringMVC的使用有传统代码注解两种方式。两种方式需要在xml中配置的HandlerMapping和HandlerAdapter是不同的。

前提三,SpringMVC可以开启RESTful风格访问。

前提四,xml配置文件中的标签都有对应的类或接口,所以如果不知道怎么配置,可以查找对应的类或接口。

 

Handler(Controller)的实现方式:

①(非注解)实现Controller接口;

②(非注解)实现HttpRequestHandler接口;

③(注解)@Controller@RequestMapping@RequestParam@PathVariable等。

非注解方式需要实现接口的方法,每次实现都只能对应一个Controller,不方便,仅作了解即可。

注解方式,灵活多变(方法有多种返回类型,方法返回的数据有多种操作方式),当是最佳选择。

 

Handler(Controller)中方法的形参类似Struts2中Action的属性或模型,通过不同的形参可以注入不同的对象(如request,pojo等)。

如:

@RequestMapping(value = "/xxx", method = { RequestMethod.POST, RequestMethod.GET })
public String xxx(HttpServletRequest request) throws Exception {
    request.setAttribute("xxx", xxx);

    return "abc/xxx";
    // return "redirect:xxx.action"; //路径是相对于当前方法路径的上一级路径。
    // return "forward:xxx.action"; //路径是相对于当前方法路径的上一级路径。
    // 其实就是类内的action。
}

上面就是通过形参注入了request对象,从而可以在方法内部操作该对象。

 

 

---------------------------------------------------------------------

SpringMVC已加入了RESTful支持。RESTful是面向资源的架构思想,个人理解:对资源的访问及处理是其重点。

SpringMVC通过以下三点来保证(个人理解):

    【】【】@ResponseBody使Controller【直接返回数据】,而不是直接指向具体的视图;同时通过MessageConverter和produces="text/plain;charset=UTF-8"可以返回各种格式的数据(XML,json,RSS,TEXT,字节流等)。
    【】【】@ResponseBody就是对应了HTTP协议里的响应体!!!
    【】【】ResponseEntity可以认为是ResponseHeader+ResponseBody。
    
    以上三点(直接返回数据而非页面、对应响应体、响应头和响应体),都是针对RESTful风格所需。务必理解啊。

    Controller方法直接返回ResponseEntity对象,@ResponseBody将该对象转成符合格式的数据,然后直接返回。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值