SpringMVC框架学习02

写在前面

今天主要学习了SpringMVC中的响应,文件上传,异常处理和拦截器。关于SpringMVC的内容到今天也就学完了。不是很多,但收获很多。可以说SpringMVC是Spring框架思想的一个具体体现。接着就是SSM整合了。加油奥利给。

SpringMVC中的响应

首先进行必要的配置。这里不再赘述了。
关于响应,最重要的应用其实就是ajax。我们这里就来看看如何通过SpringMVC来实现ajax。
首先导入jquery,这里由于SpringMVC会对所有资源进行拦截,导致我们的js文件无法读取。我们要在配置中取消对这些静态资源的拦截:

 <!--告诉前端控制器哪些静态资源不拦截-->
    <mvc:resources  location="/js/" mapping="/js/**"/>

之后编写必要的ajax代码:

    <script>
        //页面加载,绑定点击事件
        $(function(){
            $("#btn").click(function(){
                //alert("hello");
                //发送ajax请求
                $.ajax({
                    //编写json格式,设置格式属性
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"小王","password":"abc456","age":30}',
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        //data指服务器端相应的json数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.age);
                        alert(data.password);

                    }
                });
            });
        });
    </script>

编写我们的Controller:

    /**
     * 模拟异步请求相应
     * @return
     */
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了...");
        //客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);
        // 做响应,模拟查询数据库
        user.setUsername("哈哈");
        user.setAge(40);
        //作响应
        return user;
    }

可以看到,我们这里使用了一个@ReqeuestBody的注解。通过这个注解我们就可以取到前台发来的文件了.这里我们使用自建的User类,SpringMVC会自动把我们前台的内容找到javabean中对应的set方法赋值,只要确保前台输入的数据一致即可。最后返回值我们用了一个@ResponseBody的方式,意为把javabean转成了json对象。可以看到以往有些复杂的AJAX请求就被SpringMVC十分简单的处理了。

SpringMVC的文件上传

同服务器的文件上传

首先导入必要的jar包

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <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.4</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.18.1</version>
        </dependency>
    </dependencies>

之后编写controller层代码:

 /**
     * SpringMVC文件上传
     *
     * @return
     */
    @RequestMapping("/fileUpload2")
    public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
        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";
}

同时我们需要在配置文件中配置一下:

    <!-- 配置文件解析器对象 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"></property>
    </bean>

这样子就很简单的实现了文件上传功能了.

跨服务器的文件上传

对于跨服务器的文件上传,我们使用jersey的jar包来帮助我们实现。具体也很简单,见代码:

/**
     * 跨服务器文件上传
     *
     * @return
     */
    @RequestMapping("/fileUpload3")
    public String fileUpload3( MultipartFile upload) throws Exception {
        System.out.println("跨服务器文件上传..");
        //定义上传文件服务器的路径
        String path = "http://localhost:9090/SpringMVC02_fileuploadserver/uploads/";
        //说明是上传文件项
        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        // 把文件的名称设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid + "_" + filename;

        // 创建客户端对象
        Client client = Client.create();
        //和图片服务器进行连接
        WebResource webResource = client.resource(path + filename);
        //上传文件
        webResource.put(upload.getBytes());
        return"success";
    }

总结

可以看到,SpringMVC为我们封装了许多常用的操作,让我们写web应用的时候更加简单方便。框架的使用可以说大大简化了以往的操作。接下来就是最后的SSM整合了。

原文地址:https://www.cnblogs.com/wushenjiang/p/12827450.html