js脚本中执行java后台代码方法解析


Posted in Javascript onOctober 11, 2019

使用场景:关闭页面弹窗时执行sql语句。

其实js里执行sql语句有多种方式。

方式一:直接在js代码里调用sql语句,原则上不能使用,因为这将sql直接暴露在客户端,安全性极差。

方式二:在js里运用ajax技术,调用后台方法执行sql语句。

方式三:运用dwr框架,其实是对ajax技术进行了封装。

一、首先编写一个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>
    <!-- 对呼叫类型的操作 -->
    <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相关配置 -->
  <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>

三、写一个普通的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 方法,执行存储过程。
   * 
   */
  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("关闭弹窗执行存储过程 >> "+sql);
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      DBUtil.close(null, psmt, conn);
    }
    return null;
  }
}

四、写一个JSP页面,主要导入engine.js和相应的java类映射的js文件,然后编写js即可调用

//以下为jsp的引入js文件部分
<script type="text/javascript">
  //设置根路径,放在 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文件里调用后台代码

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()=="呼叫类型设置"){
        console.log("进来了");
        DWREngine.setAsync(false);
        CallTypeOpDwr.updateSp();
      }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
Apr 17 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
Mar 03 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 Javascript
微信小程序 利用css实现遮罩效果实例详解
Jan 21 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
vue的状态管理模式vuex
Nov 30 Javascript
微信小程序实现换肤功能
Mar 14 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 #Javascript
ES6之Proxy的get方法详解
Oct 11 #Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 #Javascript
jquery将json转为数据字典的实例代码
Oct 11 #jQuery
JavaScript实现抖音罗盘时钟
Oct 11 #Javascript
javascript刷新父页面方法汇总详解
Oct 10 #Javascript
element form 校验数组每一项实例代码
Oct 10 #Javascript
You might like
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
php开发工具有哪五款
2015/11/09 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
python编写Logistic逻辑回归
2020/12/30 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
python实现简单的tcp 文件下载
2020/09/16 Python
python tkinter实现连连看游戏
2020/11/16 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
行政主管职责范本
2014/03/07 职场文书
我的祖国演讲稿
2014/05/04 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Python实现天气查询软件
2021/06/07 Python
vue实现移动端div拖动效果
2022/03/03 Vue.js