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;
	
	// 商品id
	private 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})
	// 处理器方法返回ModelAndView
	public ModelAndView productsCallbackModelAndView() { 
		ModelAndView mav = new ModelAndView();
		mav.addObject("itemList", itemList); // 设置商品数据
		mav.setViewName("itemList"); // 设置视图名字
		return mav;
	}
	
	@RequestMapping(value="productsCallbackString")
	// 处理器方法返回String
	public 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")
	// 处理器方法返回void
	public 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. 重定向的访问结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值