js腳本中執(zhí)行java后臺(tái)代碼方法解析
使用場(chǎng)景:關(guān)閉頁面彈窗時(shí)執(zhí)行sql語句。
其實(shí)js里執(zhí)行sql語句有多種方式。
方式一:直接在js代碼里調(diào)用sql語句,原則上不能使用,因?yàn)檫@將sql直接暴露在客戶端,安全性極差。
方式二:在js里運(yùn)用ajax技術(shù),調(diào)用后臺(tái)方法執(zhí)行sql語句。
方式三:運(yùn)用dwr框架,其實(shí)是對(duì)ajax技術(shù)進(jìn)行了封裝。
一、首先編寫一個(gè)dwr.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr//dwr20.dtd"> <dwr> <allow> <!-- 對(duì)呼叫類型的操作 --> <create javascript="CallTypeOpDwr" creator="new"> <param name="class" value="cn.etcom.jfgl.tel.fee.callType.CallTypeOpDwr" /> <include method="addCallType" /> <include method="modifyCallType" /> <include method="deleteCallType" /> <include method="updateSp" /> </create> </allow> <!-- 用戶信息管理操作中用到的map配置 --> <signatures> <![CDATA[ import java.util.List; import cn.etcom.jfgl.customer.tel.userInfo.UserInfoManageOpDwr; 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>); 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>); ]]> </signatures> </dwr>
二、在web.xml文件里配置servlet
<!-- DWR相關(guān)配置 --> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name> allowGetForSafariButMakeForgeryEasier </param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
三、寫一個(gè)普通的JAVA類
package cn.etcom.jfgl.tel.fee.callType; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.json.JSONException; import org.json.JSONObject; import cn.etcom.common.utility.DBUtil; import cn.etcom.common.utility.RsHandler; import cn.etcom.common.utility.SqlActuator; import cn.etcom.common.utility.StringUtil; /******************************************************************************* * * @author 劉彥寧 2011-08-12 * */ // 處理呼叫類型的dwr public class CallTypeOpDwr { /*************************************************************************** * DWR 方法,執(zhí)行存儲(chǔ)過程。 * */ public String updateSp() { String sql = "exec Pub_Sp_UpdateFieldMemo ?"; Connection conn = DBUtil.getConnection(); PreparedStatement psmt = null; try { psmt = conn.prepareStatement(sql); psmt.setString(1, "CALL"); boolean a = psmt.execute(); DBUtil.close(null, psmt, conn); conn = DBUtil.getConnection(); psmt = conn.prepareStatement(sql); psmt.setString(1, "USER"); boolean b = psmt.execute(); System.out.println(a); System.out.println(b); System.out.println("關(guān)閉彈窗執(zhí)行存儲(chǔ)過程 >> "+sql); } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.close(null, psmt, conn); } return null; } }
四、寫一個(gè)JSP頁面,主要導(dǎo)入engine.js和相應(yīng)的java類映射的js文件,然后編寫js即可調(diào)用
//以下為jsp的引入js文件部分 <script type="text/javascript"> //設(shè)置根路徑,放在 tab.js 前 var glbRootPath = "<%=basePath%>"; </script> <script src="<%=basePath%>js/lhgdialog/lhgcore.min.js" type="text/javascript"></script> <script src="<%=basePath%>js/lhgdialog/lhgdialog.js" type="text/javascript"></script>
五、js文件里調(diào)用后臺(tái)代碼
var basePath = ""; if(typeof(glbRootPath) != "undefined"){ basePath = glbRootPath; document.write("<script type='text/javascript' src='"+basePath+"\/dwr\/engine.js'><\/script><script type='text/javascript' src='"+basePath+"\/dwr\/interface\/CallTypeOpDwr.js'><\/script>"); } /* 中間省略若干代碼 */ . . . if(typeof(glbRootPath) != "undefined"&&$(this).parent().children().eq(0).text()=="呼叫類型設(shè)置"){ console.log("進(jìn)來了"); DWREngine.setAsync(false); CallTypeOpDwr.updateSp(); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Selenium執(zhí)行JavaScript腳本的方法示例
- Selenium執(zhí)行Javascript腳本參數(shù)及返回值過程詳解
- Java執(zhí)行JS腳本工具
- JS腳本加載后執(zhí)行相應(yīng)回調(diào)函數(shù)的操作方法
- Angularjs通過指令監(jiān)聽ng-repeat渲染完成后執(zhí)行腳本的方法
- JS動(dòng)態(tài)加載腳本并執(zhí)行回調(diào)操作
- node.js 動(dòng)態(tài)執(zhí)行腳本
- 瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之動(dòng)態(tài)腳本與Ajax腳本注入
- 瀏覽器環(huán)境下JavaScript腳本加載與執(zhí)行探析之defer與async特性
- 探析瀏覽器執(zhí)行JavaScript腳本加載與代碼執(zhí)行順序
- 詳解javascript腳本何時(shí)會(huì)被執(zhí)行
相關(guān)文章
js+html5 canvas實(shí)現(xiàn)ps鋼筆摳圖
這篇文章主要介紹了js+html5 canvas實(shí)現(xiàn)ps鋼筆摳圖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Bootstrap 過渡效果Transition 模態(tài)框(Modal)
這篇文章主要介紹了Bootstrap 過渡效果Transition 模態(tài)框(Modal),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03JavaScript中的return語句簡(jiǎn)單介紹
return語句在js中起到舉足輕重的作用,該關(guān)鍵字不僅具有返回函數(shù)值得功能,還具有一些特殊的用法,有個(gè)清晰的把握是非常有必要的,下面通過本篇文章給大家簡(jiǎn)單介紹下return語句的作用2015-12-12