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

<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、拦截器的概念

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值