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 相关文章推荐
jQuery之折叠面板的深入解析
Jun 19 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
Apr 07 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
jQuery 弹出层插件(推荐)
May 24 Javascript
对js eval()函数的一些见解
Aug 15 Javascript
node.js实现博客小爬虫的实例代码
Oct 08 Javascript
jQuery监听文件上传实现进度条效果的方法
Oct 16 Javascript
JS百度地图搜索悬浮窗功能
Jan 12 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
Vue2 配置 Axios api 接口调用文件的方法
Nov 13 Javascript
JavaScript原型链详解
Nov 07 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 观察者模式的实现代码
2013/05/10 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
2015/11/23 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
django的ORM模型的实现原理
2019/03/04 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python二元表达式用法
2019/12/04 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
艺术设计专业个人求职信
2013/09/21 职场文书
公司财务工作总结的自我评价
2013/11/23 职场文书
竞选部长演讲稿
2014/04/26 职场文书
教师工作失职检讨书
2014/09/18 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
谢师宴学生致辞
2015/07/27 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Pytest之测试命名规则的使用
2021/04/16 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python