可单例开发、典型的教科书式的mvc构架----springmvc----day02(五)

8.json数据交互
            8.1为什么要进行json数据交互
                json数据格式在接口调用中、html页面中较常用,json格式比较简单,解析还比较方便。
                比如:webservice接口,传输json数据。

            8.2springmvc进行json交互
                1.请求json,输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便。

                2.请求key/value,输出json。此方法比较常用。

            8.3环境准备
                8.3.1加载json串的jar包
                    springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json串)。

                8.3.2配置json转换器
                    在注解适配器中加入messageConverters
                        <!-- mvc:annotation-driven代替上边注解映射器和注解适配器的配置 mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器就默认加载了, 
                        如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequsetMappingHandleAdaper 
                        实际开发中使用:mvc:annotation-driven -->

            8.4json交互测试
                8.4.1输入json串,输出是json串
                    8.4.1.1jsp页面
                        使用jquery的ajax提交json串,对输出的json结果进行解析。

                        function requestJson() {
                            //请求json,输出的是json
                            $.ajax({
                                type : 'post',
                                url : '${pageContext.request.contextPath }/requestJson.action',
                                contentType : "application/json;charset=UTF-8",
                                //数据格式是json 串
                                data : '{"name":"手机", "price":9090}',
                                success : function(data) {
                                    alert(data);
                                }
                            });
                        }
                    8.4.1.2controller
                        @RequestMapping("/requestJson")
                        public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
                            itemsCustom.setName(itemsCustom.getName() + "王际");

                            return itemsCustom;
                        }

                8.4.2输入key/value,输出是json串
                    8.4.2.1jsp页面
                        function responseJson() {
                            //请求key/value,输出的是json
                            $.ajax({
                                type : 'post',
                                url : '${pageContext.request.contextPath }/responseJson.action',
                                //    contentType : "application/json;charset=UTF-8",
                                //数据格式是key/value 
                                data : 'name=手机&price=999',
                                success : function(data) {
                                    alert(data);
                                }
                            });
                        }

                    8.4.2.2controller
                        @RequestMapping("/responseJson")
                        public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom) {
                            return itemsCustom;
                        }


        9.RESTful支持
            9.1什么是RESTful
                RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符号标准、易于理解、扩展方便、所以正得到越来越多网站的采用。

                RESTful(即Representational State Transfer的缩写)其实是一个开放理念,是对http的很好的诠释。

                1.对url进行规范,写RESTful格式的url
                    非REST的url:http://...../queryItems.action?id=001&type=T01
                    REST的url:http://..../items/001
                        特点:url简洁,将参数通过url传到服务端

                2.http的方法规范
                    不管是删除、添加、更新。。使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添加。。。

                    后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加。

                3.对http的contentType规范
                请求时指定contentType,要json数据,设置成json格式的type。。

            9.2REST的例子
                9.2.1需求:
                    查询商品信息,返回json数据。

                9.2.2controller
                    定义方法,进行url映射使用REST风格的url,将查询商品信息的id传入controller

                    输出json使用@ResponseBody将java对象输出json。
                        @RequestMapping("/requestJson")
                        public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
                            itemsCustom.setName(itemsCustom.getName() + "王际");

                            return itemsCustom;
                        }
                    @RequestMapping(value="/itemsView/{id}"):{XXX}占位符,请求的url可以是“/viewItems/1”或“viewItems/2”,通过在方法中使用@PathVariable获取{XXX}中的XXX变量。
                    @PathVariable用于将请求url中的模板变量映射到功能处理方法的参数上。
                    如果RequestMapping中表示为“/itemsView/{id}”,id和形参名称一致,@PathVariable不用指定名称。

                9.2.3REST方法的前端控制器配置
                    在web.xml配置:
                        <!-- springmvc-rest前端控制器 -->
                        <servlet>
                            <servlet-name>springmvc-rest</servlet-name>
                            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

                            <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器、映射器、适配器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml) -->
                            <init-param>
                                <param-name>contextConfigLocation</param-name>
                                <param-value>classpath:spring/springmvc.xml</param-value>
                            </init-param>
                        </servlet>

                        <servlet-mapping>
                            <servlet-name>springmvc-rest</servlet-name>
                            <!-- 第一种:*.action,访问以.action结尾由DispatcherServlet进行解析 第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet解析 
                                使用此种方法可以实现RESTful风格的url 第三种:/*,这样配置不对,使用这种配置,最终需要发到一个jsp页面时, 仍然会有DispatcherServlet解析jsp地址值,不能提供jsp页面找到handler,会报错 -->
                            <url-pattern>/</url-pattern>
                        </servlet-mapping>

                9.3对静态资源的解析
                    配置前端控制器的url-parttern中指定/,对静态资源的解析出现问题:
                    在springmvc.xml中添加静态资源解析方法。
                        <!-- 静态资源 -->
                        <mvc:resources location="/assets/css/" mapping="/css/**" />
                        <mvc:resources location="/assets/font/"
                            mapping="/font/**" />
                        <mvc:resources location="/assets/images/"
                            mapping="/images/**" />
                        <mvc:resources location="/assets/js/" mapping="/js/**" />
                        <mvc:resources location="/assets/musics/"
                            mapping="/musics/**" />
                        <mvc:resources location="/assets/scripts/"
                            mapping="/scripts/**" />
                        <mvc:resources location="/assets/upload/"
                            mapping="/upload/**" />

posted @ 2018-12-25 16:21  CHANGEMAX  阅读(74)  评论(0编辑  收藏  举报