• JavaEE、SpringMVC


    目录

    一、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、导入坐标

    1. <dependencies>
    2. <dependency>
    3. <groupId>javax.servletgroupId>
    4. <artifactId>javax.servlet-apiartifactId>
    5. <version>3.1.0version>
    6. <scope>providedscope>
    7. dependency>
    8. <dependency>
    9. <groupId>org.springframeworkgroupId>
    10. <artifactId>spring-webmvcartifactId>
    11. <version>5.2.10.RELEASEversion>
    12. dependency>
    13. dependencies>

    2、配置类

    1. @Configuration
    2. @ComponentScan("com.itheima.controller")
    3. public class SpringMVCConfig {
    4. }

    3、Controller

    1. @Controller
    2. public class BookController {
    3. @RequestMapping("/save")
    4. //将返回的数据转为json格式
    5. @ResponseBody
    6. public String save(){
    7. System.out.println("save run ..");
    8. return "{'ADASD':'454'}";
    9. }
    10. }

    4、Servlet容器启动配置类

    1. //定义一个Servlet容器启动的配置类,在里面加载spring的配置
    2. public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    3. //创建Servlet容器时,初始化Web容器
    4. @Override
    5. protected WebApplicationContext createServletApplicationContext() {
    6. AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    7. ctx.register(SpringMVCConfig.class);
    8. return ctx;
    9. }
    10. //设置哪些请求归属springMVC管理
    11. @Override
    12. protected String[] getServletMappings() {
    13. return new String[]{"/"};
    14. }
    15. @Override
    16. protected WebApplicationContext createRootApplicationContext() {
    17. return null;
    18. }
    19. }

    三、入门案例流程分析

    四、SpringMVC加载控制

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

    1、方式一

    1. @Configuration
    2. //扫描包中的bean但是排除扫描注解类型的包Controller
    3. @ComponentScan(value = "com.itheima",
    4. excludeFilters = @ComponentScan.Filter(
    5. type = FilterType.ANNOTATION,
    6. classes = Controller.class
    7. )
    8. )
    9. public class SpringConfig {
    10. }

    2、方式二

    简化SpringMVC开发

    1. public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    2. protected Class[] getRootConfigClasses() {
    3. //springmvc容器
    4. return new Class[]{SpringMVCConfig.class};
    5. }
    6. protected Class[] getServletConfigClasses() {
    7. //spring容器
    8. return new Class[]{SpringConfig.class};
    9. }
    10. protected String[] getServletMappings() {
    11. return new String[]{"/"};
    12. }
    13. }

     五、请求与响应

    1、请求映射路径

    2、controller接收前端参数

    1. @Controller
    2. public class BookController {
    3. @RequestMapping("/save")
    4. @ResponseBody
    5. //声明入参接收前端数据,请求参数的名称必须匹配
    6. public String save(String name){
    7. System.out.println("save run .." + name);
    8. return "{'ADASD':'454'}";
    9. }
    10. }

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

    3、POST请求中文乱码问题

    4、各种请求参数的传递

    1、请求

    1、接收普通参数

    2、接收pojo类型

    3、接收嵌套pojo类型

     

    4、接收数组参数

    5、接收集合参数

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

     6、接收json格式参数

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

     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配置类

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

    Servlet容器

    1. public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    2. protected Class[] getRootConfigClasses() {
    3. //springmvc容器
    4. return new Class[]{SpringMVCConfig.class};
    5. }
    6. protected Class[] getServletConfigClasses() {
    7. //spring容器
    8. return new Class[0];
    9. }
    10. protected String[] getServletMappings() {
    11. return new String[]{"/"};
    12. }
    13. //处理前端传递数据乱码
    14. @Override
    15. protected Filter[] getServletFilters() {
    16. CharacterEncodingFilter filter = new CharacterEncodingFilter();
    17. filter.setEncoding("UTF-8");
    18. return new Filter[]{filter};
    19. }
    20. }

    controller接口

    1. @RestController
    2. @RequestMapping("/books")
    3. public class BookController {
    4. @PostMapping
    5. public String save(@RequestBody Book book){
    6. System.out.println(book);
    7. return "{save..run}";
    8. }
    9. @GetMapping
    10. public List getAll(){
    11. List listBook = new ArrayList();
    12. Book book = new Book("计算机","SpringMVC入门","一代宗师");
    13. Book book2 = new Book("法学","Spring入门","一代宗师");
    14. listBook.add(book);
    15. listBook.add(book2);
    16. return listBook;
    17. }
    18. }

    使用postman测试接口

    post请求

    Get请求

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

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

    1. @Configuration
    2. public class SpringMVCSupport extends WebMvcConfigurationSupport {
    3. @Override
    4. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    5. //当访问/pages/**这个路径时不被mvc拦截,直接访问/pages/下的文件
    6. registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    7. registry.addResourceHandler("/js/**").addResourceLocations("/js/");
    8. registry.addResourceHandler("/css/**").addResourceLocations("/css/");
    9. registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    10. }
    11. }

    七、SSM整合

    八、表现层数据封装

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

     

     

    九、异常处理器  

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

    1、项目异常

     

     

    十、拦截器

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

     

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

     

    1、拦截器的概念

     

  • 相关阅读:
    TDengine3.0流式计算引擎语法规则介绍
    LeetCode 2578. 最小和分割【贪心,排序+奇偶分组】1350
    【CesiumJS-5】绘制动态路线实现飞行航线、汽车轨迹、路径漫游等
    用print学python-列表切片操作,元组定义,遍历
    如何在 JavaScript 中使用 Cache-Control 头来控制缓存?
    H3C 7506X版本tftp升级
    Vue3-shallowRef与shallowReactive
    pdf.js不分页渲染(渲染完整内容)
    【Arduino+ESP32专题】案例:为什么呼吸灯从暗到亮一次后就再也不呼吸了
    腾讯云入侵
  • 原文地址:https://blog.csdn.net/m0_56044262/article/details/126678186