003_Controller和RequestMapping注解
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注解相关推荐
- spring mvc -@RequestMapping注解详解
https://www.cnblogs.com/caoyc/p/5635173.html @RequestMapping参数说明: value:定义处理方法的请求的URL地址(重点): method: ...
- SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器
1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...
- Spring MVC @RequestMapping注解详解
@RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...
- SpringMVC RequestMapping注解详解
2019独角兽企业重金招聘Python工程师标准>>> @RequestMapping注解的作用是对用户的请求映射到指定的控制器或方法,所以该注解可以用来修饰类和方法,在Reques ...
- RequestMapping注解的作用
源码: @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented ...
- RequestMapping注解的继承问题
@RequestMapping注解被用来注明访问路径,例如: @RequestMapping("/data") @RequestMapping("/user/list&q ...
- SpringMVC之@RequestMapping注解及其衍生注解详解
@RequestMapping是springmvc核心注解之一,主要作用是建立请求URL与请求方法之间的映射关系,每当客户端有请求发过来,就根据请求URL找到对应的方法反射进行调用. //该注解可以作 ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMVC框架----RequestMapping注解
作用:用于建立请求 URL 和处理请求方法之间的对应关系 客户端会发一个请求过来,后台会有一个方法去执行它,现在我们需要把请求地址路径和我们的方法建立一个映射关联,发了请求,我们的方法就执行. Req ...
最新文章
- 5.基于STM32F103+OV7670的网络摄像头
- Coolite Toolkit学习笔记六:常用控件Accordion、ToolBar、ToolTip
- 进一步提升用户信息安全保护意识 小米安全与隐私宣传月完满落幕
- Build-dep linux 知乎,删除通过apt-get build-dep安装的软件包
- Vue中数组赋值问题
- XSLT基本语法和第一个实例
- 必须熟悉的vim快捷键操作
- iOS中MVC设计模式
- 计算机应用与网络讲义,计算机基础讲义
- 二分查找递归和非递归方法分析
- HyperLogLog原理与在Redis中的使用
- 笔试常见的智力题(附答案)
- 操作系统之进程和线程
- 【软件与系统安全】栈溢出利用的分析
- 用pcdet跑deecamp20_liadr3-1
- 用blender环绕物体拍摄
- java9 javascript_[Java教程]9最好的JavaScript压缩工具
- swiper 在PC端使用禁止鼠标拖动
- Android 调用so库全过程
- 做数据分析需要学什么?这几项技能你掌握了吗?