栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring学习日记4(SpringMVC的请求与响应)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring学习日记4(SpringMVC的请求与响应)

Spring的数据响应

Spring数据响应的方式

页面跳转:直接返回字符串,通过ModelAndView对象返回

回写数据:直接返回字符串,返回对象或者集合

页面跳转:

直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。 

 通过ModelAndView对象返回

 @RequestMapping("/quick1")
    
    public ModelAndView quick1(ModelAndView modelAndView){
     //容器会自动注入对象
        modelAndView.setViewName("/success.jsp");
        return modelAndView;
    }

可以拆成Model和View分开使用

回写数据:

直接返回字符串:

1:原生javaweb方法

  @RequestMapping("/quick2")
    public void quick2(HttpServletResponse httpServletResponse) throws IOException {
        //原生javaweb方法
        httpServletResponse.getWriter().print("hello");
    }

 2:将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,        方法返回的字符串不是跳转是直接在http响应体中返回。

    @RequestMapping("/quick3")
    @ResponseBody
    public String quick3() {
       return "hello,quick3";
    }
}

返回对象或集合

通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,因此需要在spring-mvc.xml中进行如下配置:

   
//用set方法将处理器适配器里面一个对象注入属性,让对象回写时自动转换成json格式
        
           
            
       
   

上述配置可用以下代码替换

测试代码如下:

@RequestMapping("/quick4")
    @ResponseBody
    public User quick4(){
        User user = new User();
        user.setId(1);
        user.setName("刘某某");
        return user;
    }

结果:

SpringMVC获得请求数据
获得请求参数 

客户端请求参数的格式是:name=value&name=value… …

服务器端要获得请求的参数,有时还需要进行数据的封装,

SpringMVC可以接收如下类型的参数:

基本类型参数

POJO类型参数

数组类型参数

集合类型参数

获得基本类型参数 

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。

@RequestMapping("/quick5")
    @ResponseBody
    public void quick5(String name, int id){
        System.out.println(name);
        System.out.println(id);
    }
 获得POJO类型参数

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

 @RequestMapping("/quick6")
    @ResponseBody
    public void quick5(User user){
        System.out.println(user);
    }
public class User {
    private int id;
    private String name;
}
 获得数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配

@RequestMapping("/quick7")
    @ResponseBody
    public void quick5(String[] strings){
        System.out.println(Arrays.asList(strings));
    }
获得集合类型参数 

获得集合参数时,要将集合参数包装到一个POJO中才可以。 

先将集合封装在对象里

public class VO {
    private List list;

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    @Override
    public String toString() {
        return "VO{" +
                "list=" + list +
                '}';
    }
}

然后设计一个表单


    




 最后测试

@RequestMapping("/quick8")
    @ResponseBody
    public void quick8(VO vo){
        System.out.println(vo);
    }

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装

前端:


后端:

@RequestMapping("/quick9")
    @ResponseBody
    public void quick8(@RequestBody List list){
        System.out.println(list);
    }

注意:通过谷歌开发者工具抓包发现,没有加载到jquery文件,原因是SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,我们可以通过以下两种方式指定放行静态资源:

在spring-mvc.xml配置文件中指定放行的资源      

使用标签

请求数据乱码问题 

设置一个全局过滤器

 
 CharacterEncodingFilter 
  org.springframework.web.filter.CharacterEncodingFilter
  
     encoding
    UTF-8
   

   CharacterEncodingFilter
  /*

参数绑定注解@requestParam

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。

注解@RequestParam还有如下参数可以使用

value:与请求参数名称

required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错

defaultValue:当没有指定请求参数时,则使用指定的默认值赋值 

获得Restful风格的参数

Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

GET:用于获取资源

POST:用于新建资源

PUT:用于更新资源

DELETE:用于删除资源  

下图中的/quick19/{name}中的name是占位符相当于请求地址后面的参数zhansan 

自定义类型转换器 

自定义类型转换器的开发步骤:

定义转换器类实现Converter接口

在配置文件中声明转换器

在中引用转换器 

获得Servlet相关API

直接在参数中注入就行 

HttpServletRequest

HttpServletResponse

HttpSession

@RequestHeader 和 @cookievalue 

使用@RequestHeader可以获得请求头信息

@RequestHeader注解的属性如下:

value:请求头的名称

required:是否必须携带此请求头

使用@cookievalue可以获得指定cookie的值

@cookievalue注解的属性如下:

value:指定cookie的名称

required:是否必须携带此cookie 

文件上传 

文件上传客户端三要素

表单项type=“file”

表单的提交方式是post

表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

文件上传原理 

 

单文件上传

导入fileupload和io坐标

配置文件上传解析器

编写文件上传代码 

 

 

导入fileupload和io坐标


          commons-fileupload
          commons-fileupload
          1.2.2
      
      
          commons-io
          commons-io
          2.4

配置文件上传解析器


    
        
        
        
        
        
        
    

编写文件上传代码 

@RequestMapping("/quick10")
    @ResponseBody
    public void quick8(String name, MultipartFile doc) throws IOException {
//        获取文件名称
        String filename = doc.getOriginalFilename();
//        将文件保存
        doc.transferTo(new File("C:\upload\"+filename));
    }

    


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号