JavaEE、SpringMVC

发布于:2022-12-27 ⋅ 阅读:(569) ⋅ 点赞:(0)

目录

一、SpringMVC简介

二、SpringMVC快速入门

1、导入坐标

2、配置类

3、Controller

4、Servlet容器启动配置类

三、入门案例流程分析

四、SpringMVC加载控制

1、方式一

2、方式二

简化SpringMVC开发

 五、请求与响应

1、请求映射路径

2、controller接收前端参数

3、POST请求中文乱码问题

4、各种请求参数的传递

1、请求

1、接收普通参数

2、接收pojo类型

3、接收嵌套pojo类型

4、接收数组参数

5、接收集合参数

 6、接收json格式参数

 7、接收json对象

 8、接收日期类型参数

2、响应

1、响应页面

 2、响应文本数据

 3、响应json数据(将对象自动转json)

 4、@ResposeBody​编辑

六、REST风格

 1、快速入门

 @RequestMapping

 @PathVariable

2、RESTful快速开发

1、@RestController

 2、提交方式

3、基于RESTful实现数据交互

1、测试后台controller接口

 2、连接前后端进行数据交互(html页面被拦截)

七、SSM整合

八、表现层数据封装

九、异常处理器  

1、项目异常

十、拦截器

1、拦截器的概念


一、SpringMVC简介

二、SpringMVC快速入门

1、导入坐标

<dependencies>
      <!--导入Servlet坐标-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
      <!--导入MVC坐标-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

  </dependencies>

2、配置类

@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMVCConfig {
}

3、Controller

@Controller
public class BookController {

    @RequestMapping("/save")
    //将返回的数据转为json格式
    @ResponseBody
    public String save(){
        System.out.println("save run ..");
        return "{'ADASD':'454'}";
    }
}

4、Servlet容器启动配置类


//定义一个Servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //创建Servlet容器时,初始化Web容器
    @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;
    }
}

三、入门案例流程分析

四、SpringMVC加载控制

由于SpringMVC只控制controller层的bean,而Spring在进行包扫描时又会加载到controller层的bean,所以在Spring中要修改包扫描的方式

1、方式一

@Configuration
//扫描包中的bean但是排除扫描注解类型的包Controller
@ComponentScan(value = "com.itheima",
    excludeFilters = @ComponentScan.Filter(
            type = FilterType.ANNOTATION,
            classes = Controller.class
    )
)
public class SpringConfig {
}

2、方式二

简化SpringMVC开发

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{

    protected Class<?>[] getRootConfigClasses() {
        //springmvc容器
        return new Class[]{SpringMVCConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        //spring容器
        return new Class[]{SpringConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

 五、请求与响应

1、请求映射路径

2、controller接收前端参数

@Controller
public class BookController {

    @RequestMapping("/save")
    @ResponseBody

    //声明入参接收前端数据,请求参数的名称必须匹配
    public String save(String name){
        System.out.println("save run .." + name);
        return "{'ADASD':'454'}";
    }
}

方法参数内部使用了@RequestParam注解将请求参数名称与方法参数名称绑定

3、POST请求中文乱码问题

4、各种请求参数的传递

1、请求

1、接收普通参数

2、接收pojo类型

3、接收嵌套pojo类型

 

4、接收数组参数

5、接收集合参数

要在集合参数前加上@RequestParam注解,将传递的数据作为集合的参数,否则会自动将这个List<String>作为一个pojo,创建这个pojo的对象,而list是接口不能创建对象,会报错

 6、接收json格式参数


    @RequestMapping("/json")
    @ResponseBody
    //将前端传递的json参数转为pojo对象
    public String json(@RequestBody List<String> likes){
        System.out.println(likes);
        return "{'ADASD':'454'}";
    }

 7、接收json对象

 

 8、接收日期类型参数

 

2、响应

1、响应页面

 2、响应文本数据

 3、响应json数据(将对象自动转json)

 4、@ResposeBody

 类型转换内部实现HttpMessageConverter接口

六、REST风格

 1、快速入门

 @RequestMapping

 @PathVariable

2、RESTful快速开发

1、@RestController

 2、提交方式

使用@PathVariable注解获取路径中的参数,@GetMapping("/{id}")表示以get方式提交路径参数为id的数据,通过@PathVariable获取这个数据

3、基于RESTful实现数据交互

1、测试后台controller接口

SpringMVC配置类

@Configuration
@ComponentScan("com.itheima")
//开启json转对象的功能
@EnableWebMvc
public class SpringMVCConfig {
}

Servlet容器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{

    protected Class<?>[] getRootConfigClasses() {
        //springmvc容器
        return new Class[]{SpringMVCConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        //spring容器
        return new Class[0];
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //处理前端传递数据乱码
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

controller接口

@RestController
@RequestMapping("/books")
public class BookController {

    @PostMapping
    public String save(@RequestBody Book book){
        System.out.println(book);
        return "{save..run}";
    }

    @GetMapping
    public List<Book> getAll(){
        List<Book> listBook = new ArrayList<Book>();

        Book book = new Book("计算机","SpringMVC入门","一代宗师");
        Book book2 = new Book("法学","Spring入门","一代宗师");
        listBook.add(book);
        listBook.add(book2);

        return listBook;
    }

}

使用postman测试接口

post请求

Get请求

 2、连接前后端进行数据交互(html页面被拦截)

由于所有路径为"/"的数据都被mvc拦截,所以需要对其他静态页面的路径进行放行,记得添加@Configuration,并在SpringMVCConfig中扫描到这个配置类

@Configuration
public class SpringMVCSupport extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //当访问/pages/**这个路径时不被mvc拦截,直接访问/pages/下的文件
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}

七、SSM整合

八、表现层数据封装

由于前后端交互,后端向前端发送数据库操作的信息并返回,这时需要与前端进行传递数据的约定,将不同的结果封装成msg对象。

 

 

九、异常处理器  

//定义异常处理器
//为Rest风格开发的控制器类做增强
@RestControllerAdvice
public class ProjectExceptionAdvice {
    //定义当前处理器拦截哪种异常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex){
        return new Result(555,"后台出异常了",null);
    }
}

1、项目异常

 

 

十、拦截器

浏览器访问的过程:浏览器先通过路径向tomacat服务器发送请求,静态资源可以直接访问,动态资源需要先通过过滤器进去Spring中的中央控制器,再由中央控制器根据路径分配不同的Controller,再由这个Controller返回给页面

 

现在需要加上新的业务,在Controller的执行前后都做一些固定的事情,比如权限校验,是否有权限调用这个Controller,拦截器就能够实现这个方法。

 

1、拦截器的概念

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到