SpringMVC框架重要知识点总结(一)

深入理解B/S与C/S架构.
在这里插入图片描述

一、什么是SpringMVC?

(一)是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。
(二)Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
(三)采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

二、那什么是MVC呢?

MVC(Model-View-Controller,模型-视图-控制器)指把页面、后台的交付分成3层来组成,是一种解决页面代码(视图代码)和后台代码分离的设计思想!!

➢ 模型:指封装数据的数据模型
➢ 视图:指的是页面
➢ 控制器:指接收页面发送数据过来的类

三、为什么要学习SpringMVC ?

首先,可能有人会问我们已经学习了Servlet/JSP了。为什么还要学习SpringMVC呢 ?接下来我们分析一下:

(一)servlet的缺点

①数据类型转化,因为http协议传输的和web容器解析后的都是文本类型,那如果遇到货币、日期之类的,我们就需要大量的转化,繁琐易错。
② servlet只有doGet和doPost,一个servlet类只能处理一个url-pattern。

(二)springMVC的好处

➢ 一个请求对一个方法

➢ 自动支持上传组件,支持各种视图解析器

➢ 自动支持JSON的转成

➢ 支持数据的自动封装

四、SpringMVC能干什么?

  1. 天生与Spring框架集成,如:(IOC,AOP)

  2. 支持Restful风格

  3. 进行更简洁的Web层开发

  4. 支持灵活的URL到页面控制器的映射

  5. 非常容易与其他视图技术集成,如:Velocity、FreeMarker等等

  6. 因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)

  7. 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API

  8. 更加简单、强大的异常处理

  9. 对静态资源的支持

  10. 支持灵活的本地化、主题等解析

五、SpringMVC怎么玩?

(1)入门案例

①创建maven的web项目,导入开发的坐标(spring-context,spring-web,spring-webmvc,servlet-api,jsp-api)
②编写index.jsp主页面和suc.jsp成功页面
③编写controller类(控制器类),方法就可执行

@Controller
public class HolleController {
    @RequestMapping("hello.do")
    public String say(){
        System.out.println("方法执行成功....");
        return "suc";
    }
}

④在web.xml中配置前端控制器

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--加载springMVC.xml配置文件,配置的是spring的配置-->
    <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>

⑤编写springMVC.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!--扫描包-->
    <context:component-scan base-package="cn.tx.demo"/>
    <!--视图解析器-->
    <bean id="resourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--跳转页面的路径-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--跳转页面的后缀名称-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

⑥启动Tomcat测试

(2)RequestMapping注解

RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
RequestMapping注解可以作用在方法和类上
作用在类上:第一级的访问目录
作用在方法上:第二级的访问目录

细节:路径可以不编写 / 表示应用的根目录开始

RequestMapping的属性
①path :指定请求路径的url; ② value: value属性和path属性是一样的;
③mthod: 指定该方法的请求方式; ④ params: 指定限制请求参数的条件;

六、请求参数的绑定

①绑定机制
1、表单提交的数据都是k=v格式的 username=haha&password=123;
2、SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的;
3、要求:提交表单的name和参数的名称是相同的
②支持的数据类型
1、基本数据类型和字符串类型;2、实体类型(JavaBean);3、集合数据类型(List、map集合等);4、基本数据类型和字符串类型;5、如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name;
③给集合属性数据封装:JSP页面编写方式:list[0].属性

(一)请求参数中文乱码的解决

在web.xml中配置过滤器

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!-- 指定字符集 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(二)自定义类型转换器(解决日期问题)

①第一种方式使用DateTimeFormat注解的方式
直接在要转换格式的日期属性上加注解
例如:@DateTimeFormat(pattern = “yyyy-MM-dd”)

②第二种方式,自定义类型转换器。如果想自定义数据类型转换,可以实现Converter的接口

//自定义类型转换器 把String转换成Date
public class StringToDate implements Converter<String,Date> {
    public Date convert(String s) {
        /*进行数据类型转换的方法*/
        if(s == null){
            throw new RuntimeException("请输入内容");
        }
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ss");
        try {
            //进行转换
            return sdf.parse(s);
        } catch (ParseException e) {
            //抛出运行异常
            throw new RuntimeException(e);
        }
    }
}

springMVC.xml中注解

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="自定义类型转换器路径"/>
        </set>
    </property>
</bean>

<!--让映射器、适配器和处理器生效(默认不配置也是可以的)-->
<mvc:annotation-driven conversion-service="conversionService" />

七、常用注解

(一)RequestParam注解

作用:把请求中的指定名称的参数传递给控制器中的形参赋值

属性:value:请求参数中的名称;
required:请求参数中是否必须提供此参数,默认值是true,必须提供;
defaultValue:如果没有传请求参数,使用默认值;

(二)RequestBody注解

作用:用于获取请求体的内容(注意:get方法不可以)
属性:required:是否必须有请求体,默认值是true;

(三)PathVaribale注解

作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符;
属性:value:指定url中的占位符名称;
Restful风格的URL:请求路径一样,可以根据不同的请求方式去执行后台的不同方法;
restful风格的URL优点:结构清晰、符合标准、易于理解、扩展方便;

①编写新的controller
@Controller
public class EmpController {
    @RequestMapping(path = "/emp",method = RequestMethod.POST)
    public String save(){
        System.out.println("保存数据....");
        return "suc";
    }
    @RequestMapping(path = "/emp",method = RequestMethod.GET)
    public String findAll(){
        System.out.println("查询数据....");
        return "suc";
    }
    @RequestMapping(path = "/emp/{id}",method = RequestMethod.GET)
    public String findById(@PathVariable(value = "id")Integer id){
        System.out.println("通过id查询员工...."+id);
        return "suc";
    }
}
②修改前端控制器的配置文件
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

(四)RequestHeader注解

作用:获取指定请求头的值;
属性:value:请求头的名称;

@RequestMapping("/save3.do")
    public String save3(@RequestHeader(value = "Accept") String header){
        System.out.println("Accept请求头的值:"+header);
        return "suc";
    }

(五)CookieValue注解

作用:用于获取指定cookie的名称的值;
属性:value:cookie的名称

@RequestMapping("/save4.do")
    public String save4(@CookieValue(value = "JSESSIONID") String cookie){
        System.out.println("值:"+cookie);
        return "suc";
    }

SpringMVC框架重要知识点总结(二)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java亮小白1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值