IBM Portal 开发系列讲座:
IBM Websphere Portal 主题与皮肤开发
北京东华合创数码科技公司 郑文平
内容简介:
Portal 的主题与皮肤开发说穿了还是普通 jsp 的开发,只不过大量使用了 ibm 自带的标签库,开发起来显得比较麻烦。但是,如果您深刻洞悉了与主题、皮肤相关的这几个文件之间的调用关系,使用起来就能运用自如了。这里是作者从大量的项目经验中总结出的几点体会,贡献出来,希望与大大家分享。
在这篇文章里我想从以下几个方面来介绍 websphere portal 的主题与皮肤开发:
1、 初级入门:什么是 Portal 的主题与皮肤开发?
2、 中级开发:如何更换 Portal 系统的 logo 图标;
3、 中级进阶:开发个性化的主题;
4、 高级探索:开发自适应分辨率的主题与皮肤;
5、 高手过招:更改 Portal 系统的登录方式;
6、 Portal 的皮肤开发简介。
一、初级入门: Portal 的主题与皮肤开发:
要了解如何开发 portal 的主题,首先要了解 websphere portal 的显示流程。 IBM WebSphere Portal 使用不同的 Java Server Page ( JSP ) 、级联样式表( Cascading Style Sheet , CSS )和图像来显示门户页面。它使用位于 X:/WebSphere/AppServer/installedApps/YourComputerName /wps.ear/wps.war 目录下 themes 、 skins 和 screens 目录中的 JSP 来构造门户页面。这些目录中的每一个都包含 html 、 wml 和 chtml 子目录, WebSphere Portal 将它们用于服务不同客户机,例如桌面浏览器和移动设备。我们这里以通常使用的 html 方式下的主题开发为例,介绍 Portal 的主题开发。
用于显示门户页面的 JSP 流程:本文描述了缺省主题定义的 Default.jsp 、 Head.jsp 、 AdminLinkBarInclude.jsp 、 ToolBarInclude.jsp 、 PlaceBarInclude.jsp 、 PageBarInclude.js 以及延伸出来的 PageBeginInclude.jsp 、 PageEndInclude.jsp 的内容和流程。下面简单介绍这几个 jsp 。注意:这部分内容属于最初级的开发,您要弄懂这些介绍,必须具备一定的 jsp 基础、 css 基础和标签库的基础,最好做过相应的开发。
1 、 Default.jsp :
所有屏幕聚集都从 Default.jsp 开始。用于缺省主题的 Default.jsp 位于 wp_root/app/wps.ear/wps.war/themes/html 。这个 JSP 包含其它用于显示标题、公司徽标、工具栏的 JSP 以及用于往可用位置及页面植入内容的 JSP 。在 Default.jsp 的末尾处, screenRender JSP 标记选择被请求的屏幕(例如 login 或 forgotpassword )。以下介绍的 jsp 是以这样的顺序先后调用的。
2 、 Head.jsp
Head.jsp 生成标题并嵌入指向样式表文件的链接。它还定义了支持 BIDI (双向)文本所需的变量。这个 JSP 的内容将在这里描述。您也可以通过 在这里定死 portal 网站的标题,这比 IBM 公布的以标签的方式写来的容易,也更易使用。如果您开发了多套主题,而且这几套主题的 page title 如果也一样的话(除了虚拟门户,一般是这样子),您可以把这几个文件放到 themes/html 的根目录下,其他主题的 default.jsp 都来调用这个文件就可以了。
3 、 AdminLinkBarInclude.jsp
AdminLinkBarInclude.jsp 主要用来显示了“新建页面”、“编辑页面”、“分配页面许可权”三个标签
4 、 ToolBarInclude.jsp
ToolBarInclude.jsp 显示欢迎消息以及为用户提供的链接工具栏。门户网站上显示什么样的链接工具栏取决于用户上下文。例如,登录的用户看到“我的门户网站”、“管理”(尽管理员可见)、“编辑我的‘概要文件’”、“注销”等之类的链接;而注销的用户看到 “忘记密码”、“登录”、“帮助” 之类的链接。
5 、 PlaceBarInclude.jsp
PlaceBarInclude.jsp 用来显示一级菜单,即“首页”、“文档管理器”、“公司概况”、“业务简介”等,属于最高层的目录,您在任何一个一级菜单上都可以通过“新建页面”来创建二级菜单,你创建的内容将被存储到数据库(原始使用的是 cloundscape ),您也可以把它倒入到 db2 、 oracle 等任何一个 portal 所支持的数据库中,此内容将在我的下一篇文章中详细论述,这里不再一一提及。
6 、 PageBarInclude.jsp
用来显示二级菜单,当您点击一级菜单中的任一标签时,系统会调用该文件,并检索出该菜单的所有子菜单,默认显示在 PlaceBar 的下面。
二、中级开发:如何更换 Portal 系统的 logo 图标;
1 、 Default.jsp 的工作原理:
我们看这个例子, Default.jsp 大致上将 Portal 系统的默认页面划分为这样一个表格:
表 -1 : Default.jsp 总体调用效果
PageBegin: 用来显示页面生成以前的提示文字,例如: Portal 系统正在加载,请稍候 ……
Portal 系统主体部分:用来显示详细的 Portal 页面;
PageEnd.jsp 用来显示页面生成以后的东西。例如公司版权信息等。
表 -2 : Portal 系统正文部分的调用关系:
徽标部分,在 default 中调用
我的门户菜单,在 ToolBar 中调用
个性化菜单,在 AdminLink 中调用
Portal 的 Body 部分,用来显示各个 portlet 以及高层次的三级菜单。
页面的结尾,用来显示公司版权信息等。
2 、换一个 logo :
打开 Default.jsp ,您会开到一个表格,在表格的左上角,有这样一段语句,用来显示默认主题的 Logo 徽标:
width="100%" valign="top" align="<%=bidiAlignLeft%>" nowrap>
上面已经介绍过,整个 Portal 系统的页面由 Default.jsp 分割成一个大的表格,用来显示或者调用不同的 jsp 。我们在这个大表格的最左上角化出一个
,用来显示公司的徽标。这段语句就是在这个单元格内插入一个图片,叫做 Logo.gif 。
明白了吗?您可以将这个文件名改称您想插入的任意一张图片的名字,只要将这张图片放到 .war/images/ 目录下就可以了。这里支持几乎所有的图片格式,您可以任意摆放,大小、位置等都有您说了算。到这里,您可能已经想到了:那么,我养插入一个 Flash 呢?别着急,下面将会提到这点。
3 、用 flash 作 logo :
用 Flash 作徽标是个不错的注意,它可以使您的门户网站看起来更丰富、生动一些。但是, Flash ,也就是 .swf 格式的文件,是不能直接通过这种方式来插入的,因为我们的浏览器并不能识别它。要插入一个动画,必须位置制定相应的驱动。您可以用以下这段代码,为之生成:
border="0" cellpadding="0" cellspacing="0" height="81" valign="middle" align="left">
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="510" height="81">
%>/images/firstpagelogo.swf">
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="510" height="81">
这里在插入了一个名字为 firstpagelogo.swf 的影片做公司徽标,他的大小是 510*81 ,请将这个影片文件放在 .war/images 目录下,重启服务器,看看您的首页上,是不是已经出现了?
三、 中级进阶:开发个性化的 Portal 主题
1 、理解、开发各级菜单;
Default.jsp 调用 PlaceBarInclude.jsp 文件来显示一级菜单,如果一级菜单下面还有二级菜单,那么当您点击该一级菜单是, Default 将调用 PageBarInclude.jsp 来显示二级菜单。当然,您也可以不再调用该文件,那么系统将缺省调用 Portlet 的皮肤里面的 LayerContainer.jsp 文件,用来以三级菜单代替二级菜单,这便是个性化的左侧管理菜单。
打开这两个文件,您会发现里面的内容非常简单。请看下面的清单:
l 首先由这样一个标签:
意思是如果菜单时可用的,那么当您登录进去以后将执行如下操作。使用这句代码,必须引入 Portal 的标签库,具体的过程这里不再赘述。接下来绘制了一个表格,用来显示里面的操作。表格内的内容,下面将作介绍。
l 菜单的左右协调:如果您一共定义了十几个一级菜单,而一栏只能显示 8 个,剩下的菜单怎么办?我们在这里放置了两个三角形的小图标,如果右边还有更多的菜单,小图标会自动出现,当您点击时,就会显示出剩余的菜单。 具体的代码是通用的,这里不再赘述。我们需要强调的是:菜单条在这里支划分为两种情况:一是选中的情况下,一是为选中的情况下,即:
这里用来显示选中该菜单的情况下该菜单条的显示方式。
这里用来显示未选中该菜单的情况下该菜单条的显示方式。
例如:
Background="<%= wpsBaseURL %>/images/title_back01.jpg" height="30">
border="0" src='<%= wpsBaseURL %>/images/b01.jpg' alt="">
<%= com.ibm.wps.model.LocaleHelper.getTitle((com.ibm.portal.Localized)wpsNavNode, com.ibm.wps.engine.RunData.from( pageContext.getRequest()).getLocale())%>
border="0" src='<%= wpsBaseURL %>/images/b01.jpg' alt="">
我们首选添加一张背景图片,然后左侧放一张前缀,中间打印该菜单条的名字,后面又放一张图片做后缀,这样整个菜单条看起来就非常漂亮了。
l 接下来是显示工具栏的情况下:
这里的操作将使具有权限的用户通过点击这张图片,直接编辑相应的 portal 页面。不过据笔者的开发经验,大部分的用户会隐藏掉这个入口,以免引起管理上的混乱,具体的开发内容将在以后的文章中提及,智利将不再详细介绍。
l 最后的代码用来显示系统收藏夹:
当您登录后,会发现在一级菜单的最右边多出一个“我的最爱”的东西,这是 portal 系统自带的收藏夹,您可以通过这个入口将自己喜欢的页面添加到您的收藏夹,然后您就可以通过点击这里直接进入到你收藏的页面了。
2 、开发个性化工具栏
要获得个性化的工具栏,您可以修改 ToolBarInclude.jsp 这个文件。这个文件提供了 Portal 管理员进到管理界面的入口。
在这里你可以编辑自己的“概要文件”,就个人的用户信息,修改自己的姓名、密码等。更深一层的话,您可以在这里显示欢迎信息,例如张三同志登录后,会打印出:“欢迎您,张三同志!”的语句。要实现这个功能实际上非常简单,请看:
当然,您需要引入相应的标签库,具体的应用属于普通的 jsp 开发,您可以参照平常的开发经验去实现。
3 、开发个性化的管理标签
所谓的个性化指的是,您可以删掉管理标签的一个或者多个,也可以根据喜好添加自己需要的标签。这需要您来修改 AdminLinkBarInclude.jsp 文件。例如:
valign="middle" align="<%=bidiAlignRight%>" nowrap>
这段代码用来显示“新建页面”的管理标签,通过电机这个标签,您可以为当前页面创建一个子页面。同理,您可以个性化“编辑页面”和“分配页面权限”,当然,您也可以之间隐藏掉这个入口。
四、 高级探索:开发自适应分辨率的主题与皮肤
1 、开发 1024 下的主题
刚安装完 Portal 系统后,刚才介绍的几个 jsp 会在默认的 .war/theme 目录下,您可以新建一个文件夹,将这几个 jsp 文件拷贝至该目录下,然后在管理界面下添加该主题。该主题默认下就是 1024 的。您可以开发多套主题,注意:请充分利用一些公共的资源,例如这些主题可能使用的是同样的版权信息,这样,您可以将 PageEnd.jsp 页面放到 themes/entention 下,然后让所有的主题调用这个文件。
当然,为了保险起见,您可以在 Default.jsp 最外层的表格中这样写死:
2 、开发 800 分辨率下的主题
开发 800 下的主题说穿了非常简单,您可以会出这么一个表格:
将 Default.jsp 中最外层的 table 里面所有的内容拷贝到这里!
将这个表格覆盖到原来 Default.jsp 文件中最外层的表格就可以了。注意:在 default.jsp 中调用的各个文件中,可能都有表格存在,如果这些表格中有的宽度超过了 800 ,或者两个并列一行的表格宽度超过了 800 ,请适当调小。
3 、开发 1024 和 800 下自适应得主题
要开发自适应的主题就更简单了!请设定一个变量 w, 先写一个 JavaScript ,用来读取客户端的浏览器分辨率,如果是 800 的,则给给变量赋值 w=800 ,反之如果是 1024 的,就给赋值为 w=1024 。剩下的事,不用我说了吧!
五、高手过招:更改 Portal 系统的登录方式;
1、从首页上登录
您需要用 wsad 开发一个 portlet ,并在 jsp 中写一个代理,将用户凭证提交给系统自带的认证 action 中。这个 portlet 可以这样来设计:
//如果没有登陆的情况下,提醒用户输入它的用户名与密码:
用户按下“登录“后,将用户名和密码提交到系统自带的 action 中:
//在这里将用户名和密码付给系统自带的登录框。
//如果已经登陆了,可以显示用户的常用信息,比如,读取用户的 Lotus 邮箱,然后显示他哟年级封邮件等:
甚至,您可以利用 url-mapping 自定义几个页面,从首页上直接进入到您的业务系统(如上)。
这样的话,您甚至可以封死 portal 页面右上角自带的“登录”标签,也许您会问我又想用系统自带的页面呢?没关系,您也可以在浏览器中输入: http://machinename:9081/wps/myportal ,当然,干脆您直接输入一个错误的用户名和密码,系统自然后带您会带系统自带的页面了。
2、拒绝从系统自带的登录界面
但是在上面这种情况下,可能会出现这种情况:当用户名或者密码错误的时候,系统会返回到系统自带的登录框上面,为避免这种情况,您可以封死这个开关。这个非常简单,我在这里顺便一提:
系统自带的登录页面是 .war/screen/html 下的 login.jsp 文件,您可以删掉该文件里的所有内容,然后加入这么一句:
alert("用户名或者密码输入有误,请重新输入! ");
window.location='http://xxjsb-scdd2.portal.com:9081/wps/portal';
呵呵,是不是带您又回到了首页呢?是的,确实如您所想,这样就封死了系统自带的登录页面。如果您的用户名和者密码错误,或者您通过 myportal 直接调用,都不起作用了吧!系统会带您回到首页的登录界面,请重新输入!
3、遗留问题:
在实际开发中,您也许会发现还有其他一些意想不到的问题,是的,这个地方确实有许多值得注意的地方,也许只有您亲自来试过了,才知道其中的玄机。我也希望在开发中大家相互交流,把发现的好地方贡献出来,大家一起分享。好吧,祝您成功!
六、 Portal 的皮肤开发简介
1 、该改 portlet 的标题背景图片
非常简单,请找到 .war/skin/html 下,发现系统已经呆了好几套皮肤,打开其中任意一个文件夹,您都能发现这个文件:
Control.jsp 。这里面也是一个 table 。该 table 有两行:第一行用来显示 portlet 的标题,后面是最大化、最小化、编辑按钮;第二行是 portlet 的 body ,用来显示 portlet 的内容。要换掉 portlet 标题的背景图片其实非常简单:在第一个
里面加上这么一句代码:
一切 OK !
2 、隐藏掉“最大化”、“最小化”、“还原”等图标。
这段代码是用来显示“最小化”按钮,不用说,直接去掉就行了!同理,您可以对此做任何编辑。
3 、高级:加入个性化的左侧管理菜单
在 skin 目录下看到这个文件了吗? LayeredContainer.jsp 不错,就是它,它是一个表格:
该表格左侧就是三级菜单(您如果再 Default.jsp 中部调用 PageBar 的话,这就是二级菜单了)。右边呢,则是整个 Portal 系统得 Body 部分,显示了所有的 portlet 。不晓得 IBM 为什么要这样安排,似乎有点不合理。不过,趋势是在这里修改的,可能是把它看作一个容器了吧!在左侧的表格部分,您可以向编辑普通的网页一样,只要您稍微有些美工知识,就可以随心所欲的制作出个性化的管理菜单了。
4 、高级:与 CSS 结合,开发出漂亮的效果。
看上面的效果,是不是非常飘亮?其实这很简单,看LayeredContainer.jsp 这个文件,下面是他的表格,稍微加一些 CSS ,就能实现这种效果了。如:
width="100%" >。
当然,这需要素质比较高的美工配合,也需要工程师在长期的开发中仔细琢磨。再次祝您在 Portal 开发中信手拈来、出神入化!
参考资料:
1 、 Sukumar Konduru 顾问软件工程师 达拉斯, IBM Developer Technical Support Center 先生的论文:了解 WebSphere 门户网站如何显示门户页面 — 第 I 部分:描述 Default.jsp 、 Head.jsp 和 ToolBarInclude.jsp
2、 IBM 系列红皮书。
致谢:
作者在开发及写作中得到了 赵建业 先生的大力帮助, IBM 公司李 女士、 王 女士, 曹 先生、 丁 先生、 陈 先生、 胡 先生的大力帮助,在此一并鸣谢。
作者简介:郑文平,北京东华合创数码科技公司软件工程师, Portal 信息化专员,长期从事 Portal (尤其是 IBM Websphere Portal )开发,曾参与并引领了北京驰普企业门户、山东新汶矿务局远程调度系统、中国石化齐鲁公司综合数据平台、北京供电局等多个 Portal 项目的开发。
您可以通过 [email protected] 或者 [email protected] 与作者取得联系。作者的 msn 是: [email protected] 。
你可能感兴趣的:(websphere,ibm,portlet,jsp,border,table)
UI学习——cell的复用和自定义cell
Magnetic_h
ui 学习
目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添
消息中间件有哪些常见类型
xmh-sxh-1314
java
消息中间件根据其设计理念和用途,可以大致分为以下几种常见类型:点对点消息队列(Point-to-PointMessagingQueues):在这种模型中,消息被发送到特定的队列中,消费者从队列中取出并处理消息。队列中的消息只能被一个消费者消费,消费后即被删除。常见的实现包括IBM的MQSeries、RabbitMQ的部分使用场景等。适用于任务分发、负载均衡等场景。发布/订阅消息模型(Pub/Sub
SQL Server_查询某一数据库中的所有表的内容
qq_42772833
SQL Server 数据库 sqlserver
1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM
数组去重
好奇的猫猫猫
整理自js中基础数据结构数组去重问题思考?如何去除数组中重复的项例如数组:[1,3,4,3,5]我们在做去重的时候,一开始想到的肯定是,逐个比较,外面一层循环,内层后一个与前一个一比较,如果是久不将当前这一项放进新的数组,挨个比较完之后返回一个新的去过重复的数组不好的实践方式上述方法效率极低,代码量还多,思考?有没有更好的方法这时候不禁一想当然有了!!!hashtable啊,通过对象的hash办法
【PG】常见数据库、表属性设置
江无羡
数据库
PG的常见属性配置方法数据库复制、备份相关表的复制标识单表操作批量表操作链接数据库复制、备份相关表的复制标识单表操作通过ALTER语句单独更改一张表的复制标识。ALTERTABLE[tablename]REPLICAIDENTITYFULL;批量表操作通过代码块的方式,对某个schema中的所有表一起更新其复制标识。SELECTtablename,CASErelreplidentWHEN'd'TH
IBM反垄断史:一个什么都卖的兼并指挥家
竞争者的垄断梦
真事/故事/反垄断的故事/大公司垄断的故事曲创(原创)欢迎关注竞争者的垄断梦感谢已经看到这里的各位,因为间隔时间有点长,可能各位有点迷失。大家千万别误会,我们这一季的男一号既不是Hollerith,也不是Powers。到目前为止他俩的戏份真是不少,但只是因为必不可少,没有他俩发明的制表机,也就没有IBM;没有他俩相爱相杀的暧昧关系,也就没有后来数十年里IBM和反垄断的苦恋悲情。这是一个漫长的悲伤故
esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
z755924843
ESP32开发快速入门 服务器 网络 运维
MQTT介绍简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联
vue3中el-table中点击图片放大时,被表格覆盖
叫我小鹏呀
vue.js javascript 前端
问题:vue3中el-table中点击图片放大时,被表格覆盖。解决方法:el-image添加preview-teleported
vue项目element-ui的table表格单元格合并
酋长哈哈
vue.js elementui javascript 前端
一、合并效果二全部代码exportdefault{name:'CellMerge',data(){return{tableData:[{id:'1',name:'王小虎',amount1:'165',amount2:'3.2',amount3:10},{id:'1',name:'王小虎',amount1:'162',amount2:'4.43',amount3:12},{id:'1',name:'
Vue中table合并单元格用法
weixin_30613343
javascript ViewUI
地名结果人名性别{{item.name}}已完成未完成{{item.groups[0].name}}{{item.groups[0].sex}}{{item.groups[son].name}}{{item.groups[son].sex}}exportdefault{data(){return{list:[{name:'地名1',result:'1',groups:[{name:'张三',sex
2023最详细的Python安装教程(Windows版本)
程序员林哥
Python python windows 开发语言
python安装是学习pyhon第一步,很多刚入门小白不清楚如何安装python,今天我来带大家完成python安装与配置,跟着我一步步来,很简单,你肯定能完成。第一部分:python安装(一)准备工作1、下载和安装python(认准官方网站)当然你不想去下载的话也可以分享给你,还有入门学习教程,点击下方卡片跳转进群领取(二)开始安装对于Windows操作系统,可以下载“executableins
C++八股
Petrichorzncu
八股总结 c++ 开发语言
这里写目录标题C++内存管理C++的构造函数,复制构造函数,和析构函数深复制与浅复制:构造函数和析构函数哪个能写成虚函数,为什么?C++数据结构内存排列结构体和类占用的内存:==虚函数和虚表的原理==虚函数虚表(Vtable)虚函数和虚表的实现细节==内存泄漏==指针的工作原理函数的传值和传址new和delete与malloc和freeC++内存区域划分C++11新特性C++常见新特性==智能指针
Table列表复现框实现【勾选-搜索-再勾选】
~四时春~
java 开发语言 elementui vue
Table列表复现框实现【勾选-搜索-再勾选】概要整体架构流程代码实现技术细节注意参考文献概要最近在开发时遇到一个问题,在进行表单渲染时,正常选中没有问题,单如果需要搜索选中时,一个是已选中的不会回填,二是在搜索的结果中进行选中,没有实现,经过排查,查找资料后实现。例如:整体架构流程具体的实现效果如下:代码实现{{scope.row.userName}}已选区{{userItem.userName
vue+el-table 可输入表格使用上下键进行input框切换
以对_
vue学习记录 vue.js javascript 前端
使用上下键进行完工数量这一列的切换-->//键盘触发事件show(ev,index){letnewIndex;letinputAll=document.querySelectorAll('.table_inputinput');//向上=38if(ev.keyCode==38){if(index==0){//如果是第一行,回到最后一个newIndex=inputAll.length-1}elsei
vue + Element UI table动态合并单元格
我家媳妇儿萌哒哒
element UI vue.js 前端 javascript
一、功能需求1、根据名称相同的合并工作阶段和主要任务合并这两列,但主要任务内容一样,但要考虑主要任务一样,但工作阶段不一样的情况。(枞向合并)2、落实情况里的定量内容和定性内容值一样则合并。(横向合并)二、功能实现exportdefault{data(){return{tableData:[{name:'a',address:'1',age:'1',six:'2'},{name:'a',addre
【RabbitMQ 项目】服务端:数据管理模块之绑定管理
月夜星辉雪
rabbitmq 分布式
文章目录一.编写思路二.代码实践一.编写思路定义绑定信息类交换机名称队列名称绑定关键字:交换机的路由交换算法中会用到没有是否持久化的标志,因为绑定是否持久化取决于交换机和队列是否持久化,只有它们都持久化时绑定才需要持久化。绑定就好像一根绳子,两端连接着交换机和队列,当一方不存在,它就没有存在的必要了定义绑定持久化类构造函数:如果数据库文件不存在则创建,打开数据库,创建binding_table插入
【Java】已解决:java.util.concurrent.CompletionException
屿小夏
java 开发语言
文章目录一、分析问题背景出现问题的场景代码片段二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项已解决:java.util.concurrent.CompletionException一、分析问题背景在Java并发编程中,java.util.concurrent.CompletionException是一种常见的运行时异常,通常在使用CompletableFuture进行异步计算时出现
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
†徐先森®
Oracle数据库 Web相关 错误集
createtablestudents(idintunsignedprimarykeyauto_increment,namevarchar(50)notnull,ageintunsigned,highdecimal(3,2),genderenum('男','女','中性','保密','妖')default'保密',cls_idintunsigned);在对数据库插入如上带有中文带有默认值的字段的时
Vicky的ScalersTalk第六轮新概念朗读持续力训练Day73 20210411
Vicky_b9de
练习材料:ModerncavemenPart-3ˈmɒdənˈkeɪvmənpɑːt-3Theyplungedintothelake,andafterloadingtheirgearonaninflatablerubberdinghy,letthecurrentcarrythemtotheotherside.Toprotectthemselvesfromtheicywater,theyhadtow
el-table实现全选整表,单元一页复选框功能
周bro
vue.js elementui javascript 前端
全选整表单选一页0":popper-append-to-body="false":total="tableData.length":page-size="pageObj.pagesize":page-sizes="[10,50,100]"layout="total,sizes,prev,pager,next"@size-change="handleSizeChange"@current-chang
python画图|同时输出二维和三维图
西猫雷婶
python 开发语言
前面已经学习了如何输出二维图和三维图,部分文章详见下述链接:python画图|极坐标下的3Dsurface-CSDN博客python画图|垂线标记系列_如何用pyplot画垂直x轴的线-CSDN博客有时候也需要同时输出二位和三维图,因此有必要学习一下。【1】官网教程首先我们打开官网教程,链接如下。https://matplotlib.org/stable/gallery/mplot3d/mixed
iOS下拉放大效果
RobinZhao
好多下拉放大的实现方式是在tableView上面添加一个view,同时更改tableView.contentInset,下拉时改变view的frame来实现。今天用另外一种方式实现,效果如下:加油.gif具体实现方法:通过tableViewCell结合xib来实现,具体代码如下HomeViewController.m代码#import"HomeViewController.h"#import"He
css2中的透明
琪33
.out{width:400px;height:400px;background-color:blue;margin:100pxauto;border:1pxsolid#000;opacity:0.6;}.in{width:200px;height:200px;background-color:red;margin:100pxauto;}
二十四、k8s 资源管理
繁华依在
k8s kubernetes 容器 云原生
目录一、资源配置范围管理LimitRange介绍1、LimitRange可以做什么:2、资源限制和请求的约束3、创建LimitsRange对象4、示例:创建一个pod5、测试用例测试1:测试2:测试3:二、资源服务质量管理(RequestsQos)1、Qos级别分类:1.1、Guaranteed:1.2、BestEffort:1.3、Burstable:2、Qos的工作特点3、示例三、资源配额管理
六、全局锁和表锁:给表加个字段怎么有这么多阻碍
nieniemin
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。6.1全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于
MySQL锁
沉着冷静2024
MySQL mysql 数据库
MySQL锁文章目录MySQL锁MySQL中锁的分类创建索引时会锁表吗线上修改表结构会加什么锁Innodb存储引擎的行级锁有哪些Update语句中,不带where条件,加什么锁?MySQL实现乐观锁MySQL死锁MySQL死锁是怎么发生的?检查死锁如何避免死锁MySQL中锁的分类全局锁:主要用于全库逻辑备份表级锁:表锁、元数据锁、意向锁表锁:通过locktables语句对表进行加锁,它不仅限制其他
HTML中"bgcolor"与"background-color"的区别
Sardar_
html
bgcolor只是标签属性,而backgroud更多作为css的样式属性。它们俩大多数情况下效果完全相同。但在标签下效果不同。不支持bgcolor属性,只能用style标签添加CSS样式。作为table的属性而言:HelloWorld!和HelloWorld!效果完全相同。作为body属性而言:效果完全相同。不过个人推荐统一用CSS样式进行控制,把style统一放到.css文件中。backgrou
一串奇特的代码
hi武林高手
一个空的div元素,所有浏览器的渲染结果都不一样。body{display:table-cell;vertical-align:middle;//垂直居中}div{margin:atuo;height:100px;width:100px;outline:inset100pxgreen;//设置4个边框的样式outline-offset:-125px;//对轮廓进行偏移}html{display:t
Presto【基础 01】简介+架构+数据源+数据模型
2401_84254343
程序员 架构
一个Catalog包含Schema和Connector。例如,配置JMX的Catalog,通过JXMConnector访问JXM信息。当执行一条SQL语句时,可以同时运行在多个Catalog。Presto处理table时,是通过表的完全限定(fully-qualified)名来找到Catalog。例如,一个表的权限定名是hive.test_data.test,则test是表名,test_data是
数据库常见笔试面试题及其解析
yxsr_zxx
数据库 数据库 SqlServer Oracle 笔试 面试
数据库基础(面试常见题)一、数据库基础1.数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式2.SQL语言包括数据定义、数据操纵(DataManipulation),数据控制(DataControl)数据定义:CreateTable,AlterTable,DropTable,Craete/DropIndex等数据操纵:Select,insert,update,delete,数据控制:g
怎么样才能成为专业的程序员?
cocos2d-x小菜
编程 PHP
如何要想成为一名专业的程序员?仅仅会写代码是不够的。从团队合作去解决问题到版本控制,你还得具备其他关键技能的工具包。当我们询问相关的专业开发人员,那些必备的关键技能都是什么的时候,下面是我们了解到的情况。
关于如何学习代码,各种声音很多,然后很多人就被误导为成为专业开发人员懂得一门编程语言就够了?!呵呵,就像其他工作一样,光会一个技能那是远远不够的。如果你想要成为
java web开发 高并发处理
BreakingBad
java Web 并发 开发 处理 高
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(
mysql批量更新
ekian
mysql
mysql更新优化:
一版的更新的话都是采用update set的方式,但是如果需要批量更新的话,只能for循环的执行更新。或者采用executeBatch的方式,执行更新。无论哪种方式,性能都不见得多好。
三千多条的更新,需要3分多钟。
查询了批量更新的优化,有说replace into的方式,即:
replace into tableName(id,status) values
微软BI(3)
18289753290
微软BI SSIS
1)
Q:该列违反了完整性约束错误;已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80004005 说明:“不能将值 NULL 插入列 'FZCHID',表 'JRB_EnterpriseCredit.dbo.QYFZCH';列不允许有 Null 值。INSERT 失败。”。
A:一般这类问题的存在是
Java中的List
g21121
java
List是一个有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
与 set 不同,列表通常允许重复
读书笔记
永夜-极光
读书笔记
1. K是一家加工厂,需要采购原材料,有A,B,C,D 4家供应商,其中A给出的价格最低,性价比最高,那么假如你是这家企业的采购经理,你会如何决策?
传统决策: A:100%订单 B,C,D:0%
&nbs
centos 安装 Codeblocks
随便小屋
codeblocks
1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum install gcc-c++
2.安装gtk2-devel,因为默认已经安装了正式产品需要的支持库,但是没有安装开发所需要的文档.yum install gtk2*
3. 安装wxGTK
yum search w
23种设计模式的形象比喻
aijuans
设计模式
1、ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:
开发管理 CheckLists
aoyouzi
开发管理 CheckLists
开发管理 CheckLists(23) -使项目组度过完整的生命周期
开发管理 CheckLists(22) -组织项目资源
开发管理 CheckLists(21) -控制项目的范围开发管理 CheckLists(20) -项目利益相关者责任开发管理 CheckLists(19) -选择合适的团队成员开发管理 CheckLists(18) -敏捷开发 Scrum Master 工作开发管理 C
js实现切换
百合不是茶
JavaScript 栏目切换
js主要功能之一就是实现页面的特效,窗体的切换可以减少页面的大小,被门户网站大量应用思路:
1,先将要显示的设置为display:bisible 否则设为none
2,设置栏目的id ,js获取栏目的id,如果id为Null就设置为显示
3,判断js获取的id名字;再设置是否显示
代码实现:
html代码:
<di
周鸿祎在360新员工入职培训上的讲话
bijian1013
感悟 项目管理 人生 职场
这篇文章也是最近偶尔看到的,考虑到原博客发布者可能将其删除等原因,也更方便个人查找,特将原文拷贝再发布的。“学东西是为自己的,不要整天以混的姿态来跟公司博弈,就算是混,我觉得你要是能在混的时间里,收获一些别的有利于人生发展的东西,也是不错的,看你怎么把握了”,看了之后,对这句话记忆犹新。 &
前端Web开发的页面效果
Bill_chen
html Web Microsoft
1.IE6下png图片的透明显示:
<img src="图片地址" border="0" style="Filter.Alpha(Opacity)=数值(100),style=数值(3)"/>
或在<head></head>间加一段JS代码让透明png图片正常显示。
2.<li>标
【JVM五】老年代垃圾回收:并发标记清理GC(CMS GC)
bit1129
垃圾回收
CMS概述
并发标记清理垃圾回收(Concurrent Mark and Sweep GC)算法的主要目标是在GC过程中,减少暂停用户线程的次数以及在不得不暂停用户线程的请夸功能,尽可能短的暂停用户线程的时间。这对于交互式应用,比如web应用来说,是非常重要的。
CMS垃圾回收针对新生代和老年代采用不同的策略。相比同吞吐量垃圾回收,它要复杂的多。吞吐量垃圾回收在执
Struts2技术总结
白糖_
struts2
必备jar文件
早在struts2.0.*的时候,struts2的必备jar包需要如下几个:
commons-logging-*.jar Apache旗下commons项目的log日志包
freemarker-*.jar  
Jquery easyui layout应用注意事项
bozch
jquery 浏览器 easyui layout
在jquery easyui中提供了easyui-layout布局,他的布局比较局限,类似java中GUI的border布局。下面对其使用注意事项作简要介绍:
如果在现有的工程中前台界面均应用了jquery easyui,那么在布局的时候最好应用jquery eaysui的layout布局,否则在表单页面(编辑、查看、添加等等)在不同的浏览器会出
java-拷贝特殊链表:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
bylijinnan
java
public class CopySpecialLinkedList {
/**
* 题目:有一个特殊的链表,其中每个节点不但有指向下一个节点的指针pNext,还有一个指向链表中任意节点的指针pRand,如何拷贝这个特殊链表?
拷贝pNext指针非常容易,所以题目的难点是如何拷贝pRand指针。
假设原来链表为A1 -> A2 ->... -> An,新拷贝
color
Chen.H
JavaScript html css
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD>&nbs
[信息与战争]移动通讯与网络
comsci
网络
两个坚持:手机的电池必须可以取下来
光纤不能够入户,只能够到楼宇
建议大家找这本书看看:<&
oracle flashback query(闪回查询)
daizj
oracle flashback query flashback table
在Oracle 10g中,Flash back家族分为以下成员:
Flashback Database
Flashback Drop
Flashback Table
Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query)
下面介绍一下Flashback Drop 和Flas
zeus持久层DAO单元测试
deng520159
单元测试
zeus代码测试正紧张进行中,但由于工作比较忙,但速度比较慢.现在已经完成读写分离单元测试了,现在把几种情况单元测试的例子发出来,希望有人能进出意见,让它走下去.
本文是zeus的dao单元测试:
1.单元测试直接上代码
package com.dengliang.zeus.webdemo.test;
import org.junit.Test;
import o
C语言学习三printf函数和scanf函数学习
dcj3sjt126com
c printf scanf language
printf函数
/*
2013年3月10日20:42:32
地点:北京潘家园
功能:
目的:
测试%x %X %#x %#X的用法
*/
# include <stdio.h>
int main(void)
{
printf("哈哈!\n"); // \n表示换行
int i = 10;
printf
那你为什么小时候不好好读书?
dcj3sjt126com
life
dady, 我今天捡到了十块钱, 不过我还给那个人了
good girl! 那个人有没有和你讲thank you啊
没有啦....他拉我的耳朵我才把钱还给他的, 他哪里会和我讲thank you
爸爸, 如果地上有一张5块一张10块你拿哪一张呢....
当然是拿十块的咯...
爸爸你很笨的, 你不会两张都拿
爸爸为什么上个月那个人来跟你讨钱, 你告诉他没
iptables开放端口
Fanyucai
linux iptables 端口
1,找到配置文件
vi /etc/sysconfig/iptables
2,添加端口开放,增加一行,开放18081端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 18081 -j ACCEPT
3,保存
ESC
:wq!
4,重启服务
service iptables
Ehcache(05)——缓存的查询
234390216
排序 ehcache 统计 query
缓存的查询
目录
1. 使Cache可查询
1.1 基于Xml配置
1.2 基于代码的配置
2 指定可搜索的属性
2.1 可查询属性类型
2.2 &
通过hashset找到数组中重复的元素
jackyrong
hashset
如何在hashset中快速找到重复的元素呢?方法很多,下面是其中一个办法:
int[] array = {1,1,2,3,4,5,6,7,8,8};
Set<Integer> set = new HashSet<Integer>();
for(int i = 0
使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
lanrikey
history
后退时关闭当前页面
<script type="text/javascript">
jQuery(document).ready(function ($) {
if (window.history && window.history.pushState) {
应用程序的通信成本
netkiller.github.com
虚拟机 应用服务器 陈景峰 netkiller neo
应用程序的通信成本
什么是通信
一个程序中两个以上功能相互传递信号或数据叫做通信。
什么是成本
这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。
都有哪些通信方式
全局变量
线程间通信
共享内存
共享文件
管道
Socket
硬件(串口,USB) 等等
全局变量
全局变量是成本最低通信方法,通过设置
一维数组与二维数组的声明与定义
恋洁e生
二维数组 一维数组 定义 声明 初始化
/** * */ package test20111005; /** * @author FlyingFire * @date:2011-11-18 上午04:33:36 * @author :代码整理 * @introduce :一维数组与二维数组的初始化 *summary: */ public c
Spring Mybatis独立事务配置
toknowme
mybatis
在项目中有很多地方会使用到独立事务,下面以获取主键为例
(1)修改配置文件spring-mybatis.xml <!-- 开启事务支持 --> <tx:annotation-driven transaction-manager="transactionManager" /> &n
更新Anadroid SDK Tooks之后,Eclipse提示No update were found
xp9802
eclipse
使用Android SDK Manager 更新了Anadroid SDK Tooks 之后,
打开eclipse提示 This Android SDK requires Android Developer Toolkit version 23.0.0 or above, 点击Check for Updates
检测一会后提示 No update were found