.NET与JSP页面之间消息通讯(跨域,使用html5的postMessage实现)

简介: 最近.NET项目上使用JAVA项目中的jsp页面,使用到跨域的信息交互。jsp端代码,通过监听来自.

最近.NET项目上使用JAVA项目中的jsp页面,使用到跨域的信息交互。

jsp端代码,通过监听来自.NET项目所在IP地址,来请求.NET一般处理程序,实现jsp交互信息保存到.NET中:

window.addEventListener('message', function(event){
        // 通过origin属性判断消息来源地址      
        if (event.origin == 'http://192.168.11.195') {
            if(event.data=='1'){
            	var xmlStr = getXmlStr();
            	  var sysId1= '1111222';
            	    var userId1 = '22211112';
            	    var menus1 = xmlStr;
            	    var callback1='?';
            	    var url = 'http://192.168.11.195/BPMS/WebService/MessageExchange.ashx';     
            	   $.ajax({
            	     url:url,    
            	     data: {sysId:sysId1,userId:userId1,menus:menus1,callback:callback1},
            	     dataType:'jsonp',
            	     type:'post',
            	      processData: true,
            	     success:function(data){
            	       alert(data);
            	     },
            	     error:function(XMLHttpRequest, textStatus, errorThrown) {
            	       alert(XMLHttpRequest.status);
            	       alert(XMLHttpRequest.readyState);
            	        }
            	     });
            } 
        }
    }, false);


.NET页面代码,主要是通过向jsp端页面发送带标记请求信息:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Role_InfoOuter.aspx.cs" Inherits="AT.Web.ATBase.SysUser.Role_InfoOuter" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="../../Themes/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btn").click(function () {
                test();
            });


            function test() {
                var ifr = document.getElementById('iframe');
                var targetOrigin = 'http://192.168.11.10:8080';
                ifr.contentWindow.postMessage('1', targetOrigin);
            };


        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <iframe id="iframe" src="http://192.168.11.10:8080/ATMxgraphBS/grapheditor/Atgraphright.jsp"></iframe>
            <input type="button" value="保存" id="btn" />
        </div>
    </form>
</body>
</html>


MessageExchange.ashx代码如下:


using AT.DataBase.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;


namespace AT.Web.WebService
{
    /// <summary>
    /// MessageExchange 的摘要说明
    /// </summary>
    public class MessageExchange : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string callback = (context.Request["callback"] ?? "").ToString();
            string sysId = (context.Request["sysId"] ?? "").ToString();
            string userId = (context.Request["userId"] ?? "").ToString();
            string menu = (context.Request["menus"] ?? "").ToString();
            string msg = SaveMessage(sysId, userId, menu);
            context.Response.Write(msg);
            context.Response.End();
        }

        /// <summary>
        /// 保存业务逻辑
        /// </summary>
        /// <param name="sysId"></param>
        /// <param name="userId"></param>
        public string SaveMessage(string sysId, string userId, string menu)
        {
            SqlServerHelper db = new SqlServerHelper("Server=192.168.11.201;Database=AT_UnifiedAuthorityDB;Uid=sa;Pwd=apesm;");
            StringBuilder sb = new StringBuilder();
            sb.Append("insert into Test(T1,T2,T3) values('" + sysId + "','" + userId + "','" + menu + "')");
            int cnt = db.ExecuteBySql(sb);
            if (cnt > 0)
            {
                return "OK";
            }
            else
            {
                return "NO";
            }
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}




相关文章
|
Java 数据安全/隐私保护
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
该博客文章通过JavaBean组件和JSP动作元素`<jsp:forward>`与`<jsp:param>`的使用示例,演示了用户登录流程,包括登录信息的提交、验证以及根据验证结果进行的页面跳转。
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
222 5
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
421 7
|
网络协议 C#
3款.NET开源、功能强大的通讯调试工具,效率提升利器!
3款.NET开源、功能强大的通讯调试工具,效率提升利器!
242 10
|
网络协议 C#
基于.NET WinForm开发的一款硬件及协议通讯工具
基于.NET WinForm开发的一款硬件及协议通讯工具
191 7
|
存储 Java
JSP中实现留言页面的编写并将留言信息展示出来
这篇文章介绍了如何在JSP中编写留言页面,并通过JavaBean类存储用户留言信息,同时展示了留言信息的展示方法。
JSP中实现留言页面的编写并将留言信息展示出来
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
该博客文章讲解了JSP中`<jsp:getProperty>`和`<jsp:setProperty>`动作的使用方法,包括它们的语法格式和如何在页面中使用这些动作来获取和设置JavaBean对象的属性值,并通过图书信息的填写和展示示例进行了演示。
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
前端开发 JavaScript 开发工具
跨域联姻:React.NET——.NET应用与React的完美融合,解锁前后端高效协作新姿势。
【8月更文挑战第28天】探索React.NET,这是将热门前端框架React与强大的.NET后端无缝集成的创新方案。React以其组件化和虚拟DOM技术著称,能构建高性能、可维护的用户界面;.NET则擅长企业级应用开发。React.NET作为桥梁,使.NET应用轻松采用React构建前端,并优化开发流程与性能。通过直接托管React组件,.NET应用简化了部署流程,同时支持服务器端渲染(SSR),提升首屏加载速度与SEO优化。
640 1