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 相关文章推荐
javascript innerText和innerHtml应用
Jan 28 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
Dec 29 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
js实现textarea限制输入字数
Feb 13 Javascript
layui选项卡效果实现代码
May 19 Javascript
详解vue mixins和extends的巧妙用法
Dec 20 Javascript
利用vue-i18n实现多语言切换效果的方法
Jun 19 Javascript
javascript实现时钟动画
Dec 03 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程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
js常用函数 不错
2006/09/08 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
Python中字符串的常见操作技巧总结
2016/07/28 Python
python实现外卖信息管理系统
2018/01/11 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
解析python实现Lasso回归
2019/09/11 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python交互模式基础知识点学习
2020/06/18 Python
办公室助理岗位职责
2013/12/25 职场文书
数学国培研修感言
2014/02/13 职场文书
校庆接待方案
2014/03/18 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
环卫工作汇报材料
2014/10/28 职场文书
刑事上诉状范文
2015/05/22 职场文书
黑白记忆观后感
2015/06/18 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
python flappy bird小游戏分步实现流程
2022/02/15 Python