天天看点

可单例开发、典型的教科书式的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/**" />