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)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">


	<!-- SpringMVC的核心前端控制器  -->
	<!-- 
	   DispatcherServlet: 核心前端控制器
	       url-pattern: 配置该控制器拦截的路径  例如: *.do ,接收页面以.do结尾的请求
	                   http://localhost:8080/hello.do
	       contextConfigLocation参数:读取springMVC的核心配置     
	               classpath:springMVC.xml: 读取项目的类路径下springMVC.xml文件
	       load-on-startup:   把Servlet的创建从第一次访问改为项目加载(Tomcat启动)     
	-->
	
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>


</web-app>

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 1.扫描控制器所在的包 -->
    <context:component-scan base-package="com.huihui.controller"/>
    
    <!-- 2. 配置视图解析器: 把页面名称解析成完整的页面地址(加前缀,加后缀) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀-->
        <property name="prefix" value="/pages/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 3.配置SpringMVC注解驱动
      注意:必须导入mvc结尾的配置
     -->
    <mvc:annotation-driven/>
</beans>

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<String,Date>{

    //编写转换的代码

    /**
     *
     * @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配置类型转换
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 1.扫描控制器所在的包 -->
    <context:component-scan base-package="com.huihui.controller"/>

    <!-- 2. 配置视图解析器: 把页面名称解析成完整的页面地址(加前缀,加后缀) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀-->
        <property name="prefix" value="/pages/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 3.配置SpringMVC注解驱动
      注意:必须导入mvc结尾的配置
     -->
    <mvc:annotation-driven conversion-service="conversionService"/>

    <!-- 创建处理器映射器 -->
    <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>-->
    <!-- 创建处理器适配器 -->
    <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>-->

    <!-- 创建类型转换器 -->
    <bean id="stringToDateConverter" class="com.huihui.controller.utils.StringToDateConverter"/>

    <!-- 配置自定义类型转换器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <!-- 创建项目定义所有类型转换器 -->
        <property name="converters">
            <set>
                <ref bean="stringToDateConverter"/>
            </set>
        </property>
    </bean>
</beans>

请求参数绑定(四)@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";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值