• 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整合了。

  • 相关阅读:
    003-2021 java.sql.SQLSyntaxErrorException: Unknown column 'Kitty' in 'where clause'
    002-2021 SpringMVC文件跨服务器上传异常之 409 : 目录不存在
    001-2021 SpringMVC文件跨服务器上传异常之405 : UniformInterfaceException : PUT http://localhost:9090/uploads/xxx returned a response status of 405 Method Not Allowed
    JUnit错误 : java.lang.NoSuchMethodError: org.junit.runner.Description.createSuiteDescription
    char[]
    Sql语句执行与书写顺序
    Java深拷贝和浅拷贝区别
    C++析构函数详解
    浅谈c/c++中register关键字
    C++异常之栈解旋
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12827450.html
Copyright © 2020-2023  润新知