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下过滤数组重复值的代码
Sep 10 Javascript
超简单的jquery的AJAX用法
May 10 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
详解JavaScript中Hash Map映射结构的实现
May 21 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
Three.JS实现三维场景
Dec 30 Javascript
开源一个微信小程序仪表盘组件过程解析
Jul 30 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
一个php作的文本留言本的例子(四)
2006/10/09 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
javascript eval函数深入认识
2009/02/21 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
numpy.transpose对三维数组的转置方法
2018/04/17 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
党员服务承诺书
2014/05/28 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
教师求职自荐书
2014/06/14 职场文书
践行三严三实心得体会
2014/10/13 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书