spring MVC 注解使用总结(一)

一、springmvc简单使用
学习springmvc首先接触到的是DispatcherServlet前端控制器,该控制器本质为一个servlet,在web.xml中配置,用来拦截所有的url请求。
还有三个概念:处理映射器、处理适配器、视图解析器。
在WebApplicationContext初始化结束后,会调用DispatcherServlet的initStrategies(初始化策略)方法,这里用来加载自定义组件,如果没有找到指定的名称的组件,则会加载默认组件(在DispatcherServlet.properties)配置文件中。

protected void initStrategies(ApplicationContext context) {
        initMultipartResolver(context);
        initLocaleResolver(context);
        initThemeResolver(context);
        initHandlerMappings(context);
        initHandlerAdapters(context);
        initHandlerExceptionResolvers(context);
        initRequestToViewNameTranslator(context);
        initViewResolvers(context);
        initFlashMapManager(context);
    }

其中,initHandlerMappings(context);为初始化处理器映射器
initHandlerAdapters(context);初始化处理器适配器。
initViewResolvers(context);初始化视图解析器

springmvc的处理流程如下图所示:
这里写图片描述
遗留问题:这些适配器,以及工厂类的源码实现,还需要进一步了解!

二.Spring 常用注解
1.@Controller
使用该注解表明该类是一个控制器,可以支持多个请求动作,为了保证springmvc能够找到控制器,需要在springmvc的配置文件中启动包扫描功能:

<context:component-scan base-package="org.ldy.springmvc.controller"/>

2.@RequestMapping
用来指定哪个或者是方法来处理制定的请求。
用于类的注解表示:所有的方法请求都需要加上该类的请求路径
使用方法:

@Controller
public class AnnotationController {
    private static final Log logger = LogFactory.getLog(HelloController.class);
    @RequestMapping(value="/helloAnno")
    public ModelAndView helloAnnotation()
    {
        logger.info("helloAnnotation is 被调用");      
        ModelAndView mv = new ModelAndView();
        mv.addObject("message", "helloAnnotation!!!");
        mv.setViewName("/WEB-INF/views/first.jsp");
        return mv;
    }
}

只有一个属性的情况下默认为value属性。
还包括,
method属性:用来指定该方法仅仅用来处理那些请求
eg:@RequestMapping(value=”/hello”, method=RequestMethod.POST)
consume属性:用来指定请求的提交内容
eg:@RequestMapping(value=”/hello”, consume=“application/json”)
produces属性:用来指定返回的内容类型,且必须是request请求头(access)中所包含的类型。
eg:@RequestMapping(value=”/hello”, produces=“application/json”)
params属性:指定请求中必须包含某些参数时,才让该函数处理。
eg:@RequestMapping(value=”/hello”, params=“myparam=myvalue”)
headers属性:指定必须包含某些header时才处理
eg:@RequestMapping(value=”/hello”, headers=“Referer=xxx”)
3.处理request body部分的注解
@RequestParam:将指定的请求参数赋值给方法的形参
eg:public ModelAndView login(@RequestPara(“loginName”) String loginname){……}
会把请求参数中的loginName的值赋值给loginname参数。
@RequestBody 用来处理前台请求类型为“applicatino/json”“applicatin/xml”,可以方便的接受json、xml类型的数据。
eg:public void setJson(@RequestBody Book book){……}

4.处理request uri部分的注解:
@PathVariable:用来获取请求url中的动态参数
eg:@RequestMapping(value=”/pathVariableTeset/{userID}”)
public String pathVariableTest(@PathVariable int userID, Model model)

5.处理request header部分的注解:
@RequestHeader:用于获取请求头中的信息
@CookieValue:用于将请求的Cookie信息映射到处理方法的参数上。
6.处理attribute部分的注解:
@SessionAttributes:用于指定将model中的那些属性映射到HttpSessin对象中,只能用来注释类。mode和HttpSession为不同的域,方便跨域传递数据。
@ModelAttribute:用于将函数的参数和对象绑定到model对象,且被@ModelAttribute注释的函数会优先于控制器的每个方法执行前被执行,即在执行处理逻辑之前被调用。有三种使用方式。
a.被注解的函数返回值为String,这样返回值和@ModelAttribute(value=”modelName”)组成键值对,绑定到model中。
b.被注解的函数返回值为void,可通过model.addAttribute来进行绑定。
c.被注解的函数返回值为具体类,返回对象为类名的小写,绑定到model

三.Json和xml数据转换
后续补充……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值