{"id":810,"date":"2010-10-01T11:53:55","date_gmt":"2010-10-01T11:53:55","guid":{"rendered":"http:\/\/enjoyasp.net\/?p=810"},"modified":"2010-10-30T07:34:19","modified_gmt":"2010-10-30T07:34:19","slug":"dwr-%e5%ba%94%e7%94%a8%e4%ba%8ejava%e7%9a%84ajax%e6%a1%86%e6%9e%b6","status":"publish","type":"post","link":"https:\/\/enjoyasp.net\/index.php\/2010\/10\/01\/dwr-%e5%ba%94%e7%94%a8%e4%ba%8ejava%e7%9a%84ajax%e6%a1%86%e6%9e%b6\/","title":{"rendered":"DWR &#8212; \u5e94\u7528\u4e8eJAVA\u7684AJAX\u6846\u67b6"},"content":{"rendered":"<p>DWR\uff1a\u662fjava\u7684AJAX,\u5b83\u7528\u6765\u5b8c\u6210\u670d\u52a1\u5668\u4e0a\u7684bean\u5bf9\u8c61\u4e0e\u548c\u5ba2\u6237\u7aef\u4e0a\u7684js\u5bf9\u8c61\u7684\u4ea4\u4e92\uff0c\u53ef\u8ba4\u4e3a\uff1adwr\u63d0\u4f9b\u4e86\u7528js\u64cd\u4f5cjava\u7c7b\u5bf9\u8c61\u7684\u65b9\u5f0f\uff01\uff01\uff01<\/p>\n<p>\u5e94\u7528\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<p>1\uff0c\u4e0b\u8f7djar\u5305\u653e\u5728web-inf \u4e0b\u7684 lib\u4e2d\uff0c\u540c\u65f6\u6ce8\u610fdwr \u9700\u8981commons-logging.\u5305\u7684\u652f\u6301\uff0c\u9879\u76ee\u4e2d\u4e5f\u8981\u6709\u6b64\u5305<\/p>\n<p>2\uff0c\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6-web.xml<\/p>\n<p>\u52a0\u5165\u5982\u4e0b\u4ee3\u7801\uff1a<br \/>\n&lt;servlet&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;\/servlet-class&gt;<br \/>\n&lt;init-param&gt;<br \/>\n&lt;param-name&gt;debug&lt;\/param-name&gt;<br \/>\n&lt;param-value&gt;true&lt;\/param-value&gt;<br \/>\n&lt;\/init-param&gt;<br \/>\n&lt;\/servlet&gt;<\/p>\n<p>&lt;servlet-mapping&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;url-pattern&gt;\/dwr\/*&lt;\/url-pattern&gt;<br \/>\n&lt;\/servlet-mapping&gt;<\/p>\n<p>\/\/\u8fd9\u5c31\u4e3a\u67e5\u770b\u81ea\u52a8\u751f\u6210\u7684\u6620\u5c04\u6587\u4ef6 http:\/\/localhost:8080\/lj\/dwr\/ \u6253\u4e0b\u57fa\u7840,<br \/>\n\/\/ \u5e76\u4e14\u5728\u9875\u9762\u4e2d&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;\u65f6\u5c31\u4f1a\u8c03\u7528dwr\u8fd9\u4e2aservlet\uff0c\u5b8c\u6210\u529f\u80fd\u3002<\/p>\n<p>\u6ce8\uff1aDWR\u6267\u884c\u6d41\u7a0b\uff1a<br \/>\n\u9875\u9762\u8c03\u7528JLogin.checkLogin \u4e4b\u7c7b\u7684\u65b9\u6cd5\uff0c\u4f1a\u5c06\u5176\u8f6c\u5230XMLHttpRequest,\u4ee5get\u6216post\u53d1\u9001\uff0c\u5f53\u7136\u5730\u5740\u4e2d\u4f1a\u7528\/dwr,<br \/>\n\u4ee5\u8ba9\u670d\u52a1\u5668\u63a5\u6536\u65f6\u8f6c\u5230\u5728web.xml\u4e2d\u5b9a\u4e49\u7684servlet,\u8fd9\u4e2aservlet\u5c31\u4f1a\u5c06\u4f20\u6765\u7684\u65b9\u6cd5\u8f6c\u5230java\u65b9\u6cd5\u8c03\u7528\uff0c\u4e4b\u540e\u5f97\u7528<br \/>\nXMLHttpRequest\u7684\u56de\u8c03\u51fd\u6570\u4f20\u56de\u6570\u636e<br \/>\nDWR:\u4ece\u4e8b\u7684\u5c31\u662fjavascript\u8bed\u6cd5\u4e0ejava\u8bed\u6cd5\u7684\u8f6c\u6362\u5de5\u4f5c\u3002<\/p>\n<p>3\uff0c\u5728\u4e0eweb.xml\u540c\u4e00\u76ee\u5f55\u4e0b\u5efa\u7acbdwr.xml\u6587\u4ef6<\/p>\n<p>&lt;!DOCTYPE dwr PUBLIC<br \/>\n&#8220;-\/\/GetAhead Limited\/\/DTD Direct Web Remoting 2.0\/\/EN&#8221;<br \/>\n&#8220;http:\/\/getahead.org\/dwr\/dwr20.dtd&#8221;&gt;<\/p>\n<p>&lt;dwr&gt;<br \/>\n&lt;allow&gt;???????????????? \/\/\u6807\u7b7e\u4e2d\u5305\u62ec\u53ef\u4ee5\u66b4\u9732\u7ed9javascript\u8bbf\u95ee\u7684\u4e1c\u897f\u3002<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;JDate&#8221;&gt;<br \/>\n&lt;param name=&#8221;class&#8221; value=&#8221;java.util.Date&#8221;\/&gt;<br \/>\n&lt;include method=&#8221;checkLogin&#8221;\/&gt;<br \/>\n&lt;\/create&gt;<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;Demo&#8221;&gt;<br \/>\n&lt;param name=&#8221;class&#8221; value=&#8221;your.java.Bean&#8221;\/&gt;<br \/>\n&lt;\/create&gt;<\/p>\n<p>&lt;convert converter=&#8221;bean&#8221; match=&#8221;com.lvjian.User&#8221;&gt;<br \/>\n&lt;param name=&#8221;include&#8221; value=&#8221;user&#8221; \/&gt;<br \/>\n&lt;\/convert&gt;<\/p>\n<p>&lt;\/allow&gt;<br \/>\n&lt;\/dwr&gt;<\/p>\n<p>\u6ce8\uff1a\uff081\uff09creator=&#8221;new&#8221;\u4ee3\u8868\u7528\u65e0\u53c2\u6784\u9020\u5668\u6765\u521b\u5efa\u5bf9\u8c61 \uff0c\u4e5f\u53ef\u7528spring,\u7531spring\u4ee3\u7406\u7c7b\u7684\u751f\u547d\u5468\u671f\u7684\u7ba1\u7406<br \/>\n\uff082\uff09javascript=&#8221;JDate&#8221; \u6307\u5b9a\u5728js\u4e2d\u5e94\u7528\u5bf9\u8c61\u65f6\u7684\u540d\u79f0<br \/>\n\uff083\uff09&lt;param name=&#8221;class&#8221; value=&#8221;java.util.Date&#8221;\/&gt; \u6307\u5b9ajs\u5bf9\u8c61JDate\u5bf9\u5e94\u7684java\u7c7b<br \/>\n(4) &lt;include method=&#8221;checkLogin&#8221;\/&gt; \u6307\u5b9a\u516c\u5f00\u7ed9javascript\u7684\u65b9\u6cd5\u3002\u4e0d\u6307\u5b9a\u7684\u8bdd\u5c31\u516c\u5f00\u6240\u6709\u65b9\u6cd5\u3002<br \/>\n\u5bf9\u5e94\u6709\uff1a&lt;exclude&gt;? \u6807\u7b7e\u6307\u5b9a\u8981\u9632\u6b62\u88ab\u8bbf\u95ee\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\uff085\uff09&lt;convert&gt;: &lt;creator&gt;\u6807\u7b7e\u8d1f\u8d23\u516c\u5f00\u7528\u4e8eWeb\u8fdc\u7a0b\u7684\u7c7b\u548c\u7c7b\u7684\u65b9\u6cd5\uff0c&lt;convertor&gt;? \u6807\u7b7e\u5219\u8d1f\u8d23\u8fd9\u4e9b\u65b9\u6cd5<br \/>\n\u7684\u53c2\u6570\u548c\u8fd4\u56de\u7c7b\u578b\u3002<br \/>\nconvert? \u5143\u7d20\u7684\u4f5c\u7528\u662f\u544a\u8bc9DWR\u5728\u670d\u52a1\u5668\u7aefJava\u5bf9\u8c61\u8868\u793a\u548c\u5e8f\u5217\u5316\u7684JavaScript\u4e4b\u95f4\u5982\u4f55\u8f6c\u6362\u6570\u636e\u7c7b\u578b\u3002DWR? \u81ea\u52a8\u5730\u5728Java\u548cJavaScript<br \/>\n\u8868\u793a\u4e4b\u95f4\u8c03\u6574\u7b80\u5355\u6570\u636e\u7c7b\u578b\u3002\u8fd9\u4e9b\u7c7b\u578b\u5305\u62ec? Java? \u539f\u751f\u7c7b\u578b\u548c\u5b83\u4eec\u5404\u81ea\u7684\u5c01\u88c5\u7c7b\u8868\u793a\uff0c\u8fd8\u6709? String? \u3001Date? \u3001<br \/>\n\u6570\u7ec4\u548c\u96c6\u5408\u7c7b\u578b\u3002??? DWR? \u4e5f\u80fd\u628a? JavaBean? \u8f6c\u6362\u6210? JavaScript? \u8868\u793a\uff0c\u4f46\u662f\u51fa\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c<br \/>\n\u8981\u6c42\u663e\u5f0f\u7684\u914d\u7f6e\uff0c<br \/>\n&lt;convertor&gt;? \u6807\u7b7e\u5c31\u662f\u5b8c\u6210\u6b64\u529f\u80fd\u7684\u3002? converter=&#8221;bean&#8221;? \u5c5e\u6027\u6307\u5b9a\u8f6c\u6362\u7684\u65b9\u5f0f\u91c7\u7528? JavaBean? \u547d\u540d\u89c4\u8303\uff0c<br \/>\nmatch=&#8221;&#8221;com.dwr.TestBean&#8221;? \u5c5e\u6027\u6307\u5b9a\u8981\u8f6c\u6362\u7684? javabean? \u540d\u79f0\uff0c? &lt;param&gt;? \u6807\u7b7e\u6307\u5b9a\u8981\u8f6c\u6362\u7684JavaBean? \u5c5e\u6027\u3002<\/p>\n<p>\u82e5\u53c2\u6570\u662f\u96c6\u5408\u7c7b\u578b\uff0c\u4e14\u5176\u4e2d\u7684\u5143\u7d20\u662f\u81ea\u5b9a\u4e49\u5143\u7d20\uff0c\u90a3\u4e48\u5c31\u8981\u7528\u5982\u4e0b\u65b9\u5f0f\u6307\u5b9a\uff1a<\/p>\n<p>&lt;dwr&gt;<br \/>\n&lt;allow&gt;<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;testClass&#8221; &gt;<br \/>\n&lt;param name=&#8221;class&#8221; value= &#8220;com.dwr.TestClass&#8221; \/&gt;<br \/>\n&lt;include method=&#8221;testMethod7&#8243;\/&gt;<br \/>\n&lt;\/create&gt;<br \/>\n&lt;convert converter=&#8221;bean&#8221; match= &#8220;com.dwr.TestBean &#8220;&gt;<br \/>\n&lt;param name=&#8221;include&#8221; value=&#8221;username,password&#8221; \/&gt;<br \/>\n&lt;\/convert&gt;<br \/>\n&lt;\/allow&gt;<br \/>\n&lt;signatures&gt;<br \/>\n&lt;![CDATA[<br \/>\nimport java.util.List;<br \/>\nimport com.dwr.TestClass;<br \/>\nimport com.dwr.TestBean;<br \/>\nTestClass.testMethod7(List&lt;TestBean&gt;);<br \/>\n]]&gt;<br \/>\n&lt;\/signatures&gt;<br \/>\n&lt;\/dwr&gt;<\/p>\n<p>&lt;signatures&gt;? \u6807\u7b7e\u662f\u7528\u6765\u58f0\u660e? java? \u65b9\u6cd5\u4e2d? List? \u3001? Set? \u6216\u8005? Map? \u53c2\u6570\u6240\u5305\u542b\u7684\u786e\u5207\u7c7b\uff0c\u4ee5\u4fbf? java? \u4ee3\u7801\u4f5c\u51fa\u5224\u65ad<\/p>\n<p>\u6ce8\uff1a\u4e0a\u8ff0\u65b9\u5f0f\u5b8c\u6210\u4e86js\u4e0ejava\u7c7b\u5bf9\u8c61\u7684\u6620\u5c04\uff0c\u5728java\u7c7b\u4e2d\u5b9a\u4e49\u65b9\u6cd5\u65f6\u8981\u6ce8\u610f\u4e24\u70b9\uff1a<\/p>\n<p>\uff081\uff09\u56e0js\u4e2ddelete\u4e3a\u5176\u5173\u952e\u5b57\uff0c\u6545\u5728java\u7c7b\u5728\u5b9a\u4e49\u65b9\u6cd5\u65f6\u4e0d\u80fd\u6307\u5b9adelete\u65b9\u6cd5\u3002<br \/>\n\uff082\uff09\u56e0js\u4e0d\u652f\u6301\u91cd\u8f7d\u65b9\u6cd5\uff0c\u6545\u5176\u5bf9\u5e94\u7684\u7c7b\u4e2d\u4e0d\u80fd\u6709\u91cd\u8f7d\u65b9\u6cd5\uff0c\u4e0d\u7136\u5728\u5e94\u7528\u4e2d\u8c03\u7528\u7684\u603b\u4f1a\u662f\u91cd\u8f7d\u65b9\u6cd5\u4e2d\u7684\u6700\u540e\u4e00\u4e2a\u65b9\u6cd5<\/p>\n<p>4\uff0c\u67e5\u770bDWR\u81ea\u52a8\u751f\u6210\u7684\u6620\u5c04\u6587\u4ef6 http:\/\/localhost:8080\/lj\/dwr\/,\u5176\u4e2d\u5982\u4e0b\u4ee3\u7801\u8981\u5305\u542b\u5728jsp\u6587\u4ef6\u4e2d\uff0c<\/p>\n<p>&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/interface\/JLogin.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/engine.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;<\/p>\n<p>5\uff0c\u5e94\u7528\uff1a\u7f16\u5199js\u6587\u4ef6\uff0c\u8c03\u7528\u5373\u53ef<br \/>\n\uff081\uff09 jsp:<br \/>\n\u5305\u542b\u7684js\u6587\u4ef6\uff1a<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/interface\/JLogin.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/engine.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;<\/p>\n<p>&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;js\/login.js&#8217;&gt;&lt;\/script&gt;? \/\/\u7528\u6765\u5904\u7406<\/p>\n<p>\u8c03\u7528\uff1a<br \/>\n&lt;input type=&#8221;text&#8221; name=&#8221;userName&#8221; id=&#8221;userName&#8221; value=&#8221;goodday&#8221; onblur=&#8221;check()&#8221;&gt;? \/\/check\u6765\u81ealogin.js<br \/>\n&lt;span id=&#8221;demoReply&#8221; style=&#8221;background:#eeffdd; padding-left:4px; padding-right:4px;&#8221;&gt;&amp;nbsp;&lt;\/span&gt;<\/p>\n<p>(2) login.js\u5982\u4e0b\uff1a<\/p>\n<p>function check(){<br \/>\nvar name = dwr.util.getValue(&#8220;userName&#8221;);<br \/>\nJLogin.checkLogin(name, function(data) {<br \/>\ndwr.util.setValue(&#8220;demoReply&#8221;, data);<br \/>\n});<br \/>\n}<\/p>\n<p>JLogin.checkLogin(name, function(data)\uff09 \uff1a<br \/>\n\u8c03\u7528Login.checkLogin\uff08name\uff09, \u5f53\u7ed3\u679c\u8fd4\u56de\u65f6\u7528data\u63a5\u6536\uff0c\u5e76\u8c03\u7528\u5176\u540e\u7684\u65b9\u6cd5\uff08\u56de\u8c03\u51fd\u6570\uff09<\/p>\n<p>\u53ef\u4ee5\u662f\uff1a\uff081\uff09 JLogin.checkLogin(name, function(data)\uff09<br \/>\n\uff082\uff09 JLogin.checkLogin(name, myCallBack\uff09<\/p>\n<p>(3) JLogin.checkLogin(42, {<br \/>\ncallback:myCallBack<br \/>\n});<br \/>\n\u7b2c\u4e09\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u6613\u8bfb\uff0c\u5e76\u4e14\u4e5f\u53ef\u6307\u5b9a\u8d85\u65f6\u53c2\u6570\uff0c\u53ca\u5f02\u5e38\u5904\u7406\u51fd\u6570<\/p>\n<p>JLogin.checkLogin(42, {<br \/>\ncallback:myCallBack,<br \/>\ntimeout:5000,<br \/>\nerrorHandler:function(message) { alert(&#8220;Oops: &#8221; + message); }<br \/>\n});<\/p>\n<p>\u6ce8:\u5728js\u4e2d\u521b\u5efa\u5bf9\u8c61\u5e76\u4f20\u9012\u7ed9java\u7684\u65b9\u6cd5\uff1a<br \/>\n(1) var p = {<br \/>\nname:&#8221;Fred Bloggs&#8221;,<br \/>\nage:42,<br \/>\nappointments:[ new Date(), new Date(&#8220;1 Jan 2008&#8243;) ]<br \/>\n};<\/p>\n<p>JLogin.checkLogin(p, myCallBack\uff09?? \u90a3\u4e48\u5728\u7c7b\u7684checkLogin\u53c2\u6570\u987b\u662f\u4e00\u4e2a\u7c7b\u5bf9\u8c61\u6765\u63a5\u6536\u5c01\u88c5\u800c\u6765\u7684\u6570\u636e<br \/>\n(2) \u5e26\u96c6\u5408\u4e14\u96c6\u5408\u5143\u7d20\u90fd\u662f\u81ea\u5b9a\u4e49\u7c7b<\/p>\n<p>data = [<br \/>\n{<br \/>\nusername:&#8221;user1&#8243;,<br \/>\npassword:&#8221;password2&#8243;????????????????????? \/\/\u7b2c\u4e00\u4e2a\u5bf9\u8c61<br \/>\n},<br \/>\n{<br \/>\nusername:&#8221;user2&#8243;,<br \/>\npassword:&#8221; password2&#8243;???????????????????? \/\/\u7b2c\u4e8c\u4e2a\u5bf9\u8c61<br \/>\n}<br \/>\n];<\/p>\n<p>JLogin.checkLogin(p, myCallBack\uff09??????? \u90a3\u4e48\u5728\u7c7b\u7684checkLogin\u53c2\u6570\u987b\u662f\u4e00\u4e2a\u7c7b\u5bf9\u8c61\u6765\u63a5\u6536\u5c01\u88c5\u800c\u6765\u7684\u6570\u636e<\/p>\n<p>6\uff0c \u5728js\u4e2d\u8bbf\u95eejava\u5bf9\u8c61<br \/>\nJLogin.checkLogin(name, function(data)\uff09<br \/>\n\uff081\uff09data\u4e3a\u57fa\u578b\uff0c\u76f4\u63a5\u64cd\u4f5c<br \/>\n(2) data\u4e3a\u4e00\u81ea\u5b9a\u4e49\u5bf9\u8c61\uff0c \uff08\u5728web.xml\u4e2d\u914d\u7f6e&lt;conventor&gt;\uff09<br \/>\nfor(var property in data){<br \/>\nalert(&#8220;property:&#8221;+property);<br \/>\nalert(property+&#8221;:&#8221;+data[property]);? \/\/\u6216data.username<br \/>\n}<\/p>\n<p>7\uff0cdwr.util<\/p>\n<p>\uff081\uff09\u83b7\u53d6\u53ca\u8bbe\u7f6e\u9875\u9762\u5143\u7d20value<br \/>\n1) $()???????? \u6ce8\uff1a$ = document.getElementById<br \/>\n\u5373\uff1avar user = $(&#8216;admin.accounts&#8217;).value? \u7b49\u540c\u4e8e var user = document.getElementById(&#8216;admin.accounts&#8217;).value<\/p>\n<p>2)DWRUtil.getValue(id) \u53ef\u4ee5\u6839\u636eid\u53d6\u5f97value\uff0c\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f60\u4e0d\u5fc5\u5728\u610fdiv\u548cselect list\u7684\u4e0d\u540c\u3002<\/p>\n<p>3)DWRUtil.getValues() \u8fd9\u4e2a\u65b9\u6cd5\u548cgetValue()\u4e00\u6837\uff0c\u53ea\u662f\u5b83\u4f20\u5165\u7684\u662f\u4e00\u4e2a\u5305\u542b\u540d\u5b57\u548c\u6570\u503c\u7684javascript\u5bf9\u8c61.\u8fd9\u4e2a\u540d\u5b57\u5c31<br \/>\n\u662fHTML\u5143\u7d20\u7684ID\u3002\u8fd9\u4e2a\u65b9\u6cd5\u4e0d\u4f1a\u8fd4\u56de\u4efb\u4f55\u5bf9\u8c61\uff0c\u5b83\u53ea\u4f1a\u5c06ID\u7684value\u6620\u5c04\u7ed9\u4f20\u5165\u7684value\u3002\u4f8b\uff1a<br \/>\n4\uff09DWRUtil.setValue(id, value) \u7528ID\u627e\u5230\u5143\u7d20\uff0c\u5e76\u66f4\u65b0value<br \/>\n5\uff09DWRUtil.setValues() \u548csetValue(id,value)\u4e00\u6837\uff0c\u53ea\u662f\u5b83\u9700\u8981\u7684\u53c2\u6570\u662f\u4e2ajavascript\u5bf9\u8c61<\/p>\n<p>\uff082\uff09\u64cd\u4f5c\u9875\u9762\u5143\u7d20<br \/>\naddRows()\u548cremoveAllRows()\u7528\u4e8e\u7f16\u8f91tables\u3002<br \/>\naddOptions()\u548cremoveAllOptions()\u7528\u4e8e\u7f16\u8f91lists(\u5982\uff1aselect lists\u3001ul\u3001ol)\u3002<\/p>\n<p>DWR\uff1a\u662fjava\u7684AJAX,\u5b83\u7528\u6765\u5b8c\u6210\u670d\u52a1\u5668\u4e0a\u7684bean\u5bf9\u8c61\u4e0e\u548c\u5ba2\u6237\u7aef\u4e0a\u7684js\u5bf9\u8c61\u7684\u4ea4\u4e92\uff0c\u53ef\u8ba4\u4e3a\uff1adwr\u63d0\u4f9b\u4e86\u7528js\u64cd\u4f5cjava\u7c7b\u5bf9\u8c61\u7684\u65b9\u5f0f\uff01\uff01\uff01<\/p>\n<p>\u5e94\u7528\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<p>1\uff0c\u4e0b\u8f7djar\u5305\u653e\u5728web-inf \u4e0b\u7684 lib\u4e2d\uff0c\u540c\u65f6\u6ce8\u610fdwr \u9700\u8981commons-logging.\u5305\u7684\u652f\u6301\uff0c\u9879\u76ee\u4e2d\u4e5f\u8981\u6709\u6b64\u5305<\/p>\n<p>2\uff0c\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6-web.xml<\/p>\n<p>\u52a0\u5165\u5982\u4e0b\u4ee3\u7801\uff1a<br \/>\n&lt;servlet&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet&lt;\/servlet-class&gt;<br \/>\n&lt;init-param&gt;<br \/>\n&lt;param-name&gt;debug&lt;\/param-name&gt;<br \/>\n&lt;param-value&gt;true&lt;\/param-value&gt;<br \/>\n&lt;\/init-param&gt;<br \/>\n&lt;\/servlet&gt;<\/p>\n<p>&lt;servlet-mapping&gt;<br \/>\n&lt;servlet-name&gt;dwr-invoker&lt;\/servlet-name&gt;<br \/>\n&lt;url-pattern&gt;\/dwr\/*&lt;\/url-pattern&gt;<br \/>\n&lt;\/servlet-mapping&gt;<\/p>\n<p>\/\/\u8fd9\u5c31\u4e3a\u67e5\u770b\u81ea\u52a8\u751f\u6210\u7684\u6620\u5c04\u6587\u4ef6 http:\/\/localhost:8080\/lj\/dwr\/ \u6253\u4e0b\u57fa\u7840,<br \/>\n\/\/ \u5e76\u4e14\u5728\u9875\u9762\u4e2d&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;\u65f6\u5c31\u4f1a\u8c03\u7528dwr\u8fd9\u4e2aservlet\uff0c\u5b8c\u6210\u529f\u80fd\u3002<\/p>\n<p>\u6ce8\uff1aDWR\u6267\u884c\u6d41\u7a0b\uff1a<br \/>\n\u9875\u9762\u8c03\u7528JLogin.checkLogin \u4e4b\u7c7b\u7684\u65b9\u6cd5\uff0c\u4f1a\u5c06\u5176\u8f6c\u5230XMLHttpRequest,\u4ee5get\u6216post\u53d1\u9001\uff0c\u5f53\u7136\u5730\u5740\u4e2d\u4f1a\u7528\/dwr,\u4ee5\u8ba9\u670d\u52a1\u5668\u63a5\u6536\u65f6<br \/>\n\u8f6c\u5230\u5728web.xml\u4e2d\u5b9a\u4e49\u7684servlet,\u8fd9\u4e2aservlet\u5c31\u4f1a\u5c06\u4f20\u6765\u7684\u65b9\u6cd5\u8f6c\u5230java\u65b9\u6cd5\u8c03\u7528\uff0c\u4e4b\u540e\u5f97\u7528XMLHttpRequest\u7684\u56de\u8c03\u51fd\u6570\u4f20\u56de\u6570\u636e<br \/>\nDWR:\u4ece\u4e8b\u7684\u5c31\u662fjavascript\u8bed\u6cd5\u4e0ejava\u8bed\u6cd5\u7684\u8f6c\u6362\u5de5\u4f5c\u3002<\/p>\n<p>3\uff0c\u5728\u4e0eweb.xml\u540c\u4e00\u76ee\u5f55\u4e0b\u5efa\u7acbdwr.xml\u6587\u4ef6<\/p>\n<p>&lt;!DOCTYPE dwr PUBLIC<br \/>\n&#8220;-\/\/GetAhead Limited\/\/DTD Direct Web Remoting 2.0\/\/EN&#8221;<br \/>\n&#8220;http:\/\/getahead.org\/dwr\/dwr20.dtd&#8221;&gt;<\/p>\n<p>&lt;dwr&gt;<br \/>\n&lt;allow&gt;???????????????? \/\/\u6807\u7b7e\u4e2d\u5305\u62ec\u53ef\u4ee5\u66b4\u9732\u7ed9javascript\u8bbf\u95ee\u7684\u4e1c\u897f\u3002<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;JDate&#8221;&gt;<br \/>\n&lt;param name=&#8221;class&#8221; value=&#8221;java.util.Date&#8221;\/&gt;<br \/>\n&lt;include method=&#8221;checkLogin&#8221;\/&gt;<br \/>\n&lt;\/create&gt;<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;Demo&#8221;&gt;<br \/>\n&lt;param name=&#8221;class&#8221; value=&#8221;your.java.Bean&#8221;\/&gt;<br \/>\n&lt;\/create&gt;<\/p>\n<p>&lt;convert converter=&#8221;bean&#8221; match=&#8221;com.lvjian.User&#8221;&gt;<br \/>\n&lt;param name=&#8221;include&#8221; value=&#8221;user&#8221; \/&gt;<br \/>\n&lt;\/convert&gt;<\/p>\n<p>&lt;\/allow&gt;<br \/>\n&lt;\/dwr&gt;<\/p>\n<p>\u6ce8\uff1a\uff081\uff09creator=&#8221;new&#8221;\u4ee3\u8868\u7528\u65e0\u53c2\u6784\u9020\u5668\u6765\u521b\u5efa\u5bf9\u8c61 \uff0c\u4e5f\u53ef\u7528spring,\u7531spring\u4ee3\u7406\u7c7b\u7684\u751f\u547d\u5468\u671f\u7684\u7ba1\u7406<br \/>\n\uff082\uff09javascript=&#8221;JDate&#8221; \u6307\u5b9a\u5728js\u4e2d\u5e94\u7528\u5bf9\u8c61\u65f6\u7684\u540d\u79f0<br \/>\n\uff083\uff09&lt;param name=&#8221;class&#8221; value=&#8221;java.util.Date&#8221;\/&gt; \u6307\u5b9ajs\u5bf9\u8c61JDate\u5bf9\u5e94\u7684java\u7c7b<br \/>\n(4) &lt;include method=&#8221;checkLogin&#8221;\/&gt; \u6307\u5b9a\u516c\u5f00\u7ed9javascript\u7684\u65b9\u6cd5\u3002\u4e0d\u6307\u5b9a\u7684\u8bdd\u5c31\u516c\u5f00\u6240\u6709\u65b9\u6cd5\u3002<br \/>\n\u5bf9\u5e94\u6709\uff1a&lt;exclude&gt;? \u6807\u7b7e\u6307\u5b9a\u8981\u9632\u6b62\u88ab\u8bbf\u95ee\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\uff085\uff09&lt;convert&gt;: &lt;creator&gt;\u6807\u7b7e\u8d1f\u8d23\u516c\u5f00\u7528\u4e8eWeb\u8fdc\u7a0b\u7684\u7c7b\u548c\u7c7b\u7684\u65b9\u6cd5\uff0c&lt;convertor&gt;? \u6807\u7b7e\u5219\u8d1f\u8d23<br \/>\n\u8fd9\u4e9b\u65b9\u6cd5\u7684\u53c2\u6570\u548c\u8fd4\u56de\u7c7b\u578b\u3002convert? \u5143\u7d20\u7684\u4f5c\u7528\u662f\u544a\u8bc9DWR\u5728\u670d\u52a1\u5668\u7aefJava\u5bf9\u8c61\u8868\u793a\u548c\u5e8f\u5217\u5316\u7684JavaScript<br \/>\n\u4e4b\u95f4\u5982\u4f55\u8f6c\u6362\u6570\u636e\u7c7b\u578b\u3002DWR? \u81ea\u52a8\u5730\u5728Java\u548cJavaScript\u8868\u793a\u4e4b\u95f4\u8c03\u6574\u7b80\u5355\u6570\u636e\u7c7b\u578b\u3002\u8fd9\u4e9b\u7c7b\u578b\u5305\u62ec? Java? \u539f\u751f\u7c7b\u578b<br \/>\n\u548c\u5b83\u4eec\u5404\u81ea\u7684\u5c01\u88c5\u7c7b\u8868\u793a\uff0c\u8fd8\u6709? String? \u3001Date? \u3001\u6570\u7ec4\u548c\u96c6\u5408\u7c7b\u578b\u3002<br \/>\nDWR? \u4e5f\u80fd\u628a? JavaBean? \u8f6c\u6362\u6210? JavaScript? \u8868\u793a\uff0c\u4f46\u662f\u51fa\u4e8e\u5b89\u5168\u6027\u7684\u539f\u56e0\uff0c\u8981\u6c42\u663e\u5f0f\u7684\u914d\u7f6e\uff0c<br \/>\n&lt;convertor&gt;? \u6807\u7b7e\u5c31\u662f\u5b8c\u6210\u6b64\u529f\u80fd\u7684\u3002? converter=&#8221;bean&#8221;? \u5c5e\u6027\u6307\u5b9a\u8f6c\u6362\u7684\u65b9\u5f0f\u91c7\u7528? JavaBean? \u547d\u540d\u89c4\u8303\uff0c<br \/>\nmatch=&#8221;&#8221;com.dwr.TestBean&#8221;? \u5c5e\u6027\u6307\u5b9a\u8981\u8f6c\u6362\u7684? javabean? \u540d\u79f0\uff0c? &lt;param&gt;? \u6807\u7b7e\u6307\u5b9a\u8981\u8f6c\u6362\u7684? JavaBean? \u5c5e\u6027\u3002<\/p>\n<p>\u82e5\u53c2\u6570\u662f\u96c6\u5408\u7c7b\u578b\uff0c\u4e14\u5176\u4e2d\u7684\u5143\u7d20\u662f\u81ea\u5b9a\u4e49\u5143\u7d20\uff0c\u90a3\u4e48\u5c31\u8981\u7528\u5982\u4e0b\u65b9\u5f0f\u6307\u5b9a\uff1a<\/p>\n<p>&lt;dwr&gt;<br \/>\n&lt;allow&gt;<br \/>\n&lt;create creator=&#8221;new&#8221; javascript=&#8221;testClass&#8221; &gt;<br \/>\n&lt;param name=&#8221;class&#8221; value= &#8220;com.dwr.TestClass&#8221; \/&gt;<br \/>\n&lt;include method=&#8221;testMethod7&#8243;\/&gt;<br \/>\n&lt;\/create&gt;<br \/>\n&lt;convert converter=&#8221;bean&#8221; match= &#8220;com.dwr.TestBean &#8220;&gt;<br \/>\n&lt;param name=&#8221;include&#8221; value=&#8221;username,password&#8221; \/&gt;<br \/>\n&lt;\/convert&gt;<br \/>\n&lt;\/allow&gt;<br \/>\n&lt;signatures&gt;<br \/>\n&lt;![CDATA[<br \/>\nimport java.util.List;<br \/>\nimport com.dwr.TestClass;<br \/>\nimport com.dwr.TestBean;<br \/>\nTestClass.testMethod7(List&lt;TestBean&gt;);<br \/>\n]]&gt;<br \/>\n&lt;\/signatures&gt;<br \/>\n&lt;\/dwr&gt;<\/p>\n<p>&lt;signatures&gt;? \u6807\u7b7e\u662f\u7528\u6765\u58f0\u660e? java? \u65b9\u6cd5\u4e2d? List? \u3001? Set? \u6216\u8005? Map? \u53c2\u6570\u6240\u5305\u542b\u7684\u786e\u5207\u7c7b\uff0c\u4ee5\u4fbf? java? \u4ee3\u7801\u4f5c\u51fa\u5224\u65ad<\/p>\n<p>\u6ce8\uff1a\u4e0a\u8ff0\u65b9\u5f0f\u5b8c\u6210\u4e86js\u4e0ejava\u7c7b\u5bf9\u8c61\u7684\u6620\u5c04\uff0c\u5728java\u7c7b\u4e2d\u5b9a\u4e49\u65b9\u6cd5\u65f6\u8981\u6ce8\u610f\u4e24\u70b9\uff1a<\/p>\n<p>\uff081\uff09\u56e0js\u4e2ddelete\u4e3a\u5176\u5173\u952e\u5b57\uff0c\u6545\u5728java\u7c7b\u5728\u5b9a\u4e49\u65b9\u6cd5\u65f6\u4e0d\u80fd\u6307\u5b9adelete\u65b9\u6cd5\u3002<br \/>\n\uff082\uff09\u56e0js\u4e0d\u652f\u6301\u91cd\u8f7d\u65b9\u6cd5\uff0c\u6545\u5176\u5bf9\u5e94\u7684\u7c7b\u4e2d\u4e0d\u80fd\u6709\u91cd\u8f7d\u65b9\u6cd5\uff0c\u4e0d\u7136\u5728\u5e94\u7528\u4e2d\u8c03\u7528\u7684\u603b\u4f1a\u662f\u91cd\u8f7d\u65b9\u6cd5\u4e2d\u7684\u6700\u540e\u4e00\u4e2a\u65b9\u6cd5<\/p>\n<p>4\uff0c\u67e5\u770bDWR\u81ea\u52a8\u751f\u6210\u7684\u6620\u5c04\u6587\u4ef6 http:\/\/localhost:8080\/lj\/dwr\/,\u5176\u4e2d\u5982\u4e0b\u4ee3\u7801\u8981\u5305\u542b\u5728jsp\u6587\u4ef6\u4e2d\uff0c<\/p>\n<p>&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/interface\/JLogin.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/engine.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;<\/p>\n<p>5\uff0c\u5e94\u7528\uff1a\u7f16\u5199js\u6587\u4ef6\uff0c\u8c03\u7528\u5373\u53ef<br \/>\n\uff081\uff09 jsp:<br \/>\n\u5305\u542b\u7684js\u6587\u4ef6\uff1a<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/interface\/JLogin.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/engine.js&#8217;&gt;&lt;\/script&gt;<br \/>\n&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;\/dwr\/util.js&#8217;&gt;&lt;\/script&gt;<\/p>\n<p>&lt;script type=&#8217;text\/javascript&#8217; src=&#8217;js\/login.js&#8217;&gt;&lt;\/script&gt;? \/\/\u7528\u6765\u5904\u7406<\/p>\n<p>\u8c03\u7528\uff1a<br \/>\n&lt;input type=&#8221;text&#8221; name=&#8221;userName&#8221; id=&#8221;userName&#8221; value=&#8221;goodday&#8221; onblur=&#8221;check()&#8221;&gt;? \/\/check\u6765\u81ealogin.js<br \/>\n&lt;span id=&#8221;demoReply&#8221; style=&#8221;background:#eeffdd; padding-left:4px; padding-right:4px;&#8221;&gt;&amp;nbsp;&lt;\/span&gt;<\/p>\n<p>(2) login.js\u5982\u4e0b\uff1a<\/p>\n<p>function check(){<br \/>\nvar name = dwr.util.getValue(&#8220;userName&#8221;);<br \/>\nJLogin.checkLogin(name, function(data) {<br \/>\ndwr.util.setValue(&#8220;demoReply&#8221;, data);<br \/>\n});<br \/>\n}<\/p>\n<p>JLogin.checkLogin(name, function(data)\uff09 \uff1a<br \/>\n\u8c03\u7528Login.checkLogin\uff08name\uff09, \u5f53\u7ed3\u679c\u8fd4\u56de\u65f6\u7528data\u63a5\u6536\uff0c\u5e76\u8c03\u7528\u5176\u540e\u7684\u65b9\u6cd5\uff08\u56de\u8c03\u51fd\u6570\uff09<\/p>\n<p>\u53ef\u4ee5\u662f\uff1a\uff081\uff09 JLogin.checkLogin(name, function(data)\uff09<br \/>\n\uff082\uff09 JLogin.checkLogin(name, myCallBack\uff09<\/p>\n<p>(3) JLogin.checkLogin(42, {<br \/>\ncallback:myCallBack<br \/>\n});<br \/>\n\u7b2c\u4e09\u79cd\u65b9\u5f0f\u4e0d\u4ec5\u6613\u8bfb\uff0c\u5e76\u4e14\u4e5f\u53ef\u6307\u5b9a\u8d85\u65f6\u53c2\u6570\uff0c\u53ca\u5f02\u5e38\u5904\u7406\u51fd\u6570<\/p>\n<p>JLogin.checkLogin(42, {<br \/>\ncallback:myCallBack,<br \/>\ntimeout:5000,<br \/>\nerrorHandler:function(message) { alert(&#8220;Oops: &#8221; + message); }<br \/>\n});<\/p>\n<p>\u6ce8:\u5728js\u4e2d\u521b\u5efa\u5bf9\u8c61\u5e76\u4f20\u9012\u7ed9java\u7684\u65b9\u6cd5\uff1a<br \/>\n(1) var p = {<br \/>\nname:&#8221;Fred Bloggs&#8221;,<br \/>\nage:42,<br \/>\nappointments:[ new Date(), new Date(&#8220;1 Jan 2008&#8243;) ]<br \/>\n};<\/p>\n<p>JLogin.checkLogin(p, myCallBack\uff09?? \u90a3\u4e48\u5728\u7c7b\u7684checkLogin\u53c2\u6570\u987b\u662f\u4e00\u4e2a\u7c7b\u5bf9\u8c61\u6765\u63a5\u6536\u5c01\u88c5\u800c\u6765\u7684\u6570\u636e? (2) \u5e26\u96c6\u5408\u4e14\u96c6\u5408\u5143\u7d20\u90fd\u662f\u81ea\u5b9a\u4e49\u7c7b<\/p>\n<p>data = [<br \/>\n{<br \/>\nusername:&#8221;user1&#8243;,<br \/>\npassword:&#8221;password2&#8243;????????????????????? \/\/\u7b2c\u4e00\u4e2a\u5bf9\u8c61<br \/>\n},<br \/>\n{<br \/>\nusername:&#8221;user2&#8243;,<br \/>\npassword:&#8221; password2&#8243;???????????????????? \/\/\u7b2c\u4e8c\u4e2a\u5bf9\u8c61<br \/>\n}<br \/>\n];<\/p>\n<p>JLogin.checkLogin(p, myCallBack\uff09??????? \u90a3\u4e48\u5728\u7c7b\u7684checkLogin\u53c2\u6570\u987b\u662f\u4e00\u4e2a\u7c7b\u5bf9\u8c61\u6765\u63a5\u6536\u5c01\u88c5\u800c\u6765\u7684\u6570\u636e<\/p>\n<p>6\uff0c \u5728js\u4e2d\u8bbf\u95eejava\u5bf9\u8c61<br \/>\nJLogin.checkLogin(name, function(data)\uff09<br \/>\n\uff081\uff09data\u4e3a\u57fa\u578b\uff0c\u76f4\u63a5\u64cd\u4f5c<br \/>\n(2) data\u4e3a\u4e00\u81ea\u5b9a\u4e49\u5bf9\u8c61\uff0c \uff08\u5728web.xml\u4e2d\u914d\u7f6e&lt;conventor&gt;\uff09<br \/>\nfor(var property in data){<br \/>\nalert(&#8220;property:&#8221;+property);<br \/>\nalert(property+&#8221;:&#8221;+data[property]);? \/\/\u6216data.username<br \/>\n}<\/p>\n<p>7\uff0cdwr.util<\/p>\n<p>\uff081\uff09\u83b7\u53d6\u53ca\u8bbe\u7f6e\u9875\u9762\u5143\u7d20value<br \/>\n1) $()???????? \u6ce8\uff1a$ = document.getElementById<br \/>\n\u5373\uff1avar user = $(&#8216;admin.accounts&#8217;).value? \u7b49\u540c\u4e8e var user = document.getElementById(&#8216;admin.accounts&#8217;).value<\/p>\n<p>2)DWRUtil.getValue(id) \u53ef\u4ee5\u6839\u636eid\u53d6\u5f97value\uff0c\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f60\u4e0d\u5fc5\u5728\u610fdiv\u548cselect list\u7684\u4e0d\u540c\u3002<\/p>\n<p>3)DWRUtil.getValues() \u8fd9\u4e2a\u65b9\u6cd5\u548cgetValue()\u4e00\u6837\uff0c\u53ea\u662f\u5b83\u4f20\u5165\u7684\u662f\u4e00\u4e2a\u5305\u542b\u540d\u5b57\u548c\u6570\u503c\u7684javascript\u5bf9\u8c61.\u8fd9\u4e2a\u540d\u5b57\u5c31<br \/>\n\u662fHTML\u5143\u7d20\u7684ID\u3002\u8fd9\u4e2a\u65b9\u6cd5\u4e0d\u4f1a\u8fd4\u56de\u4efb\u4f55\u5bf9\u8c61\uff0c\u5b83\u53ea\u4f1a\u5c06ID\u7684value\u6620\u5c04\u7ed9\u4f20\u5165\u7684value\u3002\u4f8b\uff1a<br \/>\n4\uff09DWRUtil.setValue(id, value) \u7528ID\u627e\u5230\u5143\u7d20\uff0c\u5e76\u66f4\u65b0value<br \/>\n5\uff09DWRUtil.setValues() \u548csetValue(id,value)\u4e00\u6837\uff0c\u53ea\u662f\u5b83\u9700\u8981\u7684\u53c2\u6570\u662f\u4e2ajavascript\u5bf9\u8c61<\/p>\n<p>\uff082\uff09\u64cd\u4f5c\u9875\u9762\u5143\u7d20<br \/>\naddRows()\u548cremoveAllRows()\u7528\u4e8e\u7f16\u8f91tables\u3002<br \/>\naddOptions()\u548cremoveAllOptions()\u7528\u4e8e\u7f16\u8f91lists(\u5982\uff1aselect lists\u3001ul\u3001ol)\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DWR\uff1a\u662fjava\u7684AJAX,\u5b83\u7528\u6765\u5b8c\u6210\u670d\u52a1\u5668\u4e0a\u7684bean\u5bf9\u8c61\u4e0e\u548c\u5ba2\u6237\u7aef\u4e0a\u7684js\u5bf9\u8c61\u7684\u4ea4\u4e92\uff0c\u53ef\u8ba4\u4e3a\uff1adwr\u63d0\u4f9b [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-810","post","type-post","status-publish","format-standard","hentry","category-ajax"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts\/810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/comments?post=810"}],"version-history":[{"count":0,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts\/810\/revisions"}],"wp:attachment":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/media?parent=810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/categories?post=810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/tags?post=810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}