一:springMVC的执行过程
流程图:
文章图片
执行过程:
1.用户发送请求,由前端控制器DispatcherServlet接收并转发请求
2.前端控制器将请求转发至处理器映射器,由处理器映射器根据请求寻找handler,并将 handler返回给前端控制器
3.前端控制器接收到处理器适配器返回的handler,然后将handler发送给处理器适配器请求 执行handler,此时处理器适配器会调用handler中的方法,执行handler,并且返回执 行后的数据modelandview,然后处理器适配器将modelandview返回给前端控制器
4.前端控制器接收到处理器适配器返回的modelandview之后会将modelandview转发给视图 解析器进行解析,视图解析器解析之后会将解析出的真正的物理视图返回给前端控制器
5.前端控制器将视图解析器解析出的物理视图进行封装渲染,
6.前端控制器将渲染之后的页面响应给用户
二:基于配置式的springMVC入门程序
1.创建web工程,导入jar包
文章图片
2.找到springmvc的核心控制器,并且在web.xml中配置核心控制器
文章图片
web.xml
springmvcDemo
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
springmvc
org.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-config.xml
springmvc
*.do
3.配置springmvc核心配置文件 -- springmvc-config.xml
文章图片
itemsControlleritemsController
4.创建controller类
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;
}}
5.编写jsp页面
商品ID
商品名称
商品价格
商品生产日期
商品图片
商品简介
操作选项
${items.id }
${items.name }
${items.price }
文章图片
${items.detail }
修改 | 删除
【springMVC学习笔记---day01基础】
6.浏览器测试运行
文章图片
三:基于注解式的springmvc开发配置
1.注解式开发介绍: 注解式处理器映射器,对类中标记 @RequestMapping 的方法进行映射,根据@RequestMapping中定义的 url 匹配标记的方法,匹配成功返回 HandlerMethod 对象给前端控制器,HandlerMethod 对象中封装有 ur 对应的方法Methodl
2.配置springmvc核心配置文件 -- springmvc-config.xml
3.编写controller层
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 = "https://www.it610.com/article/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;
}}
四:@RequestMapping注解详解
1.作用:配置url的映射关系 value:默认就是value属性.属性是一个数组类型,可以配置多个url映射到一个方法上
method:支持的HTTP方法。postgetputdelete,如果不写method属性,则默认所有方法都可以使用
//@RequestMapping("/list.action")
@RequestMapping(value=https://www.it610.com/article/{"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;
}
2.@RequestMapping注解不仅可以加在方法上,还可以加在类上。可以出现多级目录 五:controller中方法的返回值
1、ModelAndView:包含模型数据和逻辑视图两部分 2、String:代表逻辑视图 (1).页面跳转: 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";
}
3.void:没有返回值,一般用在ajax请求中,需要request和response参数
@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);
}
六:企业开发中常用的开发方式
1.详细说明: 企业开发中,Controller层一般不返回ModelAndView,一般情况下返回值为String或者void,并且在springmvc核心配置文件中配置视图解析器的前后缀
2.修改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 = "https://www.it610.com/article/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";
}
}