springMVC

本文详细介绍了SpringMVC的基础配置、请求响应处理、RESTful风格开发、SSM整合、拦截器及异常处理等核心内容,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一,springMVC简介

1.初始SpringMvc

 2.入门案例

 3.bean加载配置

二.请求与响应

1.设置请求映射路径

 2.请求(get和post)

<1>get和post请求接收普通信息参数

 <2>解决post请求的中文乱码

<3>数据名和参数名不同:@RequestParm("数据名")

<4>接收pojo的对象

 <5>pojo中含由引用类型

<6>数组参数

<7>集合对象

<8>json数据的接收

​编辑

<4>日期型数据传递

3.响应@ResponseBody

(1)对象转json

 (2)集合对象转json

三.Rest风格

1.简介

2.入门案例

<1>在@RequestMapping中有一个属性,method = RequestMethod.请求方式

<2>@PathVariable和路径上的{参数名}

<3>@PathVariable和@RequestBody和@RequestParm三个注解的使用区别

 3.简化开发@RestController和@PostMapping。。。等等

4.过滤器类,防止SpringMvc拦截web端资源

四.SSM整合

1.整合配置

2.功能模块开发

3.接口测试

4.表现层封装

<1>定义Result数据实体类

 <2>定义状态码

 <3>把表现层的方法的返回值都设置为Result类型

 5.异常处理(AOP的思想)

<1>添加@RestControllerAdvice的注解

<2>在异常处理方法上添加 @ExceptionHandler的注解

 <3>返回异常数据

6.前端与后端联合

    五.拦截器

 1.制作拦截器

<1>声明拦截器的bean并且实现HanderInterceptor接口的三个方法添加@Component

 <2>定义配置类,继承WebMvcConfigurationSupport,实现addInterceptor方法

<3>添加拦截器访问路径​编辑

 2.拦截器参数

3.拦截器链

<1>我们做两个拦截器的bean,1和2,两个内容基本类似

 <2>两个bean都注入 

<3>运行结果


一,springMVC简介

1.初始SpringMvc

 

 2.入门案例

<1>

 <2>

 <3>

 <4>

 

<!--    、第一步导入servlet和springmvc的坐标-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.12.RELEASE</version>
    </dependency>

<5>

package com.wrx.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


//第二步:定义controller
@Controller
public class UserController {
    @RequestMapping("/save")//访问路径
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String save(){
        System.out.println("save....   be  succeeding");
        return "Holle,springMvc";
    }

}

<6> 

package com.wrx.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

//3.创建springMvc的配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.wrx")
public class SpringMvcConfig {

}

 <7>

package com.wrx.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
//4.定义一个servlet容器启动的配置类,在里面加载spring配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
//    加载springMvc容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx= new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;

    }
//设置哪些请求归springmvc
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

<8>tomcat7的插件

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
      <configuration>
        <port>8081</port>
        <path>/</path>
      </configuration>
    </plugin>
  </plugins>
</build>

<9>运行

 

 新增知识点:

 

 

                         入门案例做完之后就无需再做,这些都是固定的,只有controller控制器类是需要多次进行的工作。

工作流程:

 3.bean加载配置

        现在有一个小问题,就是spring和springmvc在加载bean时候如何加载各自的bean而不出现加载错误的bean:例如spring加载到springmvc的bean

        解决方案1:

我们在各自的配置类里在注解处精确到各自的bean所在的包

        解决方案2:

可以写大范围的扫描范围,但是排除掉不需要扫描的

 简化开发格式:

public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringMvcConfig.class};//加载SpringMvc配置
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{springConfig.class};//加载Spring配置
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};//SpringMvc拦截所有请求
    }
}

二.请求与响应

1.设置请求映射路径

当我们的业务层出现了相同的路径会报错,这种的处理方式。

 

 这种情况我们可以在类名上面加上一个访问前缀。

 @ResquestMapping的注解不仅可以加在方法上,还可以加载类上面,在类上面就是放访问前缀。我们用不同的访问前缀就可以规避相同的访问路径问题。

 2.请求(get和post)

<1>get和post请求接收普通信息参数

如何接收post和get请求发过来的普通数据信息?

我们只需要在接受数据的方法体加上同名参数即可。

请求:

 服务端:

运行结果:

 <2>解决post请求的中文乱码

在servlet容器启动的配置类里重写一个字符编码过滤方法

//字符编码过滤器
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter Filter = new CharacterEncodingFilter();
        Filter.setEncoding("utf-8");
        return new Filter[]{Filter};
    }

<3>数据名和参数名不同:@RequestParm("数据名")

 我们看到数据名和参数名不相同,这是没办法传递数据的。这时候我们添加一个新的注解

 @RequestParm("数据名")

 在注解里添加数据名就可以了。

<4>接收pojo的对象

只需要数据名和实体类的数据名相同即可,方法体的参数为实体类对象

 

 

 <5>pojo中含由引用类型

在发送请求时,数据名稍加处理即可:引用名.数据名(这里数据名要与引用类型的pojo的数据名形同)

address为引用类型

 

 

 运行结果:

<6>数组参数

传递数据的数据名与数组的对象名一致就可以了。

 

<7>集合对象

第一:数据名与对象名相同

第二:在方法的参数前加上@RequestParm注解

 

 运行结果:

<8>json数据的接收

(1)加坐标

   <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

(2)

(3)加@EnableWebMvc注解开启自动转换json数据的支持

(4) 加@RequestBody注解,设置接受json数据

******json数组:集合存普通类型   json格式

 

运行结果:  

*******json对象:pojo实体对象存储  json数据

 

 *******json对象:list<>保存多个对象   json数据

 

<9>日期型数据传递

(1)springmvc的日期默认格式

 结果:

如何修改不一样的日期格式呢??

(2)@DateTimeFoermat(pattern = "yyyy-MM-dd")@DateTimeFoermat(pattern = "yyyy/MM/dd HH:mm:ss")

2022-08-18               springmvc默认

2022/08/18                @DateTimeFoermat(pattern = "yyyy-MM-dd")

2022/08/18 08:22:22 @DateTimeFoermat(pattern = "yyyy/MM/dd HH:mm:ss")

注意传数据时候数据名和参数名一致。

3.响应@ResponseBody

要想响应json数据,需要使用一个注解@ResponseBody

(1)对象转json

                只要在方法体上加上@ResponseBody注解,创建实体对象并且使用set方法注入数据即可,然后返回,即可响应json(依赖json坐标完成)

 (2)集合对象转json

方法与(1)基本相同,只要响应就会转json

三.Rest风格

1.简介

2.入门案例

第一:

 第二:

 

 

 rest风格,主要是请求方式和路径的组合。

<1>在@RequestMapping中有一个属性,method = RequestMethod.请求方式

        我们通过这个属性修改请求方式。

//  1.保存/新增使用POST请求
    @RequestMapping(value = "/users",method = RequestMethod.POST)
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String save(){
        System.out.println("save保存....   be  succeeding");
        return "Hello,springMvc保存功能";
    }
    //  2.查询 使用GET请求
    @RequestMapping(value = "/users",method = RequestMethod.GET)
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String Select(){
        System.out.println("select查询全部....   be  succeeding");
        return "select查询全部功能";
    }
    //  3.修改 使用PUT请求
    @RequestMapping(value = "/users",method = RequestMethod.PUT)
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String Update(){
        System.out.println("修改功能....   be  succeeding");
        return "访问修改功能.....";
    }

<2>@PathVariable和路径上的{参数名}

当传递单个参数时我们在方法体的参数前加上@PathVariable,并且在路径上加上{参数名},这里的参数名和方法体的参数名相同。

//  4.删除单个用户信息 使用DELETE请求,使用@PathVariable注解,访问路径新增{参数名}
    @RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String Delete(@PathVariable Integer id){
        System.out.println("删除功能....   be  succeeding");
        return "访问删除功能.....";
    }
    //   5.指定单个用户查询 GET请求 使用@PathVariable注解,访问路径新增{参数名}
    @RequestMapping(value = "/users/{id}",method = RequestMethod.GET)
    @ResponseBody//返回值类型:返回的整体数据进行响应
    public String SelectByID(@PathVariable Integer id){
        System.out.println("selectById....   be  succeeding   id:"+id);
        return "selectById功能id为:"+id;
    }

<3>@PathVariable@RequestBody@RequestParm三个注解的使用区别

 3.简化开发@RestController@PostMapping。。。等等

1.

2. 

 3.

 4.

 新的知识点:

4.过滤器类,防止SpringMvc拦截web端资源

package com.wrx.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//        当访问/pages/**时,走/pages/
       registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
       registry.addResourceHandler("/js/**").addResourceLocations("/js/");;
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");;
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");;
    }


}

四.SSM整合

1.整合配置

2.功能模块开发

3.接口测试

4.表现层封装

<1>定义Result数据实体类

在Controller层定义一个Result的实体类,用于表现层封装数据

 <2>定义状态码

静态属性和全局变量

 <3>把表现层的方法的返回值都设置为Result类型

 5.异常处理(AOP的思想)

        我们处理异常的方式是把数据层,业务层的异常全部抛到表现层,由表现层统一处理。

<1>添加@RestControllerAdvice的注解

创建异常处理类,并且添加 @RestControllerAdvice的注解,声明这个类是用来做异常处理的

<2>在异常处理方法上添加 @ExceptionHandler的注解

      拦截所有异常

 <3>返回异常数据

6.前端与后端联合

    五.拦截器

 

 

 1.制作拦截器

<1>声明拦截器的bean并且实现HanderInterceptor接口的三个方法添加@Component

 <2>定义配置类,继承WebMvcConfigurationSupport,实现addInterceptor方法

加好@Configuration,方便加载

<3>添加拦截器访问路径

 1.

2. 

3.  加载拦截器配置

 4.效果

 2.拦截器参数

 

  1.对于request。我们可以通过它的方法getHandler()来获取请求的数据

  2.对于reponse同理

  3.对于handler,我们拦截的那个方法,handler就是这个方法的对象,可以对被拦截的对象进行操作,使用它的方法。

 

 

 spring有异常处理机制,不用使用这个。

3.拦截器链

如何配置多个拦截器??例如两个

<1>我们做两个拦截器的bean,1和2,两个内容基本类似

 <2>两个bean都注入 

先配置那个路径。先执行那个过滤器

<3>运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值