Spring MVC 响应类型、文件上传实现

一、响应数据和结果视图

1、返回字符串

bean类实现序列化接口有什么作用呢?

简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反序列化)。serialization 不但可以在本机做,而且可以经由网络操作。它自动屏蔽了操作系统的差异,字节顺序等。比如,在 Windows 平台生成一个对象并序列化之,然后通过网络传到一台 Unix 机器上,然后可以在这台Unix机器上正确地重构(deserialization)这个对象。 不必关心数据在不同机器上如何表示,也不必关心字节的顺序或者其他任何细节。

存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本;
便于数据传输,尤其是在远程调用的时候!

序列化的目的有两个,第一个是便于存储,第二个是便于传输。

 

2、返回值void类型

转发的路径要具体,此时不会在执行springmvc.xml文件对文件进行解析

重定向(从新请求路径,不能直接请求WEB-INF下的文件):

3、响应值返回值是ModelAndView类型

4、转发和重定向

用不了视图解析器

5、响应json数据之过滤静态资源

导入jQuery包

6、响应json数据之发送ajax请求

<button id=“btn”>发送ajax请求

7、响应json数据之下响应json格式数据

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: PC
  Date: 2019/6/13
  Time: 11:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>返回类型</title>
    <script src="js/jquery.min.js"></script>
    <script>
        //页面加载,绑定单击事件
        $(function () {
            $("#btn").click(function(){
                    //alert("hello");
                    //发送Ajax请求
                $.ajax({
                   //编写json格式,设置属性和值
                   url:"resp/testAjax",
                   contentType:"application/json;charset=UTF-8",
                   data:'{"username":"我是Ajax","age":27}',
                    dataType:"json",
                    type:"post",
                    success:function (data) {
                        //data服务器端响应的json的数据,进行解析
                        alert(data);
                        alert(data.username);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <a href="resp/testString">testString</a><br/><br/>
    <a href="resp/testVoid">testVoid</a><br/><br/>
    <a href="resp/testModelAndView">testModelAndView</a><br/><br/>
    <a href="resp/testRedirectAndForward">testRedirectAndForward</a><br/><br/>
    <button id="btn">测试Ajax方法</button>

</body>
</html>

ResponseController.java

@Controller
@RequestMapping("/resp")
public class ResponseController {

    /**
     * 字符串类型返回值
     * @param model
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("返回类型为字符串");
        User user = new User();
        user.setUsername("张三");
        user.setAge(27);
        model.addAttribute("user",user);
        return "success";
    }

    /**
     * 返回类型为void
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("返回类型为void");
        //转发
//        request.getRequestDispatcher("/index.jsp").forward(request,response);
//        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
        //重定向
//        response.sendRedirect(request.getContextPath()+"/index.jsp");
        //设置中文乱码
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //直接进行响应
        response.getWriter().write("你好吗");
        return;
    }

    /**
     * 测试返回类型为ModelAndView
     * @return
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        //创建ModelAndView对象
        ModelAndView mv = new ModelAndView();
        System.out.println("testModelAndView方法执行。。。");
        //模拟从数据库中查询出USer数据
        User user = new User("李四",27);

        //把user对象存储到mv对象中,也会把user对象存储到request对象中
        mv.addObject("user",user);
        mv.setViewName("success");
        return mv;
    }

    /**
     * 测试转发和重定向
     * @return
     */
    @RequestMapping("/testRedirectAndForward")
    public String testRedirectAndForward(){

        System.out.println("testRedirectAndForward方法执行。。。");
//        return "forward:/WEB-INF/pages/success.jsp";
        return "redirect:/index.jsp";
    }

    /**
     * 模拟异步请求响应
     * @return
     */
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行。。。");
        //客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        //做响应,模拟查询数据库
        user.setUsername("我是Ajax它哥哥");
        user.setAge(28);
        //做响应
        System.out.println(user);
        return user;
    }
    /*@RequestMapping("/testAjax")
    public void testAjax(@RequestBody String body){
        System.out.println("testAjax方法执行。。。");
        System.out.println(body);
    }*/
}
springmvc.xml文件中
 
<!--前端控制器,指定静态资源不被拦截-->
    <mvc:resources mapping="/js/**" location="/js/"/>

二、Spring MVC实现文件上传

1、原理分析和环境搭建

文件上传回顾:

2、传统上传文件的方式实现(回顾)

导入依赖的jar包:

 

文件类:

3、spring mvc文件上传原理分析

 

代码实现:

springmvc.xml中配置解析器

4、spring mvc跨服务器上传文件分析和环境搭建

1)用两个服务器,端口号要不一样

8080 1099

2)新建工程maven web项目内:fileupload_cross_server

端口号设置为7070         JMX端口号为 1010

部署项目的是偶要注意部署项目的路径要和传输服务器中的文件路径向对应,负责出现404的错误!!!

在项目下新建uploads文件,接收库服务器上传的文件

 

导入jar包:

快速创建项目,输入下述内容:

  archetypeCatalog

  internal

String path = "http://localhost:7070/fileupload_cross_server/uploads/";作为文件上传的绝对路径

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值