精华内容
下载资源
问答
  • 公司增加了个微信扫码登录,费劲千辛万苦终于把应用申请下来了,但遇到了个头疼的事情:微信授权回调只能写个,且不支持通配。这下可好了,总不能把每个需要微信登录的二级域名都申请个应用吧?而且个开放...

    背景

    公司增加了个微信扫码登录,费劲千辛万苦终于把应用申请下来了,但遇到了一个头疼的事情:微信授权回调域只能写一个,且不支持通配。这下可好了,总不能把每个需要微信登录的二级域名都申请一个应用吧?而且一个开放平台账号最多申请十个。

    使用html重定向

    这种方法网上一大堆,大体思想是,微信授权回调域写一个域名,然后将一个html页面放到这个域名下,微信扫码登录时填写的redirect_url就是到这个html,然后在这个html的js代码中,根据某一个参数去判断当前路由应该重定向到哪个地址。

    html重定向做法

    假如我们有多个地址需要做微信扫码登录,比如我们的研发环境,测试环境,生产环境都需要做微信扫码登陆,但又不想给研发测试环境做外网的端口映射,那么可以使用这种方式。
    首先在开放平台的授权回调域中写一个公共授权域名,比如oauth.loooswc.cn
    在这里插入图片描述
    然后将get-wechat-code.html页面放到该域名下,比如oauth.loooswc.cn/oauth/wechat/get-wechat-code.html
    最后在调用微信获取code请求时,redirect_url就写oauth.loooswc.cn/oauth/wechat/get-wechat-code.html?env={env}&request=/oauth/wechat/login_callback.do,通过js代码根据参数env去判断应该重定向到哪个地址,比如env=dev时,则重定向到http://localhost:4200/oauth/wechat/login_callback.do
    但是这种办法有种缺点,就是会将研发测试环境的地址暴漏出去,而且这个地址对生产环境是没有任何意义的,虽然别人拿到这个内网地址也访问不通,但总归是不好的,所以我们可以使用下面这种方法,通过后台请求重定向。
    附带get-wechat-code.html代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>微信登陆</title>
    </head>
    <body>
    <script>
        function getUrlParams(key) {
            var args = {};
            var pairs = location.search.substring(1).split('&');
            for (var i = 0; i < pairs.length; i++) {
                var pos = pairs[i].indexOf('=');
                if (pos === -1) {
                    continue;
                }
                args[pairs[i].substring(0, pos)] = decodeURIComponent(pairs[i].substring(pos + 1));
            }
            return args[key];
        }
        function getRealRedirectUrl(env){
            var realRedirectUrl = 'https://admin.loooswc.cn/';
            if('dev' == env){
                realRedirectUrl = 'http://localhost:8080/';
            }else if('test' == env){
                realRedirectUrl = 'http://192.168.1.10:30080/';
            }else if('pre-prod' == env){
                realRedirectUrl = 'http://192.168.1.20:30080/';
            }
    
            return realRedirectUrl;
        }
        function appendParams(params, url) {
            var baseWithSearch = url.split('#')[0];
            var hash = url.split('#')[1];
            for (var i = 0; i < params.length; i++) {
                if (params[i].value !== undefined) {
                    var newParam = params[i].key + "=" + params[i].value;
                    if (baseWithSearch.indexOf('?') > 0) {
                        var oldParamReg = new RegExp(params[i].key + '=[-\\w]{0,40}', 'g');
                        if (oldParamReg.test(baseWithSearch)) {
                            baseWithSearch = baseWithSearch.replace(oldParamReg, newParam);
                        } else {
                            baseWithSearch += "&" + newParam;
                        }
                    } else {
                        baseWithSearch += "?" + newParam;
                    }
                }
            }
            if (hash) {
                url = baseWithSearch + '#' + hash;
            } else {
                url = baseWithSearch;
            }
            return url;
        }
        var code = getUrlParams('code');
        var appId = getUrlParams('appid');
        var scope = getUrlParams('scope') || 'snsapi_base';
        var state = getUrlParams('state');
        var env = getUrlParams('env');
        var request = getUrlParams('request');
        var redirectUrl;
        if (!code) {
            redirectUrl = appendParams([{
                key: 'appid',
                value: appId
        }, {
                key: 'redirect_uri',
                value: encodeURIComponent(location.href)
            }, {
                key: 'response_type',
                value: 'code'
            }, {
                key: 'scope',
                value: scope
            }, {
                key: 'state',
                value: state
            }], 'https://open.weixin.qq.com/connect/oauth2/authorize#wechat_redirect');
                } else {
            redirectUrl = appendParams([{key: 'code', value: code},{
                key: 'state',
                value: state
            }], getRealRedirectUrl(env) + request);
        }
       location.href = redirectUrl;
       // window.close();
    </script>
    </body>
    </html>
    
    

    通过后台请求重定向

    大体流程是,在某一个部署了后台服务的代码中,增加一个Controller接口,该接口通过参数中的env和request,将请求重定向到{env}+{request}接口中,同时附带上自定义和微信回调携带的code和state参数,从而达到转发请求的作用。

    后台请求重定向做法

    在后台程序中,增加一个Controller接口

    @Controller
    @RequestMapping("/oauth/wechat")
    public class OauthWechatController {
    	private static final Logger log = LoggerFactory.getLogger(OauthWechatController.class);
    
    	@Autowired
    	private OauthWechatConfiguration oauthWechatConfiguration;
    
    	@RequestMapping(value= "/redirect" , method = RequestMethod.GET)
    	@ResponseBody
    	public void  redirect(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		String requestUrl = request.getParameter("request");
    		String code = request.getParameter("code");
    		String state = request.getParameter("state");
    		String env = request.getParameter("env");
    		String platform = request.getParameter("platform");
    		log.info("wechat授权跳转参数,env:"+env+",requestUrl:"+requestUrl+",code:"+code+",state:"+state);
    		String redirectUrl = oauthWechatConfiguration.getRedirectProdUrl();
    		if("dev".equals(env)){
    			redirectUrl = oauthWechatConfiguration.getRedirectDevUrl();
    		}else if("test".equals(env)){
    			redirectUrl = oauthWechatConfiguration.getRedirectTestUrl();
    		}else if("pre-prod".equals(env)){
    			redirectUrl = oauthWechatConfiguration.getRedirectPreProdUrl();
    		}
    		String url = redirectUrl+requestUrl+"?platform="+platform+"&code="+code+"&state="+state;
    		log.info("wechat授权跳转地址为:"+ url);
    		response.sendRedirect(url);
    	}
    
    @Configuration
    @ConfigurationProperties(prefix = "oauth.wechat")
    public class OauthWechatConfiguration {
    	private String redirectDevUrl;
    	private String redirectTestUrl;
    	private String redirectPreProdUrl;
    	private String redirectProdUrl;
    	private String appId;
    	private String appSecret;
    	private String env;
    	
    	//setter and getter...
    }
    

    application.yml

    oauth:
        wechat:
          redirectDevUrl: http://localhost:4201
          redirectTestUrl: http://192.168.1.10:30080
          redirectPreProdUrl: http://192.168.1.20:30080
          redirectProdUrl: https://admin.loooswc.cn
          appId: xxxxxxxxxx
          appSecret: xxxxxxxxxx
          env: dev # dev研发 test测试 pre-prod准生产 prod生产
    

    微信授权回调域填写admin.loooswc.cn
    在这里插入图片描述
    调用请求时redirect_url填写https://admin.loooswc.cn/oauth/wechat/redirect.do?env=dev&request=/oauth/wechat/login.do,当然是通过urlEncode处理过的。

    这样就可以实现一个授权回调域对多个域名有效的效果了

    展开全文
  • :领域与领域模型  俗话说,人人心中有个Hamlet,人人心中也都有个领域模型的定义。  常见的有:  说法1:我理解的领域是对业务工作进行归类划分,归类的方式是业务工作具有相关的知识,这些所...
    一:领域与领域模型
      俗话说,人人心中有一个Hamlet,人人心中也都有一个领域模型的定义。
       常见的有:
       说法1:我理解的领域是对业务工作进行归类划分,归类的方式是业务工作具有相关的知识,这些所需要的知识构成一个领域,这些知识是业务工作的背景,通过对领域的分析,可以帮助我们挖掘、分析、理解业务工作的本质。 也就是说,领域是为需求分析工作服务的,它的目的是挖掘、分析、理解业务工作的本质。
       说法2:领域模型就是对领域内的概念类和现实世界中对象的可视化表示。
       说法3:企业应用架构模式中明确提出了三种领域逻辑组织模式:事务脚本、领域模型和表模块。领域模型同时将行为和数据作为领域逻辑的核心。
       从上面可以3种说法,可以看到不同上下文不同的观点,甚至未必是同一个表达对象。企业应用架构模式中的领域模型是设计到实现层的一个概念,而说法1,说法2种的领域是业务层面及分析阶段的一个概念。 因此,本文特指[领域模式]为业务视角的模型,引用定义如下:
    • 领域: 是相对于系统而言的,是系统要解决的现实问题。
    • 领域模型是对领域内的概念类或现实世界中对象的可视化表示(百度)
    • 领域模型是针对某个特定问题的所有相关方面的抽象模型(Wikipedia)

    思考,如何对上图的元素建模?
     
    二:领域建模的好处
    领域建模的好处,有哪些?
    2.1:不同角色统一语言、统一认知

    如上图所示,客户需求历经演变之后已经面目全非,每一个加工制造环节都以为在[正确的做事]。君不见这样的生动局面一再上演:
    产品经理宣讲prd,产品经理需要分别把名词翻译给业务方和开发人员,一则业务语言,一则技术语言。
    几个架构师在小黑屋吵了半天,为了争论一个名词定义。
    比如什么是支付?百度百科的解释:社会经济活动所引起的货币债权转移的过程。包括:交易、清算、结算。
    那么对于下列情况是否属于支付范畴就是可以根据其内涵来比照了。
    • 用户A转账给B。
    • 用户通过某某网站还信用卡。
    • 用户在天猫购买了一个东西,使用花呗付款。
    由此可见,显性的统一语言很重要,让干系人明白讨论的是一件事情。
    2.2:对业务本质描述,抓到主旨
    比如在支付宝渊源的发展过程中,我们先后使用有红包、实时优惠、商户优惠券等产品。这是烟囱式架构发展下的产物。
     
    行业其它类似券的东东,如下图所示:

    这3个产物我们锊一下:
    • 对于商户或者机构而言,这些是否可称之产品,可以面向商户售卖包括收费。
    • 对于用户而言,是否需要理解这3个东西不同的?这些认知对于营销,对于交易促成,对于品牌的好处是什么?
    • 对于支付宝平台而言,他们的管理模式有何区别?
    • 对于技术团队而言,他们是否可以抽象?
     
    后来,我们在产品上形成了如下定义:
     
    券定义:
    是一种票据,作为券发行方和拥有方之间凭证,具有一定的价值和法律效应
    相关干系方:
    券的发放方[提供权益]
    券的拥有方[享受权益]
    劵的发放工具[是券发行方向拥有方发放券凭证的工具]
    券形式:
    以介质分类:纸质券,电子券
    以使用方式分类:入场券,礼品券,提货券,代金券、红包,打折卡,满减卡等
    可以把券作为基础产品,在业务形态上可以包装为打折卡,满减卡等用户感知的[产品]或者是[营销工具]。

    三:领域模型=ER?
    领域模型是否就是ER模型呢?答案是否定的,领域模型是特定业务域业务实体关系的自然浮现,而ER是设计阶段数据库实现关系的产物。
    如下图所示,自然人Person在特定业务领域有2类,一类是客户(Customer),一类是雇员(Employee).

    但究其实现而言,数据库设计有多种形态。
     


    四:领域建模=DDD?
    一说领域建模就提及DDD, 是大家的自然反应。因为DDD(2004年著名建模专家Eric Evans发表了他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software)的知名度颇高。我的观点是领域模型的产生是分析阶段的产品,分析是对需求及需求背后相关内容的挖掘,不用创造内容。DDD顾名思义是模型驱动设计,是从需求打通到设计阶段的方法。
     
    阿白精辟的提炼出域模型的几个主要概念:
    域(domain)
    子域(subdomain): 
    语境(context):是一个特定人群在讨论的问题域是所形成的上下文。 这里要强调一个概念, 特定人群不是以团队或者是项目为边界划分的人群, 而是以知识为边界来划分的人群。 也就是说上下文不是普遍存在的, 而是存在于一个人群内部的,并且这些上下文大多是以隐形知识(Tacit Knowledge)的方式而存在的。  什么是隐形知识呢, 就是还没有被总结整理归纳沉淀的知识。 举例来说说AliExpress商品团队会有一个独立详情页和商铺详情页的概念, 这两个概念的准确定义和他们的商业目标的定义目前还没有显现化。 但是几乎团队内的每个人都能分别出这两个概念和他们所关联的问题。 这就是一个语境(Context)。
    特定语境(Bounded context):是把上下文限定到某个特定的边界之内。 这个边界是由某个特定人群和他们所讨论的问题子域来决定的。 举例来从电子商务,到商品, 到商品发布, 到规则,到商品审核规则是从大到小的问题域,他们对应的特定语境就是越来越细分并且越来越准确的上下文, 而对应的人群也是越来越小并且越来越专业。  最常见的bounded Context就是某个国际标准组织, 他们会为自己的标准定义专业的名词, 语法, 和表达方式。 而一个大的标准,比如说Health Level 7 (HL7), 总共有数千的会员。 这些人又组成了更小的标准委员会。标准委员会内又有更小的讨论组。 这就形成的从大到小的分级。而另外一个医疗标准, DICOM,又形成了另外一个bounded context。
    语境映射(Context Mapping):不同的语境之间会有交互, 那么从一个语境到另一个语境的翻译过程就是语境映射。 比如说刚才提到的HL7是一个医疗标准。 而DICOM是一个医疗图像标准。 每个语境有一套完整准确的定义。 那么当某个场景需要我们在两个语境之间做交互的时候, 我们就需要Context Mapping 了。 举个例子来说,一个普通咳嗽的病人可能会被医生推荐去做胸透, 那么信息就需要从一个只能理解HL7(医疗语境)的系统交换到DICOM(医疗图像语境)的系统。 那么在HL7系统中的模型就需要无损的映射到DICOM系统中去。 这就是个映射的例子。     
    域语言(Ubiquitous  Language): 
    实体(Entity)
    触发事件(Domain Event): 
    数值对象(Value Object):   
    实体类型(Entity Type)
    关系(Relationship)
    场景(Scenario)
    核心场景(Core Scenario)
    不照搬相应解释了,大家可以根据link过去看原文。我对这部分内容有一些浅见补充:
    • 不建议在分析阶段区别Entity和Value Object。比如Customer和Adress的关系和区别一样,在后续精细化过程中,认识自然就清楚了,比如Adress是可以复用的,非唯一的。
    • 在域模型中可以增加业务规则作为补充。比如下图在送货单和订单项的关系上有一行约束说明:只有当所有订单项都已经送到,才能成功关闭订单。
    我们来看看 DDD的内容那些是领域建模(分析阶段应该识别的)。
     
    如上图所示,在分析阶段可以用的至多有entity、value object。
    再次论证了DDD是一个重在Design的工具。
    基于上面域,域语言,不难理解不同域同一名词的含义不同,即使是同一介质它的内涵和外延也不同,我们可以把域表述为问题域。
    比如电子商务网站有优惠券,包括天猫购物券、店铺券、商品优惠券等。
    还有一个专门做券导航的网站:券妈妈
    他们管理的都是券,但是业务实体[券]是有差异的,因为它们要解决的问题域不同。券妈妈是一个流量入口,关注领用和跳转;而淘宝券关注使用情况,包括对店铺的黏性等。业务实体的业务行为,状态也有有所差异。
    五:问题域vs问题解决域
    最后总结一下,问题域和问题解决域是2个范畴,分属分析、设计及实现阶段,在不同阶段使用的工具和目标也有所差异。
    在分析阶段的领域模型中,我觉得主要描述领域实体及关系,可以辅助领域名词解释(可业务字典形式)、以及约束(业务规则),而业务实体(域实体)仅描述主特征即可。
     
    未完待续。
    展开全文
  • 大家好,我是哥,前几天跟个朋友聊了一些数据中台建设的内容,针对数据仓库中主题如何划分这个话题聊了很多。其实数据仓库建设的理论大家已经都知道了不少,也看过不少书,那么在实际建设数据仓...

    大家好,我是一哥,前几天跟一个朋友聊了一些数据中台建设的内容,针对数据仓库中主题域如何划分这个话题聊了很多。其实数据仓库建设的理论大家已经都知道了不少,也看过不少书,那么在实际建设数据仓库中,我们还是会遇到各种问题。今天我们就一起聊聊主题域如何划分?

    什么是主题

    主题是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。

    简单说,一个主题对应一个分析对象。分析对象就是在决策、分析时重点关注的东西,这个东西其实是非常主观的,在不同的企业,或者企业的不同发展时期,所关注的点会不一样,从而影响有些主题可能存在或者不存在。

    数据仓库是面向主题的应用,主要功能是将数据综合、归类并进行分析利用。数据仓库模型设计除横向的分层外,通常还需要根据业务情况纵向划分主题域。主题域是业务对象高度概括的概念层次归类,目的是便于数据的管理和应用。

    如何划分主题

    划分主题域方法

    在业务调研之后,可以进行主题域的划分。划分主题域,需要分析各个业务模块中有哪些业务活动。通常我们按照以下方法划分主题域,可以按照用户企业的部门划分,也可以按照业务过程或者业务板块中的功能模块划分。

    • 按照系统划分:业务系统有几种,就划分为几类

    • 按业务过程划分:比如业务系统中有商品、交易、物流等

    • 按部门规划:比如公司内的生产、供应链、研发、销售等

    目前有些成熟的行业,比如电信、银行,他们也是最早用数据仓库的行业,已经形成了一些规范,可以直接按照规范来就行了。其中IBM金融数据模型数据存储模型FSDM,是金融行业应用极为广泛的数据模型,可以作为我们构建企业级数据仓库主题域模型划分的重要依据。

    对于新兴的一些行业,或者业内没有形成标准的话,那么就可以参照上面的几类方法,进行分类,先从边界清晰的系统入手进行建设,形成经验后逐步推到各个系统中。

    个人比较推荐通过业务系统来进行一级主题域划分,这样边界就会很明显,数据仓库开发过程中不会因为模型主题的归属“扯皮”,然后根据各个系统中的业务过程划分二级主题域目前我参与过的两个数据仓库建设项目也都是这样搞的。

    主题域的核心

    为保障整个体系的生命力,主题域需要抽象提炼,并长期维护更新,但不轻易变动。划分数据域时,需满足以下两点:

    • 能涵盖当前所有的业务需求。

    • 能在新业务进入时,无影响地被包含进已有的主题域中和扩展新的主题域。

    一次能划分好主题域吗

    首先,主题域是无法一次划分完整的,一般是一次先建立几个明确的主题,在大多数数据仓库的设计过程中都有一个主题域的选择过程。业务是一直发展的,因此设计之初不要想着一次把所有主题全部划分完整。我们可以遵循上面说的划分主题域的两个要点,后续采用迭代的方式补充。

    总结

    数据仓库建设是一套方法论,但并不是一个“定理”,可能不会有完全符合你实际公司业务的“公式”,我们需要学习这些方法论,然后结合自己公司实际的业务场景来实现,只要能有序的把数据管控起来,同时又能高效的帮助数据分析,实现业务价值就好了,不必一味的追求“行业标准”。

    欢迎加入 数据分析|数仓技术交流群

    进群方式:请加微信(微信号:dataclub_bigdata),回复:数据,通过审核会拉你进群。

    (备注:行业-职位-城市)

    历史好文推荐

    1. 浅谈程序员的“内卷化”

    2. 干货笔记,数据仓库工具箱

    3. 传统数仓如何转型大数据

    4. 浅谈数据仓库质量管理规范

    5. 从0到1搭建自助分析平台

    福利时刻

    01. 后台回复「数据」,即可领取大数据经典资料。

    02. 后台回复「转型」,即可传统数据仓库转型大数据必学资料。

    03. 后台回复「加群」,或添加一哥微信IDdataclub_bigdata  拉您入群(大数据|数仓|分析)或领取资料。

    Q: 关于大数据,你还想了解什么?

    欢迎大家扫描下方二维码订阅「数据社」内容并推荐给更多数据方向的朋友,希望有更多机会和大家交流。

      

    关注不迷路~ 各种福利、资源定期分享

    你也「在看」吗?????

    展开全文
  • java面试题(二)(J2EE相关知识)2009-07-09 18:12.介绍J2EE,J2SE,J2ME的区别。  Java 2平台有3个版本:  适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、  适用于...
    java面试题(二)(J2EE相关知识)2009-07-09 18:12一.介绍J2EE,J2SE,J2ME的区别。
    
         Java 2平台有3个版本:
             适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、
             适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、
             适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。


    二.J2EE是一种技术还是一种平台,他提供了哪些技术。
           J2EE是一种平台,由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述
    1. JDBC(Java Database Connectivity):
    JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。 
    2. JNDI(Java Name and Directory Interface):
    JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。 
    3. EJB(Enterprise JavaBean):
    J2EE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实
    施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范 定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意 的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。 
    4. RMI(Remote Method Invoke):
    正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。 
    5. Java IDL/CORBA:
    在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的
    应用和旧的系统相集成。 
    6. JSP(Java Server Pages):
    JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。 
    7. Java Servlet:
    Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应 用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而 servlets全部由Java写成并且生成HTML。 
    8. XML(Extensible Markup Language):
    XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。
    XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。 
    9. JMS(Java Message Service):
    MS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持 发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的 订阅者支持。JMS还提供了另
    一种方式来对您的应用与旧的后台系统相集成。 
    10. JTA(Java Transaction Architecture):
    JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。 
    11. JTS(Java Transaction Service):
    JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。 
    12. JavaMail:
    JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。
    13.JAF(JavaBeans Activation Framework):
    JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。 


    三.什么是Application Server,它有什么功能和优点。
             Application Server是应用服务器,是提供服务的运行在服务器上的程序,他们通过调用来完成一些服务。功能和优点:代码复用、一个共同的命名空间(Namespace )、不受点数限制:统一管理和维护。


    四.简单介绍连接池的优点和原理。
           优点:
           减少连接创建时间 
      虽然与其它数据库相比 GBase 提供了较为快速连接功能,但是创建新的 JDBC 连接仍会招致网络和 JDBC 驱动的开销。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。
      简化的编程模式 
      当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作,允许用户直接使用JDBC编程技术。
      受控的资源使用 
      如果用户不使用连接池,而是每当线程需要时创建一个新的连接,那么用户的应用程序的资源使用会产生非常大的浪费并由可能会导致高负载下的异常发生。
    五.Web.xml的作用。
      web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。下面列出web.xml常用的标签元素及这些标签元素的功能:
    1、指定欢迎页面,例如:
    <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>index1.jsp</welcome-file>
    </welcome-file-list>


      2、命名与定制URL。我们可以为Servlet和JSP文件命名并定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前。下面拿serlet来举例:
    (1)、为Servlet命名:
    <servlet>
            <servlet-name>servlet1</servlet-name>
            <servlet-class>net.test.TestServlet</servlet-class>
    </servlet>


       (2)、为Servlet定制URL、
    <servlet-mapping>
            <servlet-name>servlet1</servlet-name>
            <url-pattern>*.do</url-pattern>
    </servlet-mapping>




    3、定制初始化参数:可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。下面哪servlet来举例:
    <servlet>
            <servlet-name>servlet1</servlet-name>
            <servlet-class>net.test.TestServlet</servlet-class>
            <init-param>
                 <param-name>userName</param-name>
                 <param-value>Tommy</param-value>
            </init-param>
            <init-param>
                 <param-name>E-mail</param-name>
                 <param-value>Tommy@163.com</param-value>
            </init-param>
    </servlet>
    经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值。


    4、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。
    <error-page>
        <error-code>404</error-code>
        <location>/error404.jsp</location>
    </error-page>
    -----------------------------
    <error-page>
        <exception-type>java.lang.Exception<exception-type>
        <location>/exception.jsp<location>
    </error-page>


    5、设置过滤器:比如设置一个编码过滤器,过滤所有资源
    <filter>
        <filter-name>XXXCharaSetFilter</filter-name>
        <filter-class>net.test.CharSetFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XXXCharaSetFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    6、设置监听器:
    <listener>
    <listener-class>net.test.XXXLisenet</listener-class>
    </listener>


    7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时:
    <session-config>
    <session-timeout>60</session-timeout>
    </session-config>
     

    展开全文
  • 中国移动级业务支撑系统是整个中国移动的集中管理和一点对外的门户,包括网状、BBOSS、级营销、内容计费、级客服、VGOP、电渠等多个业务支撑系统,各系统呈烟囱化建设。在小型机时代由于主机集成度高、性能...
  • 、 广域、局域网和城域网 广域(WAN,Wide Area Network)也称远程(long haul network )。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个城市或国家,或横跨几个洲并能提供远...
  • 如何设计个开放平台openapi?

    千次阅读 2019-08-30 22:08:14
    从05年开始随着web2.0技术的快速发展,硅谷掀起了开放平台openapi的股热潮,google开放了map api,还有很多互联网公司也推出了开放平台,但是真正引起人们注意的是twitter开放了社交api,堆基于twitter开放平台...
  • 渗透总结

    万次阅读 多人点赞 2018-12-19 08:07:14
    学习并做了段时间网络渗透,给我直观的感受就是思路问题和耐心,这个不像技术研究,需要对个点进行研究,而是遇到问题后要从多个方面思考,寻找"捷径"思路,只要思路正确,有足够有耐心,总会有所...
  • 据微信开放平台“开发资源”中网站...据开发者资质认证处介绍:开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力。 所以在微信第三方授权登陆获取用户信息...
  • 昨天刚审核通过的网站应用,授权回调是已经填好域名的了,但业务需要更改了域名,我就去修改了,然后提示“操作成功”,返回后授权回调显示为空,之后我怎么填写都是显示为空,域名都备案过的,填回之前注册应用...
  • 智能一代云平台(十):Jboss远程访问流程总结

    万次阅读 热门讨论 2017-02-05 18:47:18
    最近在做个EJB相关的项目,在做的过程用到了远程调用的相关东西,自己进行一下梳理和总结,在此与大家分享。 【相关流程】 、对EJB和Jboss两者梳理: 1、小感:大多数情况下,提到两者中的者,就会提起另...
  • WebLogic11g-创建(Domain)   最近看到经常有人提问weblogic相关问题,所以闲暇之际写几篇博文(基于weblogic11),仅供大家参考。...Domain简单定义为:是个逻辑管理单元,Domain下面包含着we
  • AD、Windows AD管理功能大全

    万次阅读 多人点赞 2018-07-30 13:33:03
    功能、AD管理 1、AD管理 通过批量创建和编辑用户帐户,指派管理权限等,简化Windows AD的管理。 2、批量管理用户 使用CSV文件批量导入用户、编辑用户属性、重置密码、批量迁移用户和用户对象。 3、批量...
  • 计算机网络总结-本书个晚上个奇迹

    千次阅读 多人点赞 2021-01-06 19:53:37
    域网一般来说是在个城市,这种网络的连接距离可以达到10-100公里;这种网络也称为远程,所覆盖的范围比MAN更广,它一般是在 不同城市之间的LAN或者MAN网络互联,地理范围可从几百公里到几千公里。 B.个人区域...
  • find_first_zore_bit-个位图的实现

    千次阅读 2013-01-12 21:41:53
    如果希望在多个地方在内分配个全局唯一的ID(或者IP地址),该怎么办呢?最简单的方式我觉得就是使用位图。Linux内核对位图的支持很强,因此一年前的我直接将kernel里面的代码copy到了OpenVPN,直到我...
  • C++初级主题--名字空间和类

    千次阅读 2017-02-05 18:10:12
    它相当于个更加灵活的文件(全局域),可以用花括号把文件的部分括起来,并以关键字namespace开头给它起个名字:namespace ns1{ float a,b,c; fun1(){……} … }花括号括起来的部分称声明块。声明块中...
  • PaaS平台下多租户的RBAC权限管理 本篇文章为第章,介绍公司、体系结构、组织机构、角色、用户、、帐号、帐号关联、应用、资源、权限对象等基本概念。
  • 今天咱们第课,来讲讲大家一直很关注的...对于中台每个人可能有不同的理解,行业里也没有严格的定义,但我更认同其中个说法就是:中台是企业级能力复用的平台。 那这句话怎么理解呢? 既然核心是能力复...
  • 1  :概览 是Oracle Weblogic Server的基本管理...始终包含个配置为管理服务器的Oracle WebLogic Server实例 中可以包括一些称为受管服务器的Oracle Weblogic Server实例(可选) 还
  • 怎样成为个优秀的架构师?

    万次阅读 多人点赞 2019-10-08 17:15:37
    架构师是个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。 架构师不是个人,他需要建立高效卓越的体系,带领团队去攻城略地,在...
  • 功能、AD管理 https://www.manageengine.cn/products/ad-manager/ 1、AD管理 通过批量创建和编辑用户帐户,指派管理权限等,简化Windows AD的管理。 2、批量管理用户 使用CSV文件批量导入用户、编辑用户...
  • 在计算机产业发展的70年时间里,每次的 IT 革命,无不带来:更低廉的价格、更完善的功能、更便捷的使用、更广阔的市场! 大数据经过10年发展,现在已经到了个重要的分水岭阶段:通用性和兼容性能力成为大数据...
  • “公流量”与“私流量”

    千次阅读 2019-08-17 18:24:34
    “公流量”与“私流量”...公流量指商家直接入驻平台实现流量转换,比如大家熟悉的拼多多、京东、淘宝、饿了么等,以及内容付费行业的喜马拉雅、知乎、得到等公流量平台。 它们共同的特性是:平台自带流量,...
  • https://blog.csdn.net/mj813/article/details/52451355,对原文进行整理 问:软件测试的原则? ... 问:你在测试中发现了个 bug ,但是开发经理认为这不是个 bug ,你应该怎样解决。 1、将问题提交到缺陷...
  • AD和LDAP协议

    千次阅读 2020-06-23 15:09:07
    AD和LDAP协议 1、LDAP ...LDAP是种开放Internet标准,LDAP协议是跨平台的Interent协议 LDAP标准实际上是在X.500标准基础上产生的个简化版本,它是基于X.500标准的, 与X.500不同,LDAP支持TCP/IP
  • 运维经典面试题之网络篇(

    千次阅读 多人点赞 2018-11-17 16:44:40
    1、写出12.23.34.0/29的掩码 11111111.11111111.11111111.11111000 255.255.255.248 ...这些站点就构成个冲突。交换机可以隔离冲突。 广播:基于osi中的第二层数据链路层 就是说如果站点...
  • 该篇文章为转载,是对原作者系列文章的总汇加上标注。...或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作个好的和professional的程序员,makefil...
  • 在去中心化计算的应用中,有个激动人心的应用,在过去的一年里引起了相当大的兴趣,那就是受激励的去中心化在线文件存储系统的概念。目前,如果你想你的文件或者数据安全地在云端备份,你有3种选择:(1). 上传它们...
  • AD功能介绍全解

    万次阅读 2018-07-30 14:27:53
    功能、AD管理 1、AD管理 通过批量创建和编辑用户帐户,指派管理权限等,简化Windows AD的管理。 2、批量管理用户 使用CSV文件批量导入用户、编辑用户属性、重置密码、批量迁移用户和用户对象。 3、批量...
  • Java实现AD登录认证

    万次阅读 多人点赞 2016-08-04 09:05:02
    web项目中有时候客户要求我们使用ad进行身份确认,不再另外做一套用户管理系统。其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统。 这就是第三方验证。一般有AD,Ldap,Radius,邮件服务器等。最常用的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 208,167
精华内容 83,266
关键字:

一域一网一平台