0
点赞
收藏
分享

微信扫一扫

SpringMVC的请求和响应

郝春妮 2022-03-11 阅读 114

文章目录

SpringMVC的请求和响应

一、SpringMVC的响应


1、页面跳转


1.1、直接返回字符串

    @RequestMapping(value = "/quick", method = RequestMethod.GET, params = {"username"})   //请求映射
    public String quickMethod(){
        System.out.println("quickMethod running.......");
        //return:要跳转的视图
        //要加一个/表示当前web目录下
        return "quick";
    }

1.2、通过ModelAndView对象返回

    @RequestMapping(value = "/quick3")   //请求映射
    public ModelAndView quickMethod3(ModelAndView modelAndView){
        //ModelAndView对象作为形参,由SpringMVC框架自行创建
        modelAndView.setViewName("quick");
        modelAndView.addObject("username", "喜羊羊");
        return modelAndView;
    }

    @RequestMapping(value = "/quick2")   //请求映射
    public ModelAndView quickMethod2(){
        //自己创建ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("quick");
        modelAndView.addObject("username", "小明");
        return modelAndView;
    }

1.3、其他

    @RequestMapping(value = "/quick5")   //请求映射
    public String quickMethod5(HttpServletRequest request){
        request.setAttribute("username", "红太狼");
        return "quick";
    }


    @RequestMapping(value = "/quick4")   //请求映射
    public String quickMethod4(Model model){
        model.addAttribute("username", "灰太狼");
        return "quick";
    }

2、回写数据

2.1、直接返回字符串

    @RequestMapping(value = "/quick6")   //请求映射
    public void quickMethod6(HttpServletResponse response) throws IOException {
        response.getWriter().println("Hello kang");
    }
    @RequestMapping(value = "/quick8")   //请求映射
    @ResponseBody
    public String quickMethod8() throws IOException {
        //回写json
        return "{\"username\":\"zhangsan\",\"age\":18}";
    }

    @RequestMapping(value = "/quick7")   //请求映射
    @ResponseBody
    public String quickMethod7(HttpServletResponse response) throws IOException {
        //回写字符串
        return "Hello quick7";
    }
    @RequestMapping(value = "/quick10")   //请求映射
    @ResponseBody
    public String quickMethod10() throws IOException {
        User user = new User();
        user.setName("lisi");
        user.setAge(20);
        return JSON.toJSONString(user);
    }

    @RequestMapping(value = "/quick9")   //请求映射
    @ResponseBody
    public String quickMethod9() throws IOException {
        User user = new User();
        user.setName("lisi");
        user.setAge(20);
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.writeValueAsString(user);
    }

2.2、返回对象或者集合

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.kang.controller">
        <!--扫描com.kang.controller包下的Controller注解-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--配置内部资源视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前缀-->
        <property name="prefix" value="/jsp/"></property>
        <!--配置后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <!--配置json转换工具-->
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>

</beans>
    @RequestMapping(value = "/quick11")   //请求映射
    @ResponseBody
    public User quickMethod11() throws IOException {
        User user = new User();
        user.setName("liu");
        user.setAge(20);
        return user;
    }

2.3、提升(重要)

    <!--注解驱动-->
    <mvc:annotation-driven/>

二、SpringMVC获得请求数据


1、基本类型参数

    @RequestMapping(value = "/quick12")   //请求映射
    @ResponseBody
    public void quickMethod12(String username, int age){
        System.out.println(username);
        System.out.println(age);
    }
http://localhost:8080/SpringMVC/quick12?username=zhangsan&age=12

2、POJO类型参数

    public class User {
    	private String name;
    	private int age;
    	get/set
    }
    
    
    @RequestMapping(value = "/quick13")   //请求映射
    @ResponseBody
    public void quickMethod13(User user){
        System.out.println(user.getName());
        System.out.println(user.getAge());
    }
http://localhost:8080/SpringMVC/quick13?username=zhangsan&age=12

3、数组类型参数

    @RequestMapping(value = "/quick14")   //请求映射
    @ResponseBody
    public void quickMethod14(String[] strs){
        System.out.println(Arrays.asList(strs));
    }
http://localhost:8080/SpringMVC/quick14?strs=111&strs=222&strs=333

4、集合类型参数


4.1、将集合参数包装到一个POJO类中(了解)


4.2、使用ajax提交


<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<script src="js/jquery-3.6.0.js"></script>
<script>
    var userList = new Array();
    userList.push({name: "zhangsan", age: "20"});
    userList.push({name: "lisi", age: "18"});
    $.ajax({
        type: "POST",
        url: "${pageContext.request.contextPath}/user/quick16",
        data: JSON.stringify(userList),
        contentType: 'application/json;charset=utf-8'
    });
</script>
</body>
</html>
    @RequestMapping(value = "/quick16")   //请求映射
    @ResponseBody
    public void quickMethod16(@RequestBody List<User> userList){
        System.out.println(userList);
    }

5、请求数据乱码问题

  <!--配置全局过滤的filter-->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
        <!--对任何资源都起作用-->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

6、参数绑定注解@requestParam

    @RequestMapping(value = "/quick17")   //请求映射
    @ResponseBody
    public void quickMethod17(@RequestParam(value = "name", required = false, defaultValue = "kang") String userName){
        System.out.println(userName);
    }

7、 获得Restful风格的参数(了解)

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

  • GET:用于获取资源
  • POST:用于新建资源
  • PUT:用于更新资源
  • DELETE:用于删除资源

例如:

  • /user/1 GET: 得到id=1的user
  • /user/1 DELETE: 删除id=1的user
  • /user/1 PUT: 更新id=1的user
  • /user POST: 新增user
    @RequestMapping(value = "/quick18/{username}")   //请求映射
    @ResponseBody
    public void quickMethod18(@PathVariable(value = "username") String userName){
        System.out.println(userName);
    }

8、自定义类型转换器

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

  1. 定义转换器类实现Converter接口

    package com.kang.converter;
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @ClassName DataConverter
     * @Description TODO
     * @Author kang
     * @Date 2022/2/27 下午 2:18
     * @Version 1.0
     */
    public class DataConverter implements Converter<String, Date> {
        @Override
        public Date convert(String s) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date date = null;
            try {
                date = simpleDateFormat.parse(s);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    }
    
  2. 在配置文件中声明转换器

        <!--配置文件中声明转换器-->
        <bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class="com.kang.converter.DataConverter"></bean>
                </list>
            </property>
        </bean>
    
  3. 在< annotation-driven >中引用转换器

    <!--注解驱动-->
    <mvc:annotation-driven conversion-service="converterService"/>

9、 获得请求头

9.1、 @RequestHeader

    @RequestMapping(value = "/quick21")   //请求映射
    @ResponseBody
    public void quickMethod21(@RequestHeader(value = "User-Agent", required = false) String userAgent){
        System.out.println(userAgent);
    }

9.2、 @CookieValue

    @RequestMapping(value = "/quick22")   //请求映射
    @ResponseBody
    public void quickMethod22(@CookieValue(value = "JSESSIONID", required = false) String cookie){
        System.out.println(cookie);
    }

10、文件上传的实现

在这里插入图片描述


10.1、单文件上传步骤

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br>
        文件<input type="file" name="uploadFile"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

10.2、多文件上传实现

    @RequestMapping(value = "/quick24")   //请求映射
    @ResponseBody
    public void quickMethod24(String name, MultipartFile[] uploadFile) throws IOException {
        for (MultipartFile multipartFile : uploadFile) {
            //获取文件名
            String originalFilename = multipartFile.getOriginalFilename();
            //保存文件
            multipartFile.transferTo(new File("F:\\笔记记录\\文件上传test\\" + originalFilename));
        }
    }

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/user/quick24" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br>
        文件1:<input type="file" name="uploadFile"><br>
        文件2:<input type="file" name="uploadFile"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

举报

相关推荐

0 条评论