ssdevClient_servDebug.ss.jsp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <%@ page import="ss.serv.ServC" %>
  2. <%@ page import="ss.dev.DevC" %>
  3. <%@ page import="ss.AppC" %>
  4. <%@ page import="java.util.HashSet" %>
  5. <%@ page import="com.google.gson.Gson" %>
  6. <%@ page import="java.util.Set" %>
  7. <%@ page import="java.util.HashMap" %>
  8. <%@ page import="java.util.Map" %>
  9. <%@ page import="java.io.File" %>
  10. <%@ page import="biz.ssdev.SsdevClientC" %>
  11. <%-- 去掉,去掉 basePath(String),直接用 /page/ = AppC.PAGE_path。Lin
  12. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false" %>
  13. <jsp@directive.page import="java.io.*"/>
  14. <jsp@directive.page import="wd.core.web.service.ServiceConst"/>
  15. <jsp@directive.page import="wd.core.web.WdDevLoginServlet"/>
  16. <jsp@directive.page import="com.google.gson.Gson;"/>
  17. <@%
  18. String path = request.getContextPath();
  19. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  20. %@>
  21. --%>
  22. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  23. <html>
  24. <head>
  25. <%-- 去掉,去掉 basePath(String),直接用 /page/ = AppC.PAGE_path。Lin
  26. <base href="<%=basePath%>">
  27. <title>My JSP 'index.jsp' starting page</title>
  28. --%>
  29. <meta http-equiv="pragma" content="no-cache">
  30. <meta http-equiv="cache-control" content="no-cache">
  31. <meta http-equiv="expires" content="0">
  32. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  33. <meta http-equiv="description" content="This is my page">
  34. <%-- 改。Lin
  35. <link href="/wd/theme/standard/style.css" rel="stylesheet" type="text/css"> --%>
  36. <link href="/skin/ssdev/style.css" rel="stylesheet" type="text/css">
  37. <js.ss file="/ss/json2.js"/> <%-- ="wd/js/json2.js"。Lin --%>
  38. <js.ss file="/ss/lhgdialog/lhgcore.min.js"/> <%-- ="/wd/js/lhgdialog/lhgcore.min.js"。Lin --%>
  39. <js.ss file="/ss/lhgdialog/lhgdialog.min.js"/> <%-- ="/wd/js/lhgdialog/lhgdialog.min.js"。Lin --%>
  40. <js.ss file="/ss/lhgdialog/lhgdialogUtil.js"/> <%-- ="/wd/js/lhgdialogUtil.js"。Lin --%>
  41. <js.ss file="/ss/Geometry.js"/> <%-- ="/wd/js/Geometry.js"。Lin --%>
  42. <js.ss file="/ss/common.js"/> <%-- ="wd/js/common.js"。Lin --%>
  43. <js.ss file="/ss/jquery/jquery-1.7.2.min.js"/> <%-- ="/wd/js/jquery-1.6.2.min.js"。Lin --%>
  44. <script type="text/javascript">
  45. /// 增加,来自 HDDev_scgl:servicesTest.jsp。Lin
  46. <%
  47. /* 改,去掉 WdDevLoginServlet.setCurrApp(,改用 session."pxmh"/"pxmMc" 等。Lin
  48. String app = WdDevLoginServlet.getCurrApp();
  49. */ String app = String.valueOf(session.getAttribute("pxmh"));
  50. String appsPath = session.getServletContext().getRealPath("<%=SsdevClientC.DEBUG_baseDir%>"+ app); // ("wd/debug/"+。Lin
  51. File file = new File(appsPath);
  52. out.write("var debugInfo = {};");
  53. /* 改。Lin
  54. if(!file.exists()){
  55. }else{
  56. */if(file.exists()){
  57. Map<String,Set<String>> debugMap = new HashMap<>();
  58. File[] fileArr = file.listFiles();
  59. for(File f : fileArr){
  60. String fileName = f.getName();
  61. //System.out.println("fileName:"+fileName);
  62. if(!fileName.contains("$")) continue;
  63. String[] nameArr = fileName.split("\\$");
  64. String serviceName = nameArr[0];
  65. String debugName = nameArr[1];
  66. Set<String> set = debugMap.get(serviceName);
  67. if(null==set){
  68. set = new HashSet<String>();
  69. debugMap.put(serviceName,set);
  70. }
  71. set.add(debugName);
  72. }
  73. Gson gson = new Gson();
  74. String debugInfo = gson.toJson(debugMap);
  75. out.write("debugInfo = "+debugInfo+";");
  76. }
  77. %>
  78. ///
  79. var requestRowIndex = 0;
  80. var sessionRowIndex = 0;
  81. function initRequestParameter(pjson){
  82. for(var key in pjson){
  83. var nameV = key;
  84. var valueVArr = pjson[key];
  85. for(var i=0;i<valueVArr.length;i++){
  86. var valueV = valueVArr[i];
  87. insertTr('requestParametersTable',nameV,valueV);
  88. }
  89. }
  90. }
  91. function insertTr(tableId,nameV,valueV){
  92. var table = document.getElementById(tableId);
  93. var rowIndex = table.rows.length;
  94. var tr = table.insertRow(rowIndex);
  95. var keyTd = tr.insertCell(0);
  96. var valueTd = tr.insertCell(1);
  97. var optionTd = tr.insertCell(2);
  98. var keyInput = document.createElement('input');
  99. keyInput.type = 'text';
  100. keyInput.name = 'key';
  101. keyInput.size = 20;
  102. keyInput.id = 'key_'+requestRowIndex;
  103. if(nameV){keyInput.value = nameV};
  104. keyTd.appendChild(keyInput);
  105. var valueInput = document.createElement('input');
  106. valueInput.type = 'text';
  107. valueInput.name = 'value';
  108. valueInput.size = 80;
  109. valueInput.id ='value_'+requestRowIndex;
  110. if(valueV){valueInput.value = valueV};
  111. valueTd.appendChild(valueInput);
  112. var delButton = document.createElement('input');
  113. delButton.type = 'button';
  114. delButton.name = 'delButton';
  115. delButton.value = '删除';
  116. delButton.className = 'test-list-button';
  117. optionTd.appendChild(delButton);
  118. delButton.onclick = function(){
  119. table.deleteRow(tr.rowIndex);
  120. }
  121. requestRowIndex++;
  122. }
  123. function buildForm(actionUrl){
  124. var requestParametersJson = {};
  125. var div = document.getElementById('requestParametersDiv');
  126. var _form = document.createElement('form');
  127. _form.action = actionUrl;
  128. _form.method = 'post';
  129. div.appendChild(_form);
  130. for(var i=0;i<requestRowIndex;i++){
  131. //--------------填充参数Json start-------------------
  132. var keyId = 'key_'+i;
  133. var valueId = 'value_'+i;
  134. var keyInput = document.getElementById(keyId); if(!keyInput) continue;
  135. var valueInput = document.getElementById(valueId);
  136. var keyV = keyInput.value;
  137. var valueV = valueInput.value;
  138. if(!requestParametersJson[keyV]){
  139. requestParametersJson[keyV]= new Array(valueV);
  140. }else{
  141. var subArr = requestParametersJson[keyV];
  142. subArr.push(valueV);
  143. }
  144. //--------------填充参数Json end-------------------
  145. //--------------生成隐藏表单 start-------------------
  146. generateHiddenForm(_form,keyV,valueV);
  147. //--------------生成隐藏表单 end-------------------
  148. }
  149. var jsonStr = JSON.stringify(requestParametersJson);
  150. //参数Json表单
  151. generateHiddenForm(_form,'wd_serviceTest_rp',jsonStr);
  152. //参数Json表单name
  153. //var rp_name = document.getElementById('rp_name').value;
  154. //generateHiddenForm(_form,'wd_serviceTest_rp_name',rp_name);
  155. //session Xml
  156. var wd_serviceTest_sa_xmlName = "";
  157. for(var i=0;i<sessionRowIndex;i++){
  158. var xmlNameTd = document.getElementById('xml_'+i);
  159. if(xmlNameTd){
  160. wd_serviceTest_sa_xmlName += xmlNameTd.innerHTML + ",";
  161. }
  162. }
  163. //生成隐藏表单 wd_serviceTest_sa_xmlName
  164. generateHiddenForm(_form,<%=SsdevClientC.REQ_sessXmlFileName%>,wd_serviceTest_sa_xmlName); // ,'wd_serviceTest_sa_xmlName',。
  165. //生成隐藏表单
  166. generateHiddenForm(_form,'<%=ServC.URL_ssServ%>',g('serviceName').value||g('serviceName2').value); // ,'<@%=ServiceConst.SERVICE_NAME%>',。Lin
  167. generateHiddenForm(_form,'<%=DevC.DEV_pageUrl%>',g('resultPage').value); // ,'<@%=ServiceConst.WD_DEV_OUTPUT_PAGE%>',。Lin
  168. //alert('jsonStr:'+jsonStr);
  169. return _form;
  170. }
  171. function generateHiddenForm(_form,name,value){
  172. var hiddenInput = document.createElement('input');
  173. hiddenInput.type='hidden';
  174. hiddenInput.name = name;
  175. hiddenInput.value = value;
  176. _form.appendChild(hiddenInput);
  177. }
  178. function choiceRequestParameterFromHistory(){
  179. var url = '<%=basePath%>wd/servicesTest/requestParameterList.jsp';
  180. var title = '从历史中选择request的Parameter参数';
  181. openDialog( 's_001', url , title);
  182. }
  183. function choiceSessionAttributesFromXml(){
  184. /* 改。Lin
  185. * 改用 <serv.ss,sessionAttributesList.jsp 里的程序移到 SsdevClientServ.initSessSel() 了
  186. * 去掉 basePath(String),直接用 /page/ = AppC.PAGE_path。Lin
  187. var url = '<@%=basePath%>wd/servicesTest/sessionAttributesList.jsp';
  188. */ var url = "<serv.ss name='ssdevClient_initSessSel' dest='ssdevClient_sessParmList'/>";
  189. var title = '选择Xml文件设置session的Attribute参数';
  190. openDialog( 's_001', url , title);
  191. }
  192. function initChoiceXml(fileName){
  193. var table = document.getElementById('sessionAttributesTable');
  194. var rowIndex = table.rows.length;
  195. var tr = table.insertRow(rowIndex);
  196. var nameTd = tr.insertCell(0);
  197. var optionTd = tr.insertCell(1);
  198. nameTd.id = "xml_"+sessionRowIndex;
  199. nameTd.innerHTML = fileName;
  200. var delButton = document.createElement('input');
  201. delButton.type = 'button';
  202. delButton.name = 'delButton';
  203. delButton.value = '删除';
  204. delButton.className = 'test-list-button';
  205. optionTd.appendChild(delButton);
  206. delButton.onclick = function(){
  207. table.deleteRow(tr.rowIndex);
  208. }
  209. sessionRowIndex++;
  210. }
  211. function test(){
  212. var tip = checkNull('serviceName','服务名');
  213. if(tip){
  214. tip = checkNull('serviceName2','服务名2');
  215. }
  216. tip += checkNull('resultPage','结果页面');
  217. if(''!=tip){
  218. alert(tip);
  219. return;
  220. }
  221. /* 改,去掉 mid.jsp,改为 <serv.ss name= dest=。Lin
  222. * mid.jsp 移到 SsdevClientServ.runServ(),改为服务 -- 都是程序
  223. * 用 HDDev_scgl: 的 mid.jsp
  224. var actionUrl = '/wd/servicesTest/mid.jsp';
  225. */ var actionUrl = "<serv.ss name='ssdevClient_runServ'/>";
  226. var _form = buildForm(actionUrl);
  227. _form.submit();
  228. }
  229. /// 增加,来自 HDDev_scgl:servicesTest.jsp。Lin
  230. function initDebugInfo(){
  231. debugInfo = debugInfo || {};
  232. var serviceNameSel = g('serviceName');
  233. serviceNameSel.options.length = 0;
  234. for(var serviceName in debugInfo){
  235. addOption(serviceNameSel,serviceName,serviceName); // 应该在 common.js。Lin
  236. }
  237. }
  238. function addEvent(){
  239. g('serviceName').onchange = serviceName_onchange;
  240. g('createDebug').onclick = createDebug;
  241. g('debugName').onchange = debugName_onchange;
  242. }
  243. function serviceName_onchange(){
  244. var serviceNameSel = g('serviceName');
  245. var debugNameSel = g('debugName');
  246. var serviceName = serviceNameSel.value;
  247. var debugNameArr = debugInfo[serviceName] || [];
  248. debugNameSel.options.length = 0;
  249. for(var i=0;i<debugNameArr.length;i++ ){
  250. var debugName = debugNameArr[i];
  251. addOption(debugNameSel,debugName,debugName);
  252. }
  253. debugName_onchange();
  254. }
  255. function debugName_onchange(){
  256. /* 改,$ 改为 _。Lin
  257. var debugFileName = g('serviceName').value+'$'+g('debugName').value;
  258. */ var debugFileName = g('serviceName').value+'_'+g('debugName').value;
  259. $.ajax({
  260. /* 改,去掉 apps.jsp,移到 SsdevClientServ 里 -- 都是程序。Lin
  261. url: "<@%=path%>/wd/apps/apps.jsp?method=getDebugInfo",
  262. */ url: "<serv.ss name='ssdevClient_rdServDebugParm'/>",
  263. type: "POST",
  264. dataType:"text",
  265. data: {"debugFileName":encodeURI(debugFileName)},
  266. /* 改。Lin
  267. * 统一 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData
  268. * 增加错误处理
  269. success: function(msg){
  270. var msg = msg.trim();
  271. */
  272. success: function(data){
  273. if (data.ssCode != 0) {
  274. alert(data.ssMsg);
  275. return;
  276. }
  277. var msg = data.ssData;
  278. eval("var debugJson = "+msg);
  279. var requestP = debugJson['requestP'];
  280. var sessionP = debugJson['sessionP'];
  281. var page = debugJson['page'];
  282. eval("var requestJson = "+requestP);
  283. eval("var sessionJson = "+sessionP);
  284. clearTable(g('requestParametersTable'),2);
  285. clearTable(g('sessionAttributesTable'),2);
  286. initRequestParameter(requestJson);
  287. if(sessionJson['name']){
  288. var sessionNameArr = sessionJson['name'];
  289. for(var i=0;i<sessionNameArr.length;i++){
  290. initChoiceXml(sessionNameArr[i]);
  291. }
  292. }
  293. g('resultPage').value = ''!=page ? page : '<%=AppC.PAGE_path%>ssdevClient/ssdevClient_servResult.jsp'; // : '/wd/page/result.jsp'。Lin
  294. }
  295. });
  296. }
  297. function createDebug(){
  298. var tip = checkNull('newServiceName','服务名'); // 应该在 common.js。Lin
  299. tip += checkNull('newDebugName','调试名'); // 应该在 common.js。Lin
  300. //tip +=checkDeugName(g('newServiceName').value,g('newDebugName').value);
  301. if(''!=tip) {
  302. alert(tip);
  303. return;
  304. }
  305. var requestParametersJson = {};
  306. for(var i=0;i<requestRowIndex;i++){
  307. //--------------填充参数Json start-------------------
  308. var keyId = 'key_'+i;
  309. var valueId = 'value_'+i;
  310. var keyInput = document.getElementById(keyId); if(!keyInput) continue;
  311. var valueInput = document.getElementById(valueId);
  312. var keyV = keyInput.value;
  313. var valueV = valueInput.value;
  314. if(!requestParametersJson[keyV]){
  315. requestParametersJson[keyV]= new Array(valueV);
  316. }else{
  317. var subArr = requestParametersJson[keyV];
  318. subArr.push(valueV);
  319. }
  320. //--------------填充参数Json end-------------------
  321. }
  322. var requestP = JSON.stringify(requestParametersJson);
  323. var sessionPJson = {};
  324. for(var i=0;i<sessionRowIndex;i++){
  325. var xmlNameTd = document.getElementById('xml_'+i);
  326. if(xmlNameTd){
  327. var nameArr = sessionPJson['name'];
  328. if(!nameArr){
  329. nameArr = [];
  330. }
  331. nameArr.push(xmlNameTd.innerHTML);
  332. sessionPJson['name'] = nameArr;
  333. }
  334. }
  335. var sessionP = JSON.stringify(sessionPJson);
  336. var newServiceName = g('newServiceName').value;
  337. var newDebugName = g('newDebugName').value;
  338. var page = g('resultPage').value;
  339. $.ajax({
  340. /* 改,去掉 apps.jsp,移到 SsdevClientServ 里 -- 都是程序。Lin
  341. url: "<@%=path%>/wd/apps/apps.jsp?method=createDebug",
  342. */ url: "<serv.ss name='ssdevClient_wrServDebugParm'/>",
  343. type: "POST",
  344. dataType:"text",
  345. data: {"newServiceName":newServiceName,"newDebugName":encodeURI(newDebugName),"requestP" : requestP,"sessionP":sessionP,'page':page},
  346. /* 改,统一 Ajax 返回标准 -- .ssCode、.ssMsg、.ssData。Lin
  347. success: function(msg){
  348. if('success'==msg.trim()){
  349. */
  350. success: function(data){
  351. if (data.ssCode == 0) {
  352. var arr = debugInfo[newServiceName] || [];
  353. if(''==checkDeugName(newServiceName,newDebugName)){
  354. arr.push(newDebugName);
  355. }
  356. debugInfo[newServiceName] = arr;
  357. initDebugInfo();
  358. g('serviceName').value = newServiceName;
  359. g('serviceName').onchange();
  360. g('debugName').value=newDebugName;
  361. alert('创建调试 '+newDebugName+' 成功!');
  362. }
  363. }
  364. });
  365. }
  366. function checkDeugName(newServiceName,newDebugName){
  367. var result = '';
  368. if(debugInfo[newServiceName]){
  369. var debugArr = debugInfo[newServiceName];
  370. for(var i=0;i<debugArr.length;i++){
  371. if(newDebugName == debugArr[i]){
  372. result += '调试名:'+newDebugName+" 已存在!\n";
  373. break;
  374. }
  375. }
  376. }
  377. return result;
  378. }
  379. onload = function(){
  380. initDebugInfo();
  381. addEvent();
  382. g('serviceName').onchange();
  383. g('debugName').onchange();
  384. }
  385. ///
  386. $(function(){
  387. /* 改,参数通过 session 传递 -- 服务 ssdevClient_initServDebug 里写 < ssdevClient_taskList.ss.jsp 里点击 调试 按钮,然后打开本部件。Lin
  388. $.post("<serv.ss name='ssdevClient_rdServOpt'/>",{},function(data){ // ("/pmsAction.do?action=servicesTestName",。参数通过 session 传递 -- ssdevClient_initServDebug。Lin
  389. */ $.post("<serv.ss name='ssdevClient_rdServOpt'/>",{},function(data){
  390. console.log(data);
  391. $("#serviceName").append('<option value="">请选择</option>');
  392. for(var i=0;i<data.length;i++){
  393. $("#serviceName").append('<option value="'+data[i].service+'">'+data[i].service+'---'+data[i].function+'()</option>');
  394. }
  395. },"json");
  396. })
  397. </script>
  398. </head>
  399. <body>
  400. <div id="requestParametersDiv"></div>
  401. <%-- 改,去掉 WdDevLoginServlet.setCurrApp(,改用 session."pxmMc"。Lin
  402. <h1 align="center" style="color: green">测试服务(当前应用:<%=WdDevLoginServlet.getCurrApp() %>)</h1> --%>
  403. <h1 align="center" style="color: green">调试服务(当前应用:${sessionScope.ssdevPxmMc})</h1>
  404. <hr color="green" />
  405. <div class="test">
  406. <div>
  407. <table class="test-choose">
  408. <tr>
  409. <td>服务名:
  410. <select id="serviceName" name="serviceName">
  411. </select>
  412. <%-- 先去掉,不应该会用到 -- 原手工把项目的服务配置文件拷贝到每个程序员的电脑里,可能更新不及时导致下拉列表里没有。Lin
  413. <@input id="serviceName2" name="serviceName2" type="text" placeholder="其他服务" title="如果服务不在左列表,可以这里输入"/>
  414. --%>
  415. <%-- 放开 "调试名",不能去掉。Lin --%>
  416. 调试名:
  417. <select id="debugName" name="debugName">
  418. </select>
  419. <%-- --%>
  420. 结果页面:
  421. <input type="text" id="resultPage" name="resultPage" size="40" value="<%=AppC.PAGE_path%>ssdevClient/ssdevClient_servResult.jsp"> <%-- ="/wd/page/result.jsp">。Lin --%>
  422. </td>
  423. </tr>
  424. </table>
  425. </div>
  426. <div class="test-list-div">
  427. <div>
  428. <table class="test-list" id="requestParametersTable">
  429. <tr>
  430. <th colspan="3">设置request的parameter参数
  431. <input type="button" class="test-button" name="czbuton" value="增加" onclick="insertTr('requestParametersTable');" />
  432. </th>
  433. </tr>
  434. <tr>
  435. <th>name</th>
  436. <th>value</th>
  437. <th width="10%">操作</th>
  438. </tr>
  439. <TBODY id='trContainer'>
  440. </TBODY>
  441. </table>
  442. </div>
  443. </div>
  444. <div class="test-list-div">
  445. <div>
  446. <table class="test-list" id="sessionAttributesTable">
  447. <tr>
  448. <th colspan="2">设置session的Attribute参数
  449. <input type="button" class="test-button" name="czbuton" value="选择xml" onclick="choiceSessionAttributesFromXml();" />
  450. </th>
  451. </tr>
  452. <tr>
  453. <th>name</th>
  454. <th width="10%">操作</th>
  455. </tr>
  456. <TBODY id='trContainer'>
  457. </TBODY>
  458. </table>
  459. </div>
  460. </div>
  461. <div>
  462. <table class="test-choose">
  463. <tr>
  464. <td>
  465. <p><input type="button" class="test-button" name="czbuton" onclick="test();" value="调试" /></p>
  466. </td>
  467. </tr>
  468. </table>
  469. </div>
  470. </div>
  471. <%-- 放开 "调试名",不能去掉。Lin --%>
  472. <div class="test-list-div">
  473. <table class="edit">
  474. <tr>
  475. <th width="20%">服务名:
  476. <input id="newServiceName" name="newServiceName" type="text" class="edit-text" id="textfield">
  477. </th>
  478. <th width="30%">调试名:
  479. <input id="newDebugName" name="newDebugName" type="text" class="edit-text" id="textfield">
  480. </th>
  481. <td width="20%">
  482. <input type="button" id="createDebug" name="createDebug" value="保存" class="edit-button"> <%-- ="创 建"。应该含保存。Lin --%>
  483. </td>
  484. </tr>
  485. </table>
  486. </div>
  487. <%-- --%>
  488. </body>
  489. </html>