springMVC的数据响应和请求

目录

1、springmvc的数据响应方式:

  springMVC的页面跳转

springMVC的获取回写数据

1、直接返回字符串

2、返回对象或集合

 2、springMVC获取请求数据

 1、获取基本类型参数

 2、获得POJO类型参数

3、获得数组类型参数

4、获得集合类型参数

情况1:

情况2:

5、请求数据乱码问题

6、参数绑定注解@requestParam

 7、获得Restful风格的参数

 8、自定义类型转换器

9、获得servlet相关API

10、获得请求头

 11、文件上传

 1.单文件上传步骤

2.多文件上传


1、springmvc的数据响应方式:

  springMVC的页面跳转

因为这些方法最终都是被springMVC框架调用,所用参数也是用springMVC传入,换句话说,谁调用参数谁就会创建参数,所以这里面方法的参数都是由springMVC创建并传入的。(有些可能是根据url获得相应数据然后转换封装成参数里面的形式)

@Controller
public class userController {
    //这个注解的意思是访问的是/quick是就自动映射到这个save方法,执行对应的逻辑,最后返回一个"success.jsp",跳到webapp的对应jsp中
    @RequestMapping("/quick")
    public String save(){
        System.out.println("controller save running");
        return "success";
    }
    @RequestMapping("/quick2")
    public ModelAndView save2(){
        //model:用于封装数据
        //view:用于展示数据
        ModelAndView modelAndView = new ModelAndView();
        //设置模型数据
        modelAndView.addObject("username","gdut");
        //设置视图
        modelAndView.setViewName("success");
        return modelAndView;
    }
    @RequestMapping("/quick3")
    //springMVC在检测到这个方法发现有个参数需要springMVC来提供,就会创建一个
    public ModelAndView save3(ModelAndView modelAndView){
        modelAndView.addObject("username","gdut");
        modelAndView.setViewName("success");
        return modelAndView;
    }
    @RequestMapping("/quick4")
    //把model和view分开来创建
    public String save4(Model model){
        model.addAttribute("username","computer");
        return "success";
    }
    @RequestMapping("/quick5")
    //使用Httpservletrequest来创建对象并写数据到request域当中,不常用
    public String save5(HttpServletRequest request){
        request.setAttribute("username","myrequest");
        return "success";
    }
}

springMVC的获取回写数据

1、直接返回字符串

 

    @RequestMapping("/quick6")
    @ResponseBody//告诉springMVC框架不要进行页面跳转,直接回写字符串,不然就跟save1一样了
    public String save6(){
        return "success test save6";
    }
}

 返回Jason格式的字符串:

@RequestMapping("/quick7")
    @ResponseBody//告诉springMVC框架不要进行页面跳转,直接回写字符串,不然就跟save1一样了
    public String save7() throws IOException {
        User user = new User();
        user.setUsername("lisi");
        user.setAge(20);
        //使用json的转换工具将对象转换成json格式字符串再返回
        ObjectMapper objectMapper = new ObjectMapper();
        String jason = objectMapper.writeValueAsString(user);
        return jason;
    }

2、返回对象或集合

可以把对象以json的形式返回给页面,这里需要用到一个json的转换器,再spring-mvc.xml文件中进行配置,告诉sping-mvc遇到对象就将其转化为json格式返回

<!--    配置处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>
    @RequestMapping("/quick8")
    @ResponseBody
    //期望springMVC自动把user转换成Jason格式的字符串
    public User save8() throws IOException {
        User user = new User();
        user.setUsername("zhansan");
        user.setAge(23);
        //使用json的转换工具将对象转换成json格式字符串再返回
        ObjectMapper objectMapper = new ObjectMapper();
        String jason = objectMapper.writeValueAsString(user);
        return user;
    }

 2、springMVC获取请求数据

 

 1、获取基本类型参数

http://localhost:8080/quick9?username=pnjg&age=22
    @RequestMapping("/quick9")
    @ResponseBody
    //void:不进行数据回写,@ResponseBody:不进行页面跳转
    public void save9(String username, int age) {
        System.out.println(username);
        System.out.println(age);
    }

 2、获得POJO类型参数

http://localhost:8080/quick10?username=pnjg&age=22
    @RequestMapping("/quick10")
    @ResponseBody
    //void:不进行数据回写,@ResponseBody:不进行页面跳转
    public void save10(User user) {
        System.out.println(user);
    }

3、获得数组类型参数

http://localhost:8080/quick11?s=pnjg&s=is&big&s=handsome&s=boy
@RequestMapping("/quick11")
    @ResponseBody
    //void:不进行数据回写,@ResponseBody:不进行页面跳转
    public void save11(String s) {
        System.out.println(Arrays.asList(s));
    }

4、获得集合类型参数

情况1:

想要获得集合,先把集合封装到一个VO对象当中

public class VO {
    private List<User> userList;

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

在前端获取集合的数据

<%--action属性表示表示收集来的数据交由哪一个页面来处理--%>
    <form action="${pageContext.request.contextPath}/quick12" method="post">
        <%--表明是第几个user对象的username、age--%>
        <input type="text" name="userList[0].username"><br>
        <input type="text" name="userList[0].age"><br>
        <input type="text" name="userList[1].username"><br>
        <input type="text" name="userList[1].age"><br>
        <input type="submit" value="提交">
    </form>

在controller就能封装到VO中了

@RequestMapping("/quick12")
    @ResponseBody
    //void:不进行数据回写,@ResponseBody:不进行页面跳转
    //vo是集合对象
    public void save12(VO vo) {
        System.out.println(vo);
    }

情况2:


<%--模拟数据--%>
    <script>
        var userList = new Array();
        userList.push({usernmae:"zhangsan",age:18});
        userList.push({usernmae:"lisi",age:20});

        $.ajax({
            type:"POST",
            url:"${pageContext.request.contextPath}/quick13",
            data:JSON.stringify(userList),
            contentType:"application/json;charset=utf-8"
        })
    </script>
    @RequestMapping("/quick13")
    @ResponseBody
    //void:不进行数据回写,@ResponseBody:不进行页面跳转
    public void save13(@RequestBody List<User> userList) {
        System.out.println(userList);
    }

开启访问静态资源的两种方式:

<!-- 1、开放对哪些资源的访问-->
 <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<!--2、找不到对应资源,交给原始服务器处理-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

5、请求数据乱码问题

<!--配置全局过滤的filter,这里是解决post请求中文乱码问题-->
    <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

http://localhost:8080/quick14?name=pnjg
//@RequestParam将请求里面的name映射到username中
    public void save14(@RequestParam(value = "name",required = false) String username) {
        System.out.println(username);
    }

 7、获得Restful风格的参数、@PathVariable

 这里绿色的“name”要对应上,这样请求的参数才能被springMVC获取赋给方法里的参数,黑色的name要对应上

http://localhost:8080/quick15/pnjg
    @RequestMapping("/quick15/{name}")
    @ResponseBody
    
    public void save15(@PathVariable(value = "name") String username) {
        System.out.println(username);
    }

 8、自定义类型转换器

 

9、获得servlet相关API

10、获得请求头

 

 11、文件上传

 

 1.单文件上传步骤

1)、

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.3</version>
    </dependency>

 2)、

<!--    配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="50000"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

3)、

http://localhost:8080/upload.jsp

 

    @RequestMapping("/quick17")
    @ResponseBody
    public void save17(String username , MultipartFile upload) throws IOException {
        System.out.println(username);
        //获得上传文件的名称
        String originalFilename = upload.getOriginalFilename();
        //将获得的文件存入服务器磁盘
        upload.transferTo(new File("e:\\upload\\"+originalFilename));
    }
}

2.多文件上传

SpringMVC是一个用于构建Web应用程序的Java框架。在SpringMVC中,处理请求响应是通过使用控制器方法来实现的。控制器方法使用@RequestMapping注解来映射请求的URL,并通过方法参数来获取请求参数响应对象。 在处理请求时,可以使用@RequestParam注解来获取请求参数的值。例如,可以在方法参数上使用@RequestParam注解来获取请求中的特定参数值。另外,也可以使用@PathVariable注解来获取URL中的路径参数。 在处理响应时,可以使用@ResponseBody注解将方法的返回值直接写入HTTP响应体中,而不是进行视图跳转。这样可以直接返回字符串、JSON格式的数据或其他类型的数据。 另外,在SpringMVC中,还有一些核心组件,如处理器映射器、处理器适配器和视图解析器。处理器映射器负责将请求映射到相应的控制器方法,处理器适配器负责将请求参数绑定到方法参数,并调用相应的控制器方法,视图解析器负责将方法的返回值解析为视图。 总结起来,SpringMVC通过控制器方法、注解和核心组件来处理请求响应,使得开发者可以方便地构建Web应用程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [springMVC请求响应](https://blog.csdn.net/weixin_38088097/article/details/105840310)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVC请求响应](https://blog.csdn.net/weixin_51146329/article/details/123166475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值