SpringMVC请求与响应

SpringMVC简介

        SpringMVC概述

                SpringMVC是一种基于java实现MVC模型的轻量级Web框架

        优点 :
                1.使用简单,便捷开发

                 2.灵活性强

SpringMVC入门案例

        先设置SpringConfig容器

package hammer.config;

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

@Configuration
//加载controller对应的bean
@ComponentScan("hammer.Control")
public class SpringMvcConfig {
}

       使用@Controller ,使用@Controler定义bean        

        

    package hammer.Control;

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

    @Controller
    public class UserController {
        @RequestMapping("/save")
        //设置当前操作的访问路径
        @ResponseBody
        public String save(){
            System.out.println("user save");
            return "{'info':'springmvc'}";//json数据
        }
        @RequestMapping("/delete")
        @ResponseBody
        public String delete(){
            System.out.println("刘芳安帅哥");
            return "{刘芳安帅哥}";
        }
    }

定义一个servlet容器启动的配置类,在里面加载spring 的配置

        

package hammer.config;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
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 ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        //创建Web对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载对应的SpringMVCConfig加载配置
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }
    //设置那些请求归属springMVC处理
    @Override
    protected String[] getServletMappings() {
        //所有请求归springMvc处理
        return new String[]{"/"};
    }

    //加载spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

入门案例工作流程分析

        启动服务器初始化过程

               1.服务器启动,执行ServletContainersInitConfig类,初始化web容器

                2.执行createServletApplicationContext方法,创建了WebApplicationContext对象

                3.加载SpringMvcConfig

                4.执行@ComponentScan加载对应的bean

                5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

                6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

        再Controller加载控制和业务bean加载控制有一个简化开发的方法

                


//1.简化开发
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {


    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

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

在这里推荐一个好用的api (不知道为什么postman一直使用不成功)runapi在线版

感觉挺好用的

@Controller
@RequestMapping("book")
public class BookController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("booksave win!");
        return "{module:save}";
    }
}

这个请求映射路径可以设置在类上面,也可以设置在方法上面,在实际开发的时候,建议按照标准来,因为方法的路径名可能一致,所以在类上面进行一个路径的区分

get请求与post请求发送普通参数

        1.普通参数怎么接

                外面发送参数,后面直接从形参之中就可以接收

        

public class BookController {
    @RequestMapping( "/save")
    @ResponseBody
    public String save(String name,int age){
        System.out.println("name"+name+","+age);
        return "{module:save}";
    }
}

但是在测试的时候有中文乱码问题 

        这个时候就需要在SpringMVC上面编写一个字符过滤器,设置一下编码(但是也没有成功)

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }

                最后是在maven里面修改了tomcat的编码格式,问题得以解决

<plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>

请求与响应

        参数种类        

         pojo类型参数

        嵌套pojo类型参数

        数组类型参数(传参是几个相同的就可以接受)

        集合类型参数

@Controller
@RequestMapping( "book")
public class BookController {
    @RequestMapping( "/save")
    @ResponseBody
    public String save(String name,int age){
        System.out.println("name"+name+","+age);
        return "{module:save}";
    }

    //普通参数:请求参数与形参名不同
    @RequestMapping( "/save1")
    @ResponseBody
    public String saved(@RequestParam("name") String username, int age){
        System.out.println("name"+username+","+age);
        return "{module:save}";
    }

    //pojo参数
    //只要属性名对应,可以直接加载进去
    @RequestMapping( "/save2")
    @ResponseBody
    public String saved(user user){
        System.out.println("name"+user.getName()+","+user.getAge());
        return "{module:save}";
    }

    //嵌套pojo参数
    //类似以上,就算如果有嵌套的类型,需要加上类似address.xxx 赋值计科
    @RequestMapping( "/save3")
    @ResponseBody
    public String save3(user user){
        System.out.println("name"+user.getName()+","+user.getAge());
        return "{module:save}";
    }
}

传递json数据

名称:@EnableWebMvc

类型:配置类注解

位置:SpringMVC配置类定义上方

作用:开启SpringMVC多项辅助功能  功能之一为根据类型匹配对应的类型转化器

范例:

@Configuration
//加载controller对应的bean
@ComponentScan("hammer.Control")
@EnableWebMvc
public class SpringMvcConfig {
}

名称:@RequestBody

类型:形参注解

 位置:SpringMVC控制器方法形参定义前面

作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

 范例:

//集合参数:json格式
    @RequestMapping( "/save6")
    @ResponseBody
    public String save6(@RequestBody List<user> user){
        System.out.println("List集合参数传递"+user.toString());
        return "{module:save}";
    }

日期型参数传递

        日期类型数据基于系统不同格式也不尽相同

                2008-08-18

                2088/08/18

                08/18/2088

        接受形参时,根据不同的日期格式设置不同的接收方式

@RequestMapping( "/save7")
    @ResponseBody
    //日期要对上格式
    public String datesave(Date date,
                           @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
                           @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date2){
        System.out.println("date参数传递"+date);
        System.out.println("date1参数传递"+date1);
        return "{module:save}";
    }

        

响应

             在做这个案例的时候,发现一直不能进行一个跳转,最后发现是给类加请求映射,不然地址栏返回的类的映射加上资源的名字,导致路径错误,将其去掉可以正常运行

        

 @RequestMapping("/save8")
    public String toJump(){
        System.out.println("页面跳转");
        return "index.jsp";
    }

对于SpringMVC他对返回值的要求默认就是一个字符串 ,

        

@RequestMapping("/save9")
    public user toJ(){
        System.out.println("页面跳转");
        user u = new user();
        u.setAge(18);
        u.setName("刘芳安");
        return u;
    }

这样是不行的

必须要加上@ResponseBody注解,会自动给我们进行转json操作

@ResponseBody

        类型:方法注解

        位置:SpringMVC控制器方法定义上方

        作用:设置当前控制器返回值作为响应体

        范例:

//响应pojo对象
        @RequestMapping("/save9")
        @ResponseBody
        public user toJ(){
            System.out.println("页面跳转");
            user u = new user();
            u.setAge(18);
            u.setName("刘芳安");
            return u;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值