Spring从2.5版本引入注解,从而让开发者的工作变得非常的轻松

springmvc注解Controller

org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,使用该注解不需要继承特定的类或实现特定的接口,相比较配置文件而言更加简单。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller { String value() default ""; }

RequestMapping注解

org.springframework.web.bind.annotation.RequestMapping注解用来指示Spring用哪一个类或者方法来处理请求动作,该注解可用于类或方法。当@RequestMapping注解在类上时候,所有的方法都将映射为相对于类级别的请求,表示该控制器处理的所有的请求都将被映射到value属性指示的路径下

源码如下


package org.springframework.web.bind.annotation; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.Callable; import org.springframework.core.annotation.AliasFor; @Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping { /**
* 给映射地址一个别名
*/
String name() default ""; /**
* 用于将指定的请求的实际地址映射到方法上
*/
@AliasFor("path")
String[] value() default {}; @AliasFor("value")
String[] path() default {}; /**
* 映射指定的请求的方法类型:
* GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.
*/
RequestMethod[] method() default {}; /**
* 指定request中必须包含某些参数值,才让该方法处理
*/
String[] params() default {}; /**
* 指定request中必须包含某些指定的header值,才让该方法处理
*/
String[] headers() default {}; /**
* 指定处理请求提交的内容(Content-Type),例如application/json、text/html等
*/
String[] consumes() default {}; /**
* 指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型
*/
String[] produces() default {}; }

Model和 ModelAndView

SpringMVC在内部使用一个org.springframework.ui.Model接口存储模型数据,类似Map接口。SpringMVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储器。如果处理方法的参数为Model和ModelMap类型,则springMVC会将隐含模型的引用传递给这些参数。在处理方法内部,开发者就可以通过这个参数队形访问模型中的所有数据,也可以像模型中添加新的属性数据。

UserController.java

package com.rookie.bigdata.controller;

import com.rookie.bigdata.domain.User;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping; /**
* Created by dell on 2019/6/15.
*/
@Controller
public class UserController { private static final Log LOG = LogFactory.getLog(UserController.class); /**
* @param loginname
* @param password
* @param model
* @ModelAttribute修饰的方法会先于login调用,该方法用于接受前台jsp页面传入的参数,该方法 public void userNodel(String loginname, String password, Model model)可以直接改为 public void userNodel(String loginname, String password, ModelMap modelMap)
*/
@ModelAttribute
public void userNodel(String loginname, String password, Model model) {
LOG.info("该方法执行啦");
//用于存储JSP页面传入的参数
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
//将user添加到Model中
model.addAttribute("user", user);
} @RequestMapping(value = "/login1")
public String login(Model model) {
//从Model中取出user对象
User user = (User) model.asMap().get("user");
System.out.println(user);
//设置user对象的属性
user.setUsername("张三");
return "result1";
} }

loginForm1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试Model</title>
</head>
<body>
<h3>测试Model</h3>
<form action="login1" method="post">
<table>
<tr>
<td><label>登录名: </label></td>
<td><input type="text" id="loginname" name="loginname" ></td>
</tr>
<tr>
<td><label>密码: </label></td>
<td><input type="password" id="password" name="password" ></td>
</tr>
<tr>
<td><input id="submit" type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>

ModelAndView

控制器处理方法的返回值如果是ModelAndView,则其既包含模型数据信息,也包含视图信息。

如下代码跟上面的效果相同

package com.rookie.bigdata.controller;

import com.rookie.bigdata.domain.User;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; /**
* Created by dell on 2019/6/15.
*/
@Controller
public class User1Controller { private static final Log LOG = LogFactory.getLog(User1Controller.class); /**
* @param loginname
* @param password
* @param modelAndView
*/
@ModelAttribute
public void userNodel(String loginname, String password, ModelAndView modelAndView) {
LOG.info("该方法执行啦");
//用于存储JSP页面传入的参数
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
//将user添加到Model中
modelAndView.addObject("user", user);
} @RequestMapping(value = "/login1")
public ModelAndView login(ModelAndView modelAndView) {
//从ModelAndView的Model中取出user对象
User user = (User) modelAndView.getModel().get("user");
System.out.println(user);
//设置user对象的属性
user.setUsername("张三");
modelAndView.setViewName("result1");
return modelAndView;
}
}

springmvc注解@Controller和@RequestMapping的更多相关文章

  1. SpringBoot 中常用注解@Controller/@RestController/@RequestMapping的区别

    SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别 @Controller 处理http请求 @Controller //@Re ...

  2. SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍

    原文 SpringBoot 中常用注解 @Controller/@RestController/@RequestMapping介绍 @Controller 处理http请求 @Controller / ...

  3. Spring MVC基于注解@Controller和@RequestMapping开发的一个例子

    1.创建web项目 2.在springmvc的配置文件中指定注解驱动,配置扫描器 在 Spring MVC 中使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被 Spring MVC ...

  4. SpringMVC中@Controller和@RequestMapping用法和其他常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  5. SpringMVC中@Controller和@RequestMapping用法和其他常用注解(转)

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  6. springmvc之@Controller、@RequestMapping等注解解说

    首先来看下一段代码: @Controller @RequestMapping("/user") public class UsersController { @RequestMap ...

  7. SpringBoot中常用注解@Controller/@RestController/@RequestMapping的区别

    @Controller 处理http请求 @Controller //@ResponseBody public class HelloController { @RequestMapping(valu ...

  8. SpringMVC中@Controller和@RequestMapping用法

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  9. SpringMVC注解@RequestParam与RequestMapping全面解析

    1.@RequestParam用法: SpringMVC后台控制层获取参数的方式主要有两种, 一种是request.getParameter("name"), 另外一种是用注解@R ...

随机推荐

  1. jenkins slave上执行脚本报错

    jenkins slave上执行脚本报错 解决方法:在系统配置中设置shell execuate C:\Windows\system32\cmd.exe 保存即可

  2. 怎么在虚拟机下的Linux系统安装数据库

    1.查看 linux下是否有老版本的mysql(有删除) 查找old mysql:rpm -qa | grep mysql 卸载:卸载命令:rpm –ev {包名}——:rpm -ev mysql-c ...

  3. 微信小程序 - 事件 | 传递 | 冒泡

    事件 常见的事件有: 类型 触发条件 最低版本 touchstart 手指触摸动作开始   touchmove 手指触摸后移动   touchcancel 手指触摸动作被打断,如来电提醒,弹窗   t ...

  4. 遵循PEP8风格

    遵循PEP8风格 在编写python代码的时候我们应该采用统一的风格来编写代码,可以使代码更加容易读懂.采用和其他程序员统一的编码风格来写代码,也可以使项目更利于多人协作开发.即便代码只有你自己能看懂 ...

  5. set去重应用

    1.其中涉及__hash__与__eq__这两个内置方法. 2.列如: 要求用类生成多个对象,其中姓名和性别相同的对象可认为是同一个人,用set原理做去重 class People: def __in ...

  6. nowcoder911J 异或的路径

    题目链接 题意 给出一棵树,每条边有边权.求\(\sum\limits_{i=1}^n{f(i,j)}\),\(f(i,j)\)表示从i到j路径的异或和. 思路 \(g_i\)表示从根到\(i\)的异 ...

  7. Graphviz学习

    (入门教程)[https://www.luogu.com.cn/blog/umr/graphviz]

  8. iptables如何安全的清空规则

    使用 /sbin/iptables -F 要小心,搞不好,你就马上同服务器断开连接了 如果想清空的话,先执行 /sbin/iptables -P INPUT ACCEPT 然后执行 /sbin/ipt ...

  9. pyqt 调用QT设计师创建的对话框

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验步骤 2.1 ...

  10. 《Interest Rate Risk Modeling》阅读笔记——第二章:债券价格、久期与凸性

    目录 第二章:债券价格.久期与凸性 思维导图 瞬时回报率-收益率的例子 第二章:债券价格.久期与凸性 思维导图 瞬时回报率-收益率的例子