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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
jquery插件 autoComboBox 下拉框
Dec 22 Javascript
基于jquery实现的表格分页实现代码
Jun 21 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
jquery显示隐藏元素的实现代码
May 19 Javascript
简单的渐变轮播插件
Jan 12 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
javascript帧动画(实例讲解)
Sep 02 Javascript
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 jQuery
vue-cli V3.0版本的使用详解
Oct 24 Javascript
js实现九宫格抽奖
Mar 19 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
php字符串函数学习之substr()
2015/03/27 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
js表单登陆验证示例
2016/10/19 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
大学同学聚会邀请函
2014/01/29 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
2014年学生工作总结
2014/11/20 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL