1. 控制器默认支持的参数类型

1.1. 直接在控制器方法形参上定义HttpServletRequest、HttpServletResponse、HttpSession和Model/ModelMap类型的对象, 不用创建对象, 就可以直接使用。

1.2. HttpServletRequest: 获取request对象请求信息。

1.3. HttpServletResponse: 通过response对象处理相应信息。

1.4. HttpSession: 获得session对象中存放的信息。

1.5. Model/ModelMap: Model是一个接口, ModelMap是一个实现类, 使用Model对象或ModelMap对象都行, 一般使用Model对象。将模型数据填充到request域中。

2. @Controller标识一个类是一个控制器。

3. @RequestMapping注解

3.1. @RequestMapping的value值定义Controller的url映射。可以定义方法的映射, 一个方法对应一个url。

3.2. 也可以定义类的映射, 用来窄化请求映射(比如是某个模块的根路径)。

3.3. @RequestMapping的method值可以设置请求类型。

4. 处理器方法的返回值

4.1.返回ModelAndView

4.2. 返回String

4.2.1. 如果返回String, 表示的是逻辑视图名。真正视图(Jsp路径)=前缀+逻辑视图名+后缀。

4.2.2. 转发: "forward:/WEB-INF/jsp/itemList.jsp"

4.2.3. 重定向: "redirect:itemList.jsp"

4.3. 返回void

5. 例子

5.1. 新建一个名为ControllerRequestMapping的Web工程, 同时拷入相关jar包

5.2. 新建Item.java

package com.lywgames.domain;import java.io.Serializable;
import java.util.Date;public class Item implements Serializable{private static final long serialVersionUID = 1L;// 商品idprivate Integer id;// 商品名称private String name;// 商品价格private Double price;// 商品创建时间private Date createtime;// 商品描述private String detail;public Item() { }public Item(Integer id, String name, Double price, Date createtime, String detail) {this.id = id;this.name = name;this.price = price;this.createtime = createtime;this.detail = detail;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Date getCreatetime() {return createtime;}public void setCreatetime(Date createtime) {this.createtime = createtime;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;}
}

5.3. 新建ItemAction.java

package com.lywgames.web.action;import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.lywgames.domain.Item;// @Controller标识一个类是一个控制器。
@Controller
// @RequestMapping的value值定义Controller类url映射, 用来窄化请求映射(比如是某个模块的根路径)。
@RequestMapping("item")
public class ItemAction {List<Item> itemList = new ArrayList<Item>();public ItemAction() {itemList.add(new Item(1, "冰箱", 1999.0, new Date(), "保鲜。"));itemList.add(new Item(2, "电脑", 8888.0, new Date(), "网上冲浪"));itemList.add(new Item(3, "洗衣机", 4000.0, new Date(), "从此不用手。"));itemList.add(new Item(4, "空调", 2600.0, new Date(), "冬天制热, 夏天制冷。"));itemList.add(new Item(5, "液晶电视", 20000.0, new Date(), "曲面屏幕"));}//  @RequestMapping的value值定义Controller方法的url映射, method值可以设置请求类型。@RequestMapping(value="productsCallbackModelAndView", method={RequestMethod.GET})// 处理器方法返回ModelAndViewpublic ModelAndView productsCallbackModelAndView() { ModelAndView mav = new ModelAndView();mav.addObject("itemList", itemList); // 设置商品数据mav.setViewName("itemList"); // 设置视图名字return mav;}@RequestMapping(value="productsCallbackString")// 处理器方法返回Stringpublic String productsCallbackString(HttpServletRequest req, HttpServletResponse res, HttpSession hs, Model m) { req.setAttribute("itemList", itemList); // 设置商品数据return "itemList";}@RequestMapping("productsCallbackStringByForward")// 处理器方法返回String, 通过forward方式public String productsCallbackStringByForward(HttpServletRequest req) { req.setAttribute("itemList", itemList); // 设置商品数据return "forward:/WEB-INF/jsp/itemList.jsp";}@RequestMapping("productsCallbackStringByRedirect")// 处理器方法返回String, 通过redirect方式// 请求地址栏中直接输入地址无法之间访问WEB-INF下的资源, redirect也不能访问。public String productsCallbackStringByRedirect(HttpSession hs) { hs.setAttribute("itemList", itemList); // 设置商品数据return "redirect:itemList.jsp";}@RequestMapping("productsCallbackVoid")// 处理器方法返回voidpublic void productsCallbackVoid(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setAttribute("itemList", itemList); // 设置商品数据req.getRequestDispatcher("/WEB-INF/jsp/itemList.jsp").forward(req, res);}
}

5.4. 在src下, 编写springmvc.xml

5.5. 在web.xml里配置请求路径拦截、SpringMVC的前端控制器和加载SpringMVC的核心配置文件。

5.6. 编写index.jsp

5.7. 由于重定向不能直接访问WEB-INF下的资源, 所以我们在WebContent/item/和WebContent/WEB-INF/jsp/目录下都编写itemList.jsp(仅仅是为了演示)

5.8. 运行项目

5.9. 转发的访问结果

5.10. 重定向的访问结果

003_Controller和RequestMapping注解相关推荐

  1. spring mvc -@RequestMapping注解详解

    https://www.cnblogs.com/caoyc/p/5635173.html @RequestMapping参数说明: value:定义处理方法的请求的URL地址(重点): method: ...

  2. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器

    1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...

  3. Spring MVC @RequestMapping注解详解

    @RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...

  4. SpringMVC RequestMapping注解详解

    2019独角兽企业重金招聘Python工程师标准>>> @RequestMapping注解的作用是对用户的请求映射到指定的控制器或方法,所以该注解可以用来修饰类和方法,在Reques ...

  5. RequestMapping注解的作用

    源码: @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented ...

  6. RequestMapping注解的继承问题

    @RequestMapping注解被用来注明访问路径,例如: @RequestMapping("/data") @RequestMapping("/user/list&q ...

  7. SpringMVC之@RequestMapping注解及其衍生注解详解

    @RequestMapping是springmvc核心注解之一,主要作用是建立请求URL与请求方法之间的映射关系,每当客户端有请求发过来,就根据请求URL找到对应的方法反射进行调用. //该注解可以作 ...

  8. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  9. SpringMVC框架----RequestMapping注解

    作用:用于建立请求 URL 和处理请求方法之间的对应关系 客户端会发一个请求过来,后台会有一个方法去执行它,现在我们需要把请求地址路径和我们的方法建立一个映射关联,发了请求,我们的方法就执行. Req ...

最新文章

  1. 5.基于STM32F103+OV7670的网络摄像头
  2. Coolite Toolkit学习笔记六:常用控件Accordion、ToolBar、ToolTip
  3. 进一步提升用户信息安全保护意识 小米安全与隐私宣传月完满落幕
  4. Build-dep linux 知乎,删除通过apt-get build-dep安装的软件包
  5. Vue中数组赋值问题
  6. XSLT基本语法和第一个实例
  7. 必须熟悉的vim快捷键操作
  8. iOS中MVC设计模式
  9. 计算机应用与网络讲义,计算机基础讲义
  10. 二分查找递归和非递归方法分析
  11. HyperLogLog原理与在Redis中的使用
  12. 笔试常见的智力题(附答案)
  13. 操作系统之进程和线程
  14. 【软件与系统安全】栈溢出利用的分析
  15. 用pcdet跑deecamp20_liadr3-1
  16. 用blender环绕物体拍摄
  17. java9 javascript_[Java教程]9最好的JavaScript压缩工具
  18. swiper 在PC端使用禁止鼠标拖动
  19. Android 调用so库全过程
  20. 做数据分析需要学什么?这几项技能你掌握了吗?

热门文章

  1. try catch 之后是否会继续执行
  2. 【Linux】JDK+Eclipse 搭建C/C++开发环境
  3. Openstack安装过程中出现的一些问题及解决
  4. svn: E215004: Authentication failed
  5. 常用API-String、包装类、System
  6. Vue静态资源的获取
  7. Scala 基础(4)—— 类和对象
  8. Web渗透测试(sql注入 access,mssql,mysql,oracle,)
  9. 暴君第一季/全集Tyrant迅雷下载
  10. Android 设置EditText光标位置(转)