• 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             }    
  • 相关阅读:
    2021-01-27:如何把文件从服务器复制到本地,用什么命令?
    2020-01-26:mysql8.0做了什么改进?
    2020-01-25:redis中,哨兵如何选举?
    2020-01-24:手写代码:快速排序。
    2021-01-23:LFU手撸,说下时间复杂度和空间复杂度。
    2021-01-22:java中,HashMap的写流程是什么?
    2021-01-21:java中,HashMap的读流程是什么?
    2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?
    2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?
    USB Type-C设备是否需要CC逻辑芯片 ------ 转载
  • 原文地址:https://www.cnblogs.com/zhncnblogs/p/7544489.html
Copyright © 2020-2023  润新知