springMVC基础入门-day01

什么是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执行流程图

自定义类型转换器

有时我们需要从前端传递日期类型到后端,但是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

  1. 应用场景:当请求参数名称与方法形参不一致时候使用
  2. 建立请求参数与方法形参的映射关系
// @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";
    }

你可能感兴趣的:(springMVC基础入门-day01)