在SpringMVC中常用的注解主要都是用于Controller上,所以下面的四大不同类型的注解都是根据它们处理的request的不同内容部分来区分的;
        处理request body的注解:@RequestParam, @RequestBody;
        处理request uri的注解:@PathVariable;
        处理request header部分的注解:@RequestHeader, @CookieValue;
        处理attribute类型的注解:@SessionAttribute,@ModelAttribute;
        在@Controller注解之后就是@RequestMapping注解了;
            这个RequestMapping就是用来注解一个控制类的方法,可以实现多级的管理控制器;例如,你可以先在一个类上去注解一个@RequestMapping("/user");然后在这个类的里面再去注解一个方法@RequestMapping("/register");这样的话,你可以通过请求user/register来进入register这个控制器中,实现多级的管理控制器;
            然后这个RequestMapping个人觉得需要记住的属性有两个,一个默认属性value,标注是由那个请求映射过来的。而另一个属性是method属性, 用来指示该方法仅仅处理哪些HTTP请求方式;
            @RequestMapping(value = "/hello",method = RequestMethod.POST)和@RequestMapping(value = "/hello",method = RequestMethod.GET);如果没有指定method属性值,则请求处理方法可以处理任意的HTTP请求方式;
        下面是关于Model,ModelMap和ModelAndView这三种接口用来存储模型数据;个人理解,就是我们前面提到了当你的请求中携带了参数的时候,我们称他们为模型数据,这个时候,我们需要一个容器来存储这些模型数据,而在Controller中,我们只需要给控制器这个存储了模型数据的容器就可以了,也就是将模型数据进行封装。其中,Model和ModelMap基本没有太大的区别,而ModelAndView则是不仅包含了模型数据信息,还包含了视图信息,可以看成是一个Map<String,Object>对象;下面上代码;
@Controller
public class User1Controller{
//@ModelAttribute修饰的方法会先与login调用,该方法用于接收前台jsp页面传入的参数
@ModelAttribute
public void userModel(String loginname,String password,Model model){
logger.info("userModel");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
model.addAttribute("user",user);
}
@RequestMapping("/login1")
public String login(Model model){
logger.info("login");
//从Model当中取出之前存入的名为user的对象
User user = (User) model.asMap().get("user");
System.out.println(user);
user.setUsername("测试");
return "result11";
}
}

上面这个是model的使用;

@Controller
public class User2Controller{
private static final Log logger = LogFactory.getLog(User2Controller.class);
@ModelAttribute
public void userModel2(String loginname,String password,ModelMap modelmap){
logger.info("userModel2");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
modelMap.addAttribute("user",user);
}
@RequestMapping("/login2")
public String login2(ModelMap modelMap){
logger.info("login2");
User user = (User) modelMap.get("user");
System.out.println(user);
user.setUsername("测试");
return "result2";
}
}

上面这个是ModelMap的使用;

@Controller
public class User3Controller{
private static final Log logger = LogFactory.getLog(User3Controller.class);
@ModelAttribute
public void userModel3(String loginname,String password,ModelAndView mv){
logger.info("userModel3");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
mv.addObject("user",user);
}
@RequestMapping("/login3")
public ModelAndView login3(ModelAndView mv){
logger.info("login3");
User user = (User) mv.getModel().get("user");
System.out.println(user);
user.setUsername("测试");
mv.setViewName("result3");
return mv;
}
}
        上面这个是ModelAndView 的使用;
        接下来是@RequestParam注解,用于将指定的请求参数赋值给方法中的形参;
@RequestMapping("/login")
public ModelAndView login(
@RequestParam("loginname") String loginname;
@RequestParam("password") String password;){
return...
}
        这个RequestParam其实就是一个声明你在jsp页面中命名并打算传送过来的参数,value里面是你要传递过来的参数的名字;
        @PathVariable注解;
            这个注解可以非常方便地获得请求URL中的动态参数;这个注解经常用于当你要进入一些登录界面的时候,这个时候,你可以灵活地设置要去哪个登录界面;
        @SessionAttributes注解;
            这个注解可以允许我们有选择地指定Model中的哪些属性需要转存到HttpSession对象中;上代码;
@Controller
@SessionAttribute("user")
public class SessionAttributesController{
private static final Log logger = LogFactory.getLog(SesssionAttributesController.class);
@RequestMapping("/{formname}")
public String loginForm(@PathVariable String formName){
return formName;
}
@RequestMapping("/login")
public String login(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password,
Model model){
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
user.setUsername(admin);
model.addAttribute("user",user);
return "welcome";
}
}
下面要讲的是@ModelAttribute注解的五种使用方法,@ModelAttribute使用方法较为灵活,请见机行事;
       1,@ModelAttribute(value = "")返回具体类的方法;
       2,@ModelAttributevoid返回值的方法;
       3,@ModelAttribute返回具体类的方法 ;
       4,@ModelAttribute和@RequestMapping同时注释一个方法;
       5,@ModelAttribute 注释一个方法的参数;
        1,@ModelAttribute(value = "")返回具体类的方法,我们前面说过,ModelAttribute相当于一个存储模型数据的容器,而这第一种方法就相对有点简单了,就是标明了这是存储了那个具体的模型数据,记住是一个模型数据而已;而且没有提供容器,是属于简单的数据传输时用到的,上代码;
@Controller
public class ModelAttribute1Controller{
@ModelAttribute("loginname")
public String userModel1(
@RequestParam("loginname") String loginname){
return loginname;
}
@RequestMapping("/login1")
public String login1(){
return "result1";
}
}

2,@ModelAttribute注解void返回值的方法,相对于上一个而言,这个的注解的特点在于他提供了一个容器来存储模型数据,而且还允许存储多个模型数据;上代码;

@Controller
public class ModelAttribute2Controller{
@ModelAttribute
publicv void userModel2(
@RequestParam("loginname") Stirng loginname,
@RequestParam("password") String password,
Model model){
model.addAttribute("loginname",loginname);
model.addAttribute("password",password);
}
@RequestMapping("/login2")
public String login2(){
return "result2";
}
}

  

 从此,你就可以用model.addAttribute这个方法来将模型数据存入到容器中了;
        3,@ModelAttribute返回具体类的方法;前面我们说的第一个方法里面ModelAttribute注解标注的是一个返回值为String的方法,而接下来的这个的返回值却是一个类。也就是说,他一样没有用容器,但是他用类将这些模型数据给封装了起来,上代码;
@Controller
public User userModel3(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password){
return find(loginname,password);
}
@RequestMapping("/login3")
public String login3{
return "result3";
}

  4,@ModelAttribute和@RequestMapping同时注释一个方法;这个时候就会有一个骚操作,这个时候方法里面返回的值就不再是视图名称了,而是model属性的值了,虽然我不知道这个有什么用。。。反正就是骚操作。。。

@Controller
public class ModelAttribute4Controller{
@RequestMapping("/login4")
@ModelAttribute("username")
public String login4(){
return "admin";
}
}

    5,@ModelAttribute 注释一个方法的参数,这个跟第三个有点像,我觉得不同之处可能在于封装在类里面的模型在下面的Controller中可以被再次设置和使用吧。。。

@Controller
public class ModelAttribute5Controller{
@ModelAttribute("user")
public User userModel5(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password){
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
return user;
}
@RequestMapping(("/login5")
public String login5(@ModelAttribute("user") User user){
user.setUsername("管理员");
return "result5";
}
}

  

SpringMVC的常用注解的更多相关文章

  1. (三)SpringMVC之常用注解

    SpringMVC的常用注解 注解 说明 @Controller 用于说明这个类是一个控制器 @RequestMapping 用于注释一个控制器类或者控制器类的方法 @RequestParam 用于将 ...

  2. springMvc之常用注解介绍

    @requestbody和@requestparam的用法  获取请求参数的方法 get请求: 直接获取request    如: public String getHtml(HttpServletR ...

  3. SpringMVC相关常用注解

    @Controller: @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象 @RequestMapping: RequestMappin ...

  4. Spring和SpringMVC的常用注解

    Spring的部分: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component-scan base-package=" ...

  5. springMVC的常用注解有哪些?

    1.@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否 ...

  6. springmvc:常用注解

    一.RequestParam注解 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必须提供此参数.默认值:true.表示必 ...

  7. SpringMVC框架——常用注解

    @RequestMapping Spring MVC 通过 @RequestMapping 注解将请求与业务方法进行映射,在方法定义处,在类定义都可以添加该注解. 常用参数: 1.value:指定请求 ...

  8. SpringMVC常用注解實例詳解3:@ResponseBody

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  9. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

随机推荐

  1. 禁止img图片拖动在新窗口打开

    JS function imgdragstart(){return false;} for(i in document.images)document.images[i].ondragstart=im ...

  2. msyql多软件连接

    菜鸟一枚 使用mysql删除数据库时,习惯性使用navicat,由于使用的是sqlyog备份的,就用sqlyog恢复数据库,结果总是报错. 用同事电脑没有问题,后来发现是用了不同的软件,导致数据库数据 ...

  3. 【转】rinex

         RINEX(Receiver INdependent Exchange)格式是与接收机无关的数据交换格式,该格式采用文本文件存储数据,数据记录格式与接收机的制造厂商和具体型号无关.RINEX ...

  4. Firefox使用Poster插件发送post请求

    目的:验证http请求功能正确与否,需要发送post,get请求,则可以使用Poster插件方便简单. 自我总结,有什么改正的地方请指出,感激不尽! 1.安装Poster插件. 点击firefox右上 ...

  5. linux的定时任务服务crond(crontab)服务

    1,Crond: Crond是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.(Centos5以后默认存在) 当优化开机自启动的时候,第一个就是crond. Crond服务默认情况( ...

  6. [DeeplearningAI笔记]ML strategy_1_3可避免误差与改善模型方法

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.8 为什么是人的表现 今天,机器学习算法可以与人类水平的表现性能竞争,因为它们在很多应用程序中更有生产 ...

  7. notify丢失、虚假唤醒

    notify丢失: 假设线程A因为某种条件在条件队列中等待,同时线程B因为另外一种条件在同一个条件队列中等待,也就是说线程A/B都被同一个Object.wait()挂起,但是等待的条件不同. 现在假设 ...

  8. BZOJ 3720: Gty的妹子树 [树上size分块]

    传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...

  9. 浅谈JavaScript的事件(事件类型)

    Web浏览器能够发生的事件有很多种类型,不同的事件类型有不同的事件信息.DOM3级的事件类型主要包括:UI事件,用户与页面上的元素交互时触发:焦点事件,元素获得或失去焦点触发:鼠标事件,用户通过鼠标在 ...

  10. IO&&Serize 利用线程Thread.Sleep实现"自动输出"

    查看链接 https://github.com/jungle8884/C-.Net/tree/MyClassLibrary using System; using System.Collections ...