js腳本中執行java后台代碼


使用場景:關閉頁面彈窗時執行sql語句。

其實js里執行sql語句有多種方式。

方式一:直接在js代碼里調用sql語句,原則上不能使用,因為這將sql直接暴露在客戶端,安全性極差。

方式二:在js里運用ajax技術,調用后台方法執行sql語句。

方式三:運用dwr框架,其實是對ajax技術進行了封裝。

一、首先編寫一個dwr.xml文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr//dwr20.dtd">
 3 <dwr>
 4     <allow>
 5         <!-- 對呼叫類型的操作 -->
 6         <create javascript="CallTypeOpDwr" creator="new">
 7             <param name="class"
 8                 value="cn.etcom.jfgl.tel.fee.callType.CallTypeOpDwr" />
 9             <include method="addCallType" />
10             <include method="modifyCallType" />
11             <include method="deleteCallType" />
12             <include method="updateSp" />
13         </create>
14 
15     </allow>
16     <!-- 用戶信息管理操作中用到的map配置 -->
17     <signatures>
18         <![CDATA[ 
19             import java.util.List; 
20             import cn.etcom.jfgl.customer.tel.userInfo.UserInfoManageOpDwr;
21             UserInfoManageOpDwr.addUsersInfo(String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,Map<String,String>); 
22             UserInfoManageOpDwr.addUserInfo(String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,Map<String,String>); 
23             ]]>
24     </signatures>
25 </dwr>

 

二、在web.xml文件里配置servlet

 1 <!-- DWR相關配置 -->
 2     <servlet>
 3         <servlet-name>dwr-invoker</servlet-name>
 4         <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 5         <init-param>
 6             <param-name>debug</param-name>
 7             <param-value>false</param-value>
 8         </init-param>
 9         <init-param>
10             <param-name>
11                 allowGetForSafariButMakeForgeryEasier
12             </param-name>
13             <param-value>true</param-value>
14         </init-param>
15         <init-param>   
16             <param-name>crossDomainSessionSecurity</param-name>   
17             <param-value>false</param-value>   
18         </init-param>
19         <load-on-startup>1</load-on-startup>
20     </servlet>
21     <servlet-mapping>
22         <servlet-name>dwr-invoker</servlet-name>
23         <url-pattern>/dwr/*</url-pattern>
24     </servlet-mapping>

三、寫一個普通的JAVA類

 1 package cn.etcom.jfgl.tel.fee.callType;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.util.ArrayList;
 8 import java.util.List;
 9 
10 import javax.servlet.http.HttpServletRequest;
11 
12 import org.json.JSONException;
13 import org.json.JSONObject;
14 
15 import cn.etcom.common.utility.DBUtil;
16 import cn.etcom.common.utility.RsHandler;
17 import cn.etcom.common.utility.SqlActuator;
18 import cn.etcom.common.utility.StringUtil;
19 
20 /*******************************************************************************
21  * 
22  * @author 劉彥寧 2011-08-12
23  * 
24  */
25 // 處理呼叫類型的dwr
26 public class CallTypeOpDwr {
27     
28     /***************************************************************************
29      * DWR 方法,執行存儲過程。
30      * 
31      */
32     public String updateSp() {
33         String sql = "exec Pub_Sp_UpdateFieldMemo ?";
34         Connection conn = DBUtil.getConnection();
35         PreparedStatement psmt = null;
36         try {
37             psmt = conn.prepareStatement(sql);
38             psmt.setString(1, "CALL");
39             boolean a = psmt.execute();
40             DBUtil.close(null, psmt, conn);
41             conn = DBUtil.getConnection();
42             psmt = conn.prepareStatement(sql);
43             psmt.setString(1, "USER");
44             boolean b = psmt.execute();
45             System.out.println(a);
46             System.out.println(b);
47             System.out.println("關閉彈窗執行存儲過程 >> "+sql);
48         } catch (SQLException e) {
49             e.printStackTrace();
50         }finally {
51             DBUtil.close(null, psmt, conn);
52         }
53         return null;
54     }
55 }

四、寫一個JSP頁面,主要導入engine.js和相應的java類映射的js文件,然后編寫js即可調用。

1 //以下為jsp的引入js文件部分
2 <script type="text/javascript">
3     //設置根路徑,放在 tab.js 前
4     var glbRootPath = "<%=basePath%>";
5 </script>
6 <script src="<%=basePath%>js/lhgdialog/lhgcore.min.js" type="text/javascript"></script>
7 <script src="<%=basePath%>js/lhgdialog/lhgdialog.js" type="text/javascript"></script>

五、js文件里調用后台代碼

 1 var basePath = "";
 2     if(typeof(glbRootPath) != "undefined"){ 
 3         basePath = glbRootPath;
 4         document.write("<script type='text/javascript' src='"+basePath+"\/dwr\/engine.js'><\/script><script type='text/javascript' src='"+basePath+"\/dwr\/interface\/CallTypeOpDwr.js'><\/script>");
 5     }
 6 /*
 7 中間省略若干代碼
 8 */
 9 .
10 .
11 .
12 if(typeof(glbRootPath) != "undefined"&&$(this).parent().children().eq(0).text()=="呼叫類型設置"){
13                 console.log("進來了");
14                 DWREngine.setAsync(false);
15                 CallTypeOpDwr.updateSp();
16             }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM