执行过程:
1.用户发送请求,由前端控制器DispatcherServlet接收并转发请求
2.前端控制器将请求转发至处理器映射器,由处理器映射器根据请求寻找handler,并将 handler返回给前端控制器
3.前端控制器接收到处理器适配器返回的handler,然后将handler发送给处理器适配器请求 执行handler,此时处理器适配器会调用handler中的方法,执行handler,并且返回执 行后的数据modelandview,然后处理器适配器将modelandview返回给前端控制器
4.前端控制器接收到处理器适配器返回的modelandview之后会将modelandview转发给视图 解析器进行解析,视图解析器解析之后会将解析出的真正的物理视图返回给前端控制器
5.前端控制器将视图解析器解析出的物理视图进行封装渲染,
6.前端控制器将渲染之后的页面响应给用户
web.xml
springmvcDemo
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc-config.xml
springmvc
*.do
itemsController
itemsController
package com.mvc.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.mvc.pojo.Items;
/**
* 基于配置的controller类需要实现Controller接口
* @author Administrator
*
*/
public class ItemContrller implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
//商品列表
List list = new ArrayList();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
//返回数据
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list",list);
//返回视图
modelAndView.setViewName("/WEB-INF/jsp/item/list.jsp");
return modelAndView;
}
}
商品ID
商品名称
商品价格
商品生产日期
商品图片
商品简介
操作选项
${items.id }
${items.name }
${items.price }
${items.detail }
修改 | 删除
注解式处理器映射器,对类中标记 @RequestMapping 的方法进行映射,根据@RequestMapping中定义的 url 匹配标记的方法,匹配成功返回 HandlerMethod 对象给前端控制器,HandlerMethod 对象中封装有 ur 对应的方法Methodl
package com.mvc.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.mvc.pojo.Items;
/**
* @author Administrator
*
*/
@Controller
public class ItemContrller {
@RequestMapping(value = "items.do")
public ModelAndView itemslist() {
// 商品列表
List list = new ArrayList();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
// 返回数据
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("list", list);
// 返回视图
modelAndView.setViewName("/WEB-INF/jsp/item/list.jsp");
return modelAndView;
}
}
value:默认就是value属性.属性是一个数组类型,可以配置多个url映射到一个方法上
method:支持的HTTP方法。post get put delete,如果不写method属性,则默认所有方法都可以使用
//@RequestMapping("/list.action")
@RequestMapping(value={"list","itemList","items"}, method=RequestMethod.GET)
public ModelAndView getItemList() {
//异常测试
//int i = 1/0;
List itemList = itemService.getItemList();
//返回模型和视图
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemList", itemList);
//设置逻辑视图
modelAndView.setViewName("itemList");
return modelAndView;
}
redirect:重定向,二次请求,url地址发生变化
forward:转发,必须是工程内部的url,一次请求,页面地址不发生变化
public String editItem(Items items) {
itemService.updateItem(items);
//展示添加成功页面
return "123/success";
//更新成功后跳转到百度
return "redirect:http://www.baidu.com";
//更新成功后跳转到商品列表
return "redirect:/items/list.action";
//更新成功后显示商品编辑页面,做forward跳转
return "forward:itemEdit.action";
}
@RequestMapping("/updateitem")
public void editItem(Items items, HttpServletRequest request, HttpServletResponse response) throws Exception {
itemService.updateItem(items);
//跳转到百度
response.sendRedirect("http://www.baidu.com");
//跳转到商品编辑页面
request.getRequestDispatcher("/items/itemEdit.action").forward(request, response);
}
企业开发中,Controller层一般不返回ModelAndView,一般情况下返回值为String或者void,并且在springmvc核心配置文件中配置视图解析器的前后缀
3.修改Controller层代码
package com.mvc.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.mvc.pojo.Items;
/**
* @author Administrator
*
*/
@Controller
public class ItemContrller {
@RequestMapping(value = "items.do")
public String itemslist(Model model) {
// 商品列表
List list = new ArrayList();
Items items1 = new Items();
items1.setName("联想");
items1.setPrice(199f);
items1.setDetail("Thank pad笔记本");
Items items2 = new Items();
items2.setName("戴尔");
items2.setPrice(200f);
items2.setDetail("Dell 笔记本");
list.add(items1);
list.add(items2);
// 返回数据
model.addAttribute("list", list);
return "list";
}
}