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)
【数据库】MySQL事务详解
此木|西贝
数据库 数据库 mysql
事务的隔离级别读未提交(read-uncommitted):最低级的隔离级别,允许其他事务读到未提交的值;读已提交(read-committed):事务只能读取到其他事务提交的数据;可重复读(repeatable-read):对同一条数据多次读取结果都是一样(mysql默认隔离级别);串行化(serializable):最高的隔离级别,所有事务穿行执行,事务间不会产生干扰隔离级别存在的问题读未提交
使用sqlite创建数据库
@云初
sqlite 数据库 database
使用sqlite创建数据库#sqlite3.exe数据库名.dbSQLiteversion3.36.02021-06-1818:36:39Enter".help"forusagehints.sqlite>在sqlite里面创建一张表并添加数据#.databases#.tables#createtableperson(idint,namevarchar(20),addressvarchar(20))
【css酷炫效果】纯CSS实现流动岩浆纹理效果
冰夏之夜影
css 前端
【css酷炫效果】纯CSS实现流动岩浆纹理效果缘创作背景html结构css样式完整代码效果图想直接拿走的老板,链接放在这里:上传后更新缘创作随缘,不定时更新。创作背景刚看到csdn出活动了,赶时间,直接上代码。html结构css样式.lava-texture{position:relative;width:400px;height:300px;overflow:hidden;border-radi
element ui 封装Table组件
沃野_juededa
ui
1.首先npmielement-ui-S安装element-ui2.引入Element在main.js中写入以下内容:importVuefrom'vue';importElementUIfrom'element-ui';import'element-ui/lib/theme-chalk/index.css';importAppfrom'./App.vue';Vue.use(ElementUI);n
Python列表与元组的深度剖析
jijihusong006
程序 python windows 开发语言
Python列表与元组的深度剖析:从底层实现到应用场景的全方位对比一、核心差异概览Python教程https://pan.quark.cn/s/7cefe3163f45传送代资料库https://link3.cc/aa99特性列表(List)元组(Tuple)可变性可变(Mutable)不可变(Immutable)语法表示方括号[]圆括号()内存占用较大(动态数组结构)较小(静态数组结构)哈希支持
vue2 el-table跨分页多选以及多选回显
snows_l
前端开发 element-ui vue2 前端 elementui vue.js
个人博客|snows_l.sBLIOGhttp://snows-l.site一、多选1、特别注意的属性以及方法::row-key="(_)=>_.mac":reserve-selection="true"@select="handleSelectionChange"@select-all="handleSelectionChangeAll"详情以及使用方法位置请查看代码2、代码:1)、templa
pycharm删除invalid interpreter(无效解释器)
JulyJust
pycharm ide python
打开C:\Users\Just\AppData\Roaming\JetBrains\PyCharm2022.1\options\jdk.table.xml文件,删除对应配置,重启pycharm即可
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例3,TableView15_03导出全部数据示例
宝码香车
# DeepSeek javascript 前端 开发语言 vue.js DeepSeek ecmascript
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦目录DeepSeek助力Vue3开发:打造丝滑的表格(Table)之添加导出数据功能示例3,TableView15_03导出全部数据示例前言页面效果组件代码代码测试测试代码正常跑通,附其他基本代码编写路由src\router\index.js编写
基于thinkphp5小区物业管理系统设计与实现(源码+lw+部署文档+讲解等)
阿逸学长
# java毕设精选案例 开发语言 毕设 php java
基于thinkphp5小区物业管理系统设计与实现(源码+lw+部署文档+讲解等)文章目录基于thinkphp5小区物业管理系统设计与实现(源码+lw+部署文档+讲解等)引言项目概述功能介绍系统管理员:社区业主:技术栈功能截图示例代码数据库操作示例源码获取引言博主介绍:✌专注于Java技术领域和学生毕业项目实战,欢迎大家交流✌主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、
表格的属性
花林似霰f
html 前端
表格标签属性实际开发并不使用,仅做了解,实际开发会使用CSS。属性名·属性值描述alignleftcenterrightborder1或""规定表格单元是否有边框,默认为无cellpadding像素值规定单元格与其内容之间的空白,默认1像素cellspacing像素值规定单元格之间的距离width/height像素值或百分比规定表格宽度/高度
react加antd封装表格单、多选组件,支持跨页选择缓存
Cirrod
react.js 缓存 javascript
页面效果子组件importReact,{useState,useEffect,forwardRef,useImperativeHandle}from'react';import{Modal,Input,Table,Pagination,Avatar,Select}from'antd';import{UserOutlined}from'@ant-design/icons';importtype{Ta
【论文精读】PatchTST-基于分块及通道独立机制的Transformer模型
打酱油的葫芦娃
时序预测算法 时序预测 PatchTST Transformer 预训练 微调 表征学习
《ATIMESERIESISWORTH64WORDS:LONG-TERMFORECASTINGWITHTRANSFORMERS》的作者团队来自PrincetonUniversity和IBMResearch,发表在ICLR2023会议上。动机Transformer模型因其自注意力机制在处理序列数据方面的优势,在自然语言处理(NLP)、计算机视觉(CV)、语音等多个领域取得了巨大成功。这种机制使得模型
超越传统!wangEditor编辑器如何实现excel、ppt、pdf及word一键导入?
2501_90699780
编辑器 excel powerpoint umeditor粘贴word ueditor粘贴word ueditor复制word ueditor上传word图片
要求:开源,免费,技术支持编辑器:wangEditor前端:vue2,vue3,vue-cli,html5后端:java,jsp,springboot,asp.net,php,asp,.netcore,.netmvc,.netform群体:学生,个人用户,外包,自由职业者,中小型网站,博客,场景:数字门户,数字中台,站群,内网,外网,信创国产化环境,web截屏行业:医疗,教育,建筑,政府,党政,国
AUTOSAR与arxml的文档解析
dont__cry
c语言 autosar
如下是文档脑图一、文档概述该文档是AUTOSAR经典平台的应用接口用户指南,主要解释**AlTable(应用接口表)**的结构、方法论及相关技术细节,帮助开发者理解如何通过标准化接口实现软件组件的互操作性。关键内容目的:定义并发布稳定、广泛接受的汽车电子系统应用接口,支持跨厂商软件组件的通信。结构:包含元模型表示、兼容性管理、生命周期状态、视图概念及XML生成规则等。二、核心概念与示例1.AUTO
Python中的可变类型和不可变类型
svtvtvt
python 开发语言
在Python中,数据类型可以分为可变类型(mutable)和不可变类型(immutable)。理解这两种类型的区别和特性对于编写高效、易于维护的代码至关重要。在本篇文章中,我们将详细探讨这两类数据类型的定义、行为以及它们之间的差异。目录一、概述二、不可变类型(ImmutableTypes)1.int(整数)2.float(浮点数)3.str(字符串)4.tuple(元组)5.frozenset(
nginx实现反向代理出现502的解决方法
小白写代码hh
nginx 运维
目录1.出现原因1.1.防火墙拦截了端口1.1.1.使用iptables1.1.2.使用firewall-cmd(适用于CentOS/RHEL7+)1.2.docker容器中的ip和宿主机ip不一致1.出现原因这里我是用的docker容器来进行nginx的启动的,在我们用nginx的配置进行反向代理的时候,有时候访问反向代理的url会出现BadGateway也就是坏请求,这里无非就是几种情况:这里
使用OPTIMIZE TABLE优化MySQL表空间
sg_knight
数据库 mysql 数据库 表空间 优化 碎片
在MySQL数据库中,随着数据的不断增删改,表可能会产生碎片,导致表空间利用率下降,查询性能也会受到影响。为了解决这个问题,MySQL提供了OPTIMIZETABLE命令,它可以帮助我们重新组织表的物理存储结构,减少碎片,并可能回收未使用的空间。本文将详细介绍如何使用OPTIMIZETABLE来优化MySQL表空间。一、OPTIMIZETABLE的基本用法OPTIMIZETABLE命令的基本语法如
MySQL 重复数据操作
一只小熊猫呀
# MySQL MySQL 重复数据操作 查询重复数据 删除重复数据
1、查询重复数据SELECTa.*FROMtable_aaINNERJOIN(SELECTid_customerFROMtable_aGROUPBYid_customerHAVINGCOUNT(*)>1)bONa.id_customer=b.id_customer;说明:子查询(子选择b)选择所有id_customer并计算每个id_customer的出现次数。通过HAVINGCOUNT(*)>1
laravel框架查询数据集转为数组
小浮夸
框架 laravel
$website_data=DB::table('fb_website')->where('website_status',1)->get()->map(function($value){return(array)$value;})->toArray();
基于 SSM 架构的 JAVA 网络直播带货查询系统设计与 JSP 实践成果
2401_85702623
架构 java 开发语言
第二章关键技术的研究2.1JSP技术介绍JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了用户的需求。JavaBeans可以对JSP技术的程序进行扩展,从而形成新的应用程序,而且JavaBeans的代码可以重复使用,所以就便于对程序进行维护。JavaBean组件有内部的接口,可以帮
华为IPD集成产品开发
沐风_ZTL
华为
华为的**集成产品开发(IPD)**是一套系统化的产品研发管理体系,旨在通过跨部门协作、市场需求导向和结构化流程,提升产品开发效率与质量。以下是关于华为IPD的核心要点:一、IPD的核心内涵与目标IPD(IntegratedProductDevelopment)是华为从IBM引入并本土化的管理方法,强调以客户需求为中心,整合资源、优化流程,实现从市场机会到商业成功的闭环。其核心目标包括:缩短产品上
超全Java入门学习路线指南
Javaaaaaaaaaaa13
java 开发语言 前端 spring spring boot eclipse tomcat
Java基础入门Java高级阶段数据库和JDBCHtml&JavascriptJsp&ServletStruts2框架讲解Spring框架讲解Hibernate框架讲解流行技术学习1、Java基础入门1、Java入门基础如果你没有任何的编程基础,那么本栏目的内容对你来说是至关重要的。打好基础,以后学习就会一帆风顺了。我们会先讲解了Java程序的开发环境的搭建、编写流程、工作原理等内容,接着学习有关
SpringMVC基本使用
沉下心来学技术
tomcat spring java
SpringMVC是什么?SpringMVC是Spring框架中的一个模块,用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。它分离了应用程序的业务逻辑、用户界面和用户输入,使开发更加模块化和易于维护。核心组件Model:负责封装应用数据,通常与业务逻辑交互。View:负责渲染数据,生成用户界面(如JSP、Thymeleaf)。Controller:处理用户
ARM:使用F103纯汇编点灯
一枝小雨
ARM内核 arm开发 汇编
0上节ARM体系结构解析:PC寄存器机制、三级流水线与C/汇编交互全揭秘-CSDN博客1纯汇编点灯主要是通过汇编代码实现下图逻辑:汇编代码实现:PRESERVE8THUMB;VevtorTableMappedtoAddress0atResetAREARESET,DATA,READONLYEXPORT__Vectors__VectorsDCD0DCDReset_Handler;ResetHandle
【MySQL】表的改,删
熙曦Sakura
MySQL mysql 数据库
CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)6.3Update语法:UPDATEtable_nameSETcolumn=expr[,column=expr...][WHERE...][ORDERBY...][LIMIT...]对查询到的结果进行列值更新6.3.1将孙悟空同学的数学成绩变更为80分--更新值为具体值--查看原数据SELECTna
[ARM+Codesys Customer Case] Application Case of RK3568/A40i/STM32+Codesys in Intelligent Manufacturi
ARM+FPGA+AI工业主板定制专家
stm32 codesys rk3568 A40I
Vegetablesareessentialfoodsinpeople'sdailylives,andtherearevariouswaystoconsumethem.Sinceenteringamoderatelyprosperoussociety,people'spaceoflifehasbecomeincreasinglyfast,andmanytraditionalservicescann
MySQL中的事务隔离级别有哪些
凭君语未可
面试 数据库 mysql 数据库
MySQL中的事务隔离级别一、事务并发问题二、MySQL事务隔离级别1.READUNCOMMITTED(读未提交)2.READCOMMITTED(读已提交)3.REPEATABLEREAD(可重复读)(MySQL默认级别)4.SERIALIZABLE(可串行化)三、MySQL默认事务隔离级别四、不同隔离级别对并发问题的影响五、如何选择合适的隔离级别?总结在MySQL中,事务(Transaction
基于IBM Tivoli TSM系统构建某局备份系统实施方案
jaminwm
项目日志
本实施TSM的关键字解释文件备份:指文件级别的数据备份,基于操作系统的文件系统进行备份。数据库备份:指数据库基本的备份。在数据库处于open状态下,对数据库数据进行备份,并保持备份数据的一致性。离线备份:也叫冷备份或脱机备份,一种备份方法,在离线备份中,正在备份的数据在备份过程中不能被应用程序访问。通常用于普通文件备份。在线备份:也叫热备份或联机备份,一种备份方法,在线备份一般使用即时技术来构造原
Android Bootable Recovery 中的 `imgdiff.cpp` 文件解析
zhangjiaofa
android
AndroidBootableRecovery中的imgdiff.cpp文件解析引言在Android系统中,Recovery模式是一个非常重要的组成部分,它允许用户在设备无法正常启动时进行系统修复、数据恢复、OTA更新等操作。其中,OTA(Over-The-Air)更新是Android系统中常见的更新方式,它通过网络下载更新包并应用到设备上。为了优化更新包的大小,Android提供了一个高效的差分
IBM提出新的企业信息化架构是什么
自由鬼
产品分析对比 行业发展 架构 企业信息化架构
一、传统企业信息化架构特点:模块化架构:以传统的ESB(企业服务总线)作为数据和业务逻辑的集成枢纽。包括ERP、HR、资金管理、MES(制造执行系统)、BPM(业务流程管理)等业务模块。数据控制和分层:数据通过静态数据和实时数据分层进行管理。静态数据包含EPC、布置图等,实时数据主要覆盖生产运营中的动态信息。标准化体系:强调开发、接口、制图、采集等方面的标准化。安全性与基础环境:数据管理较为传统,
怎么样才能成为专业的程序员?
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