什么是mvc?
Model 模型(模型的定义【pojo】、模型的实现【dao、service】)
View 视图 (html/jsp/freemarker)
Controller 控制器 (servlet/filter /springmvc提供的controller/struts2提供的action
mvc是一种设计模式。表现层用到的设计思想。
SpringMVC
1)SpringMVC就是基于MVC设计模型的表现层(Web)框架
2)SpringMVC已经完全超越Struts2
3)使用了SpringMVC可以编写简单Java类作为控制器(代替Servlet)
SpringMVC功能:
1)接收参数(封装参数数据)
2)调用业务层
3)把数据存入域对象 或 转换为json
4)跳转页面(转发和重定向)
SpringMVC 入门程序
1.创建web项目,导入依赖(spring-webmvc)
2.配置web.xml,配置核心前端控制器(DispathcerServlet)
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springMVC.xml
1
dispatcherServlet
*.do
3.编写控制器
package com.huihui.controller.a_hello;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 控制器(Handler)
* 1.作用:
* 1)接收请求
* 2)处理响应
*
* 2.要求
* 2.1 控制器必须交给SpringIOC容器管理 , 加上@Controller注解
* 2.2 在控制器提供请求处理方法,在方法上声明接收什么样的请求 (@RequestMapping)
*/
@Controller
public class HelloController {
/**
* 请求路径: http://localhost:8080/hello.do
* 响应地址: /pages/success.jsp
* 把响应地址进行拆解:
* 1)前缀:/pages/
* 2)页面名称:success
* 3)后缀:.jsp
*
* @return 只需要返回页面名称即可
*/
@RequestMapping("/hello.do")
public String hello(){
System.out.println("进入了HelloController控制器...");
return "success";
}
}
4.配置springMVC.xml
5.Tomcat部署测试
三大组件
1)处理器映射器: HandlerMapping (在流程第11步)
作用:根据用户访问路径匹配控制器的方法(找方法)
可以选择使用XML或注解方式来映射方法,通常推荐使用注解@RequestMapping
2)处理器适配器:HandlerAdatper (在流程第12步)
作用:执行控制器的方法(执行方法)
3)视图解析器:ViewResolver (在流程第14步)
作用:把页面名称解析为完整的访问地址(解析页面)
面试题: 请说出SpringMVC的执行流程?
1)SpringMVC执行流程中涉及三大组件:
分别为:
处理器映射器
处理器适配器
视图解析器
2)当前用户发出请求时,请求先交给DispathcerServlet前端控制器执行,
DispathcerServlet会交给doDispathch方法处理
doDispathch方法里面分别有三行核心代码:
1)处理器映射器匹配控制器的方法: getHandler
2)处理器适配器执行上面找到的方法:handle
3)上面执行方法会返回页面名称,通过视图解析器解析为完整页面地址,然后转发页面:
processDispatchResult
自定义类型转换器
有时我们需要从前端传递日期类型到后端,但是SpringMVC无法转换字符串为Date日期类型。这时我们可以通过自定义类型转换器,实现把请求参数值转换为指定的类型。
定义类型转换器
package com.huihui.controller.utils;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 日期类型转换器(字符串->日期)
* 泛型一:源类型
* 泛型二:目标类型
*/
public class StringToDateConverter implements Converter{
//编写转换的代码
/**
*
* @param s: 页面传递的字符串
* @return
*/
@Override
public Date convert(String s) {
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(s);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
在springMvc配置类型转换
请求参数绑定(四)@RequestParam实现参数绑定
需求
当请求参数名称与方法形参不一致时候,如何封装请求数据?
@RequestParam
- 应用场景:当请求参数名称与方法形参不一致时候使用
- 建立请求参数与方法形参的映射关系
// @RequestParam的使用
/**
* 1.位置问题
* 放在参数上
* 2.属性问题
* value: 页面传递的参数名称
* required: 是否必须传递这个参数
* true:必须传递(默认值)
* false:不是必须
* default: 默认值
* 只有在不传递这个参数的情况下才使用默认值
* 应用场景:在分页的时候,页面传递pageNum,pageSize,查询第一页的时候往往不传递pageNum,pageSize参数,这时给pageNum,pageSize设置默认值
*/
@RequestMapping("/find")
public String find(@RequestParam(value ="username",required = false,defaultValue = "jack") String name){
System.out.println(name);
return "success";
}