一、spring 版本:spring-framework-3.2.7.RELEASE
二、所需其它Jar包:
三、主要代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <? xml version = "1.0" encoding = "UTF-8" ?> < web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version = "2.5" > < context-param > < param-name >log4jConfigLocation</ param-name > < param-value >classpath:log4j.properties</ param-value > </ context-param > < context-param > < param-name >log4jRefreshInterval</ param-name > < param-value >60000</ param-value > </ context-param > < context-param > < param-name >contextConfigLocation</ param-name > < param-value >classpath:applicationContext.xml</ param-value > </ context-param > <!-- 编码过虑 --> < filter > < filter-name >encodingFilter</ filter-name > < filter-class >org.springframework.web.filter.CharacterEncodingFilter</ filter-class > < init-param > < param-name >encoding</ param-name > < param-value >UTF-8</ param-value > </ init-param > < init-param > < param-name >forceEncoding</ param-name > < param-value >true</ param-value > </ init-param > </ filter > < filter-mapping > < filter-name >encodingFilter</ filter-name > < url-pattern >/*</ url-pattern > </ filter-mapping > <!-- Spring监听 --> < listener > < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class > </ listener > <!-- Spring MVC DispatcherServlet --> < servlet > < servlet-name >springMVC3</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < init-param > < param-name >contextConfigLocation</ param-name > < param-value >classpath:springMVC-servlet.xml</ param-value > </ init-param > < load-on-startup >1</ load-on-startup > </ servlet > < servlet-mapping > < servlet-name >springMVC3</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > <!-- 解决HTTP PUT请求Spring无法获取请求参数的问题 --> < filter > < filter-name >HiddenHttpMethodFilter</ filter-name > < filter-class >org.springframework.web.filter.HiddenHttpMethodFilter</ filter-class > </ filter > < filter-mapping > < filter-name >HiddenHttpMethodFilter</ filter-name > < servlet-name >springMVC3</ servlet-name > </ filter-mapping > < display-name >UikitTest</ display-name > < welcome-file-list > < welcome-file >/WEB-INF/jsp/index.jsp</ welcome-file > </ welcome-file-list > </ web-app > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <? xml version = "1.0" encoding = "UTF-8" ?> < beans default-lazy-init = "true" xmlns = "http://www.springframework.org/schema/beans" xmlns:p = "http://www.springframework.org/schema/p" xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:mvc = "http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 注解驱动 --> < mvc:annotation-driven /> <!-- 扫描包 --> < context:component-scan base-package = "com.citic.test.action" /> <!-- 用于页面跳转,根据请求的不同跳转到不同页面,如请求index.do则跳转到/WEB-INF/jsp/index.jsp --> < bean id = "findJsp" class = "org.springframework.web.servlet.mvc.UrlFilenameViewController" /> < bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > < property name = "mappings" > < props > < prop key = "index.do" >findJsp</ prop > <!-- 表示index.do转向index.jsp页面 --> < prop key = "first.do" >findJsp</ prop > <!-- 表示first.do转向first.jsp页面 --> </ props > </ property > </ bean > <!-- 视图解析 --> < bean class = "org.springframework.web.servlet.view.UrlBasedViewResolver" > <!-- 返回的视图模型数据需要经过jstl来处理 --> < property name = "viewClass" value = "org.springframework.web.servlet.view.JstlView" /> < property name = "prefix" value = "/WEB-INF/jsp/" /> < property name = "suffix" value = ".jsp" /> </ bean > <!-- 对静态资源文件的访问 不支持访问WEB-INF目录 --> < mvc:default-servlet-handler /> <!-- 对静态资源文件的访问 支持访问WEB-INF目录 --> <!-- <mvc:resources location="/uikit-2.3.1/" mapping="/uikit-2.3.1/**" /> --> < bean id = "stringConverter" class = "org.springframework.http.converter.StringHttpMessageConverter" > < property name = "supportedMediaTypes" > < list > < value >text/plain;charset=UTF-8</ value > </ list > </ property > </ bean > <!-- 输出对象转JSON支持 --> < bean id = "jsonConverter" class = "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" ></ bean > < bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > < property name = "messageConverters" > < list > < ref bean = "stringConverter" /> < ref bean = "jsonConverter" /> </ list > </ property > </ bean > </ beans > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | package com.citic.test.action; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.citic.test.entity.Person; /** * 基于Restful风格架构测试 * * @author dekota * @since JDK1.5 * @version V1.0 * @history 2014-2-15 下午3:00:12 dekota 新建 */ @Controller public class DekotaAction { /** 日志实例 */ private static final Logger logger = Logger.getLogger(DekotaAction. class ); @RequestMapping (value = "/hello" , produces = "text/plain;charset=UTF-8" ) public @ResponseBody String hello() { return "你好!hello" ; } @RequestMapping (value = "/say/{msg}" , produces = "application/json;charset=UTF-8" ) public @ResponseBody String say( @PathVariable (value = "msg" ) String msg) { return "{\"msg\":\"you say:'" + msg + "'\"}" ; } @RequestMapping (value = "/person/{id:\\d+}" , method = RequestMethod.GET) public @ResponseBody Person getPerson( @PathVariable ( "id" ) int id) { logger.info( "获取人员信息id=" + id); Person person = new Person(); person.setName( "张三" ); person.setSex( "男" ); person.setAge( 30 ); person.setId(id); return person; } @RequestMapping (value = "/person/{id:\\d+}" , method = RequestMethod.DELETE) public @ResponseBody Object deletePerson( @PathVariable ( "id" ) int id) { logger.info( "删除人员信息id=" + id); JSONObject jsonObject = new JSONObject(); jsonObject.put( "msg" , "删除人员信息成功" ); return jsonObject; } @RequestMapping (value = "/person" , method = RequestMethod.POST) public @ResponseBody Object addPerson(Person person) { logger.info( "注册人员信息成功id=" + person.getId()); JSONObject jsonObject = new JSONObject(); jsonObject.put( "msg" , "注册人员信息成功" ); return jsonObject; } @RequestMapping (value = "/person" , method = RequestMethod.PUT) public @ResponseBody Object updatePerson(Person person) { logger.info( "更新人员信息id=" + person.getId()); JSONObject jsonObject = new JSONObject(); jsonObject.put( "msg" , "更新人员信息成功" ); return jsonObject; } @RequestMapping (value = "/person" , method = RequestMethod.PATCH) public @ResponseBody List<Person> listPerson( @RequestParam (value = "name" , required = false , defaultValue = "" ) String name) { logger.info( "查询人员name like " + name); List<Person> lstPersons = new ArrayList<Person>(); Person person = new Person(); person.setName( "张三" ); person.setSex( "男" ); person.setAge( 25 ); person.setId( 101 ); lstPersons.add(person); Person person2 = new Person(); person2.setName( "李四" ); person2.setSex( "女" ); person2.setAge( 23 ); person2.setId( 102 ); lstPersons.add(person2); Person person3 = new Person(); person3.setName( "王五" ); person3.setSex( "男" ); person3.setAge( 27 ); person3.setId( 103 ); lstPersons.add(person3); return lstPersons; } } |
index.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < base href="<%=basePath%>"> < title >Uikit Test</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > < link rel = "stylesheet" type = "text/css" href = "uikit-2.3.1/css/uikit.gradient.min.css" > < link rel = "stylesheet" type = "text/css" href = "uikit-2.3.1/addons/css/notify.gradient.min.css" > </ head > < body > < div style = "width:800px;margin-top:10px;margin-left: auto;margin-right: auto;text-align: center;" > < h2 >Uikit Test</ h2 > </ div > < div style = "width:800px;margin-left: auto;margin-right: auto;" > < fieldset class = "uk-form" > < legend >Uikit表单渲染测试</ legend > < div class = "uk-form-row" > < input type = "text" class = "uk-width-1-1" > </ div > < div class = "uk-form-row" > < input type = "text" class = "uk-width-1-1 uk-form-success" > </ div > < div class = "uk-form-row" > < input type = "text" class = "uk-width-1-1 uk-form-danger" > </ div > < div class = "uk-form-row" > < input type = "text" class = "uk-width-1-1" > </ div > < div class = "uk-form-row" > < select id = "form-s-s" > < option >---请选择---</ option > < option >是</ option > < option >否</ option > </ select > </ div > < div class = "uk-form-row" > < input type = "date" id = "form-h-id" /> </ div > </ fieldset > < fieldset class = "uk-form" > < legend >基于Restful架构风格的资源请求测试</ legend > < button class = "uk-button uk-button-primary uk-button-large" id = "btnGet" >获取人员GET</ button > < button class = "uk-button uk-button-primary uk-button-large" id = "btnAdd" >添加人员POST</ button > < button class = "uk-button uk-button-primary uk-button-large" id = "btnUpdate" >更新人员PUT</ button > < button class = "uk-button uk-button-danger uk-button-large" id = "btnDel" >删除人员DELETE</ button > < button class = "uk-button uk-button-primary uk-button-large" id = "btnList" >查询列表PATCH</ button > </ fieldset > </ div > < script type = "text/javascript" src = "js/jquery-1.11.0.min.js" ></ script > < script type = "text/javascript" src = "uikit-2.3.1/js/uikit.min.js" ></ script > < script type = "text/javascript" src = "uikit-2.3.1/addons/js/notify.min.js" ></ script > < script type = "text/javascript" > (function(window,$){ var dekota={ url:'', init:function(){ dekota.url='<%=basePath%>'; $.UIkit.notify("页面初始化完成", {status:'info',timeout:500}); $("#btnGet").click(dekota.getPerson); $("#btnAdd").click(dekota.addPerson); $("#btnDel").click(dekota.delPerson); $("#btnUpdate").click(dekota.updatePerson); $("#btnList").click(dekota.listPerson); }, getPerson:function(){ $.ajax({ url: dekota.url + 'person/101/', type: 'GET', dataType: 'json' }).done(function(data, status, xhr) { $.UIkit.notify("获取人员信息成功", {status:'success',timeout:1000}); }).fail(function(xhr, status, error) { $.UIkit.notify("请求失败!", {status:'danger',timeout:2000}); }); }, addPerson:function(){ $.ajax({ url: dekota.url + 'person', type: 'POST', dataType: 'json', data: {id: 1,name:'张三',sex:'男',age:23} }).done(function(data, status, xhr) { $.UIkit.notify(data.msg, {status:'success',timeout:1000}); }).fail(function(xhr, status, error) { $.UIkit.notify("请求失败!", {status:'danger',timeout:2000}); }); }, delPerson:function(){ $.ajax({ url: dekota.url + 'person/109', type: 'DELETE', dataType: 'json' }).done(function(data, status, xhr) { $.UIkit.notify(data.msg, {status:'success',timeout:1000}); }).fail(function(xhr, status, error) { $.UIkit.notify("请求失败!", {status:'danger',timeout:2000}); }); }, updatePerson:function(){ $.ajax({ url: dekota.url + 'person', type: 'POST',//注意在传参数时,加:_method:'PUT' 将对应后台的PUT请求方法 dataType: 'json', data: {_method:'PUT',id: 221,name:'王五',sex:'男',age:23} }).done(function(data, status, xhr) { $.UIkit.notify(data.msg, {status:'success',timeout:1000}); }).fail(function(xhr, status, error) { $.UIkit.notify("请求失败!", {status:'danger',timeout:2000}); }); }, listPerson:function(){ $.ajax({ url: dekota.url + 'person', type: 'POST',//注意在传参数时,加:_method:'PATCH' 将对应后台的PATCH请求方法 dataType: 'json', data: {_method:'PATCH',name: '张三'} }).done(function(data, status, xhr) { $.UIkit.notify("查询人员信息成功", {status:'success',timeout:1000}); }).fail(function(xhr, status, error) { $.UIkit.notify("请求失败!", {status:'danger',timeout:2000}); }); } }; window.dekota=(window.dekota)?window.dekota:dekota; $(function(){ dekota.init(); }); })(window,jQuery); </ script > </ body > </ html > |
部分调试效果: