ssm学习笔记——springmvc——响应数据与结果视图、文件上传

返回值类型

1.返回字符串
Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

 @RequestMapping(value="/hello")   
 public String sayHello() {        
     System.out.println("Hello SpringMVC!!");       
     // 跳转到XX页面       
     return "success";  
  }

2. 返回值是void
如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到, 默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。
可以使用请求转发或者重定向跳转到指定的页面(需要使用绝对地址)

3. 返回值是ModelAndView对象
ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图
可以通过addObject()方法将目标保存到Request域中

ResponseBody响应json数据

该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的 数据如:json,xml 等,通过 Response 响应给客户端

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而 不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置

  • mvc:resources标签配置不过滤
  • location元素表示webapp目录下的包下的所有文件
  • mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!-- 设置静态资源不过滤 -->   
 <mvc:resources location="/css/" mapping="/css/**"/>  <!-- 样式 --> 
 <mvc:resources location="/images/" mapping="/images/**"/>  <!-- 图片 -->   
 <mvc:resources location="/js/" mapping="/js/**"/>  <!-- javascript -->
 

使用@RequestBody获取请求体数据

  • 模拟ajax异步请求响应
  • 把json的字符串转换成JavaBean的对象
  • .json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包
<script>
        //页面加载,绑定单击事件
        $(function () {
            $("#btn").click(function () {
               // alert("hello btn")
                //发送ajax请求
                $.ajax({
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTf-8",
                    data:'{"username":"悦悦","password":"123","age":18}',
                    dataType:"json",
                    type:"psot",
                    success:function (data) {
                        //data服务器端响应的json数据,进行解析
                        alert(data)
                        alert(data.username)
                        alert(data.password())
                        alert(data.age)

                    }
                })
            })
        })
    </script>

SpringMVC实现文件上传

文件上传的必要前提

  • form 表单的 enctype 取值必须是:multipart/form-data
  • method 属性取值必须是 Post
  • 提供一个文件选择域
  • 使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包
  • 配置文件解析器对象
<!--配置文件解析器对象,id固定,最大值为10M(10*1024*1024-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"></property>
    </bean>

控制器代码

/**
     * springmvc文件上传
     *
     * @param request
     * @return
     * @throws Exception
     */
    @RequestMapping("/fileUpload2")
    public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {//upload名字必须跟表单一致
        System.out.println("springmvc文件上传。。。");
        //使用fileupload组件完成文件上传
        //上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断该路径是否存在
        File file = new File(path);
        if (!file.exists()) {
            //创建该文件
            file.mkdirs();
        }

        //说明上传文件项
        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件的名字设置为唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid + "_" + filename;
        //完成文件上传
        upload.transferTo(new File(path,filename));

        return "success";
    }

你可能感兴趣的:(java,SpringMVC)