摘要: 服务端配置
cas是个好东西,很灵活很好用,但是配置起来很麻烦,网上资料比较零碎。不弄个三五天根本不知道其中的原理,终于在多天的奋斗中配置成功,现在将配置的一些过程记录下来供大家参考。
cas官方网站
http://www.jasig.org/cas
下载最新的服务端 CAS Server 3.3.3 Final
解压后将modules下面的cas-server-webapp-3.3...
阅读全文
posted @
2009-10-20 18:21 流腥鱼 阅读(20425) |
评论 (13) |
编辑 收藏
eclipse 中使用 svn 插件,原本正常,未作任何更改,突然有一天, eclipse 中查看文件时,文件后面的 版本号 、 文件的状态图标 等等都不见了。
检查插件都在,更新,提交等操作都能正常使用,唯独看不到状态了。
经过一番查找,找到问题解决办法。
打开 : windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项即可。
同时,还可以打开 windows ->preferences->Team -> SVN 中做相关设置。
posted @
2009-05-21 12:19 流腥鱼 阅读(1461) |
评论 (3) |
编辑 收藏
之前看到很多人一直都问这个问题,不过当时我没当一回事,因为在 CSS 中要垂直居中,多数是在有高度的情况下,或者容器高度不定的情况下才用,看上去比较舒服,而且实现的方法也不少,不一定要拘泥于和 table 布局一样。不过最近有人问了几个例子,看来对此的需求还不少。现在就把我经验拿出来分享一下,希望大家鼓鼓掌。
首先,要有一个概念:凡是 table 布局可以实现的,CSS 一定可以实现。CSS 可以实现的,table 未必能做到。
现在来几个例子:
一、单行内容的居中
只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 height,并使两值相等,再加上 over-flow: hidden 就可以了
.middle-demo-1{
height: 4em;
line-height: 4em;
overflow: hidden;
}
优点:
1. 同时支持块级和内联极元素
2. 支持所有浏览器
缺点:
1. 只能显示一行
2. IE中不支持<img>等的居中
要注意的是:
1. 使用相对高度定义你的 height 和 line-height
2. 不想毁了你的布局的话,overflow: hidden 一定要
为什么?
请比较以下两个例子:
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
上一个高度是用的绝对单位px,并且没有隐藏溢出,下一个高度用的单位是相对单位em,并且隐藏了溢出。如果你的浏览器支持放大字体,那么尽情地放大字体,看看会出现什么效果。
二、多行内容居中,且容器高度可变
也很简单,给出一致的 padding-bottom 和 padding-top 就行
.middle-demo-2{
padding-top: 24px;
padding-bottom: 24px;
}
优点:
1. 同时支持块级和内联极元素
2. 支持非文本内容
3. 支持所有浏览器
缺点:
容器不能固定高度
三、把容器当作表格单元
CSS 提供一系列diplay属性值,包括 display: table, display: table-row, display: table-cell 等,能把元素当作表格单元来显示。这是再加上 vertical-align: middle, 就和表格中的 valign="middle" 一样了。
.middle-demo-3{
display: table-cell;
height: 300px;
vertical-align: middle;
}
可惜IE不支持这些属性,不过在其他浏览器上显示效果非常完美。
要注意的是:和一个合法的<td>元素必须在<table>里一样,display: table-cell 元素必须作为 display: table 的元素的子孙出现。
优点:
不用说了吧,就是表格,效果和表格一模一样
缺点:
IE下无效
四、以毒攻毒!用 IE 的 bug 解决 IE 中的绝对居中
先不得不说一句,IE 真的是个很烂的浏览器,CSS1中的定义都不支持,害得要我们转个大圈子来造居中。不过就像我说的,凡是 table 布局可以实现的,CSS 一定可以实现,即使在 IE 里也不例外。我研究 IE layout 模式多年,还是找出了一个可以在 IE 中绝对居中的方法。这个方法就是基于 IE layout 的 bug,也可以算以毒攻毒。至于原理,不要问我,这是独门秘学,何况三言两语也讲不清楚,只要好用就行
.middle-demo-4{
height: 300px;
position: relative;
}
.middle-demo-4 div{
position: absolute;
top: 50%;
left: 0;
}
.middle-demo-4 div div{
position: relative;
top: -50%;
left: 0;
}
五、整合三和四,写出支持所有浏览器的垂直居中容器!
思路是利用 IE 和 非IE 浏览器的 CSS hack, 整合三和四的CSS,写出兼容主流浏览器的垂直居中容器。具体代码就不给出了,大家权当作练习练习。例子可以在下面的附录中找到。
最终实测支持的浏览器:IE6+, Mozilla 1.7, Netscape Navigator 8, Opera 8.0+, Firefox 1.0+ 和 Safari 1.0+IE5 下需要加上对合适模型的补正。
推测支持的浏览器:Mozilla 1.5+, Netscape Navigator 7+, Opera 7+
未测试浏览器:Konqueror
最后附上自己写的,所有居中布局的范例网页,大家不明白可以参考。
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
posted @
2009-04-17 19:59 流腥鱼 阅读(451) |
评论 (0) |
编辑 收藏
现阶段我们在开发报表的时候,是使用jdbc链接数据库的,为提高报表的运行效率和稳定性,使用连接池进行管理。比较简便和低耦合的解决办法,使用jndi连接池。
jdbc和jndi的区别
JDBC -最基本的连接数据库的方式, 每次对数据库打交道的时候 ,连接数据库是需要实例下你实现连接数据库的方法或者类。
JNDI DataSource 英文全称是:Java Naming and Directory Interface java 命明接口,当服务启动时 事先把连接数据库的已经连好多条,具体多少条你可以设置,存放在tomcat容器里,用的时候可以直接使用, 不用再实例化得到连接, 相对与jdbc效率要快点
在eclipse设计报表的时候,我们使用jdbc链接数据库做测试,当到了tomcat运行环境中切换到jndi连接池,这是比较方便的开发方法。
实现步骤:
1.tomcat配置jndi连接池
在 {tomcat目录}\webapps\{项目名}\META-INF 中新增context.xml文件,配置代码如下
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
auth="Container"
name="jdbc/travel_agency"
type="javax.sql.DataSource"
maxIdle="5"
maxWait="-1"
driverClassName="com.mysql.jdbc.Driver"
username="itravel"
password="709394"
url="jdbc:mysql://192.168.1.100/travel_agency?useUnicode=true&characterEncoding=UTF-8"
maxActive="10"/>
</Context>
2.在web.xml中加入配置
<resource-ref>
<description>Database Source</description>
<res-ref-name>jdbc/travel_agency</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.实例报表中数据源代码
1 <data-sources>
2 <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="数据源" id="227">
3 <property name="odaDriverClass">com.mysql.jdbc.Driver</property>
4 <property name="odaURL">jdbc:mysql://192.168.1.100/travel_agency</property>
5 <property name="odaUser">itravel</property>
6 <encrypted-property name="odaPassword" encryptionID="base64">NzA5Mzk0</encrypted-property>
7 <property name="odaJndiName">java:comp/env/jdbc/travel_agency</property>
8 </oda-data-source>
9 </data-sources>
除了第7行 <property name="odaJndiName">java:comp/env/jdbc/travel_agency</property>,其余是我们的之前的配置。用了第7行的代码,表示该报表支持jndi数据源,birt在运行报表的时候,会先用jndi去连接,如果失败了再用jdbc链接,这样做的好处就是,我们在开发报表的时候,没有放到web环境中,可以使用jdbc,当放到tomcat中,因为有了第7行的配置。默认采用jdni连接。
posted @
2009-03-19 10:46 流腥鱼 阅读(3625) |
评论 (2) |
编辑 收藏
从论坛的一篇文章(http://www.javaeye.com/topic/335078)得知,在BIRT VIEWER SERVLET内部也有认证接口代码,只是简单的返回了true,没有做处理。BIRT VIEWER SERVLET是报表处理的入口,该接口如果返回flase,那么报表将不会显示,目标就是在该接口加入我们自己的逻辑实现,本阶段先实现简单的安全认证,即在没有登录的情况下无法访问报表。
处理步骤:
1.把birt viewer项目和现有项目整合在一起(为了让birt viewer项目能获取到现有项目的session)
2.修改BIRT VIEWER SERVLET类,该类源码在org.eclipse.birt.report.servlet.BirtEngineServlet下面,找到函数经行修改,红色为新增部分
/**
* Local authentication.
*
* @param request
* incoming http request
* @param response
* http response
* @return
*/
protected boolean __authenticate( HttpServletRequest request,
HttpServletResponse response )
{
//报表权限,没有登录访问不了
if(request.getSession().getAttribute("user")==null)
{
return false;
}
return true;
}
3.将该类编译后放进BIRT包里面。
posted @
2009-03-19 10:42 流腥鱼 阅读(2016) |
评论 (2) |
编辑 收藏
http://www.overset.com/2008/05/12/multiday-calendar-datepicker-jquery-plugin/
posted @
2009-02-17 00:26 流腥鱼 阅读(1762) |
评论 (1) |
编辑 收藏
1.组织机构的完善
工作流中的权限设置往往是比较复杂的,如审批中经常需要某部门的主管审批,或者某个人的上级领导审批等等。
为了满足需求的多样化,在原来的组织机构基础上引入岗位的模型,每个员工都对应一个部门和一个岗位。部门中设置主管的岗位。有个这个关系,这样可以比较清楚地查找某个人的上级领导,或者是某个部门的主管。
2.工作流节点中设置执行者方案
6种方式定义执行者
1.指定人
通过在组织结构树中点选具体的某些人。
2.指定岗位
在岗位树中指定执行的岗位。
3.指定部门
在组织机构树中指定执行的部门
4.指定角色
角色是某些逻辑上相识的一个组定义。选择某个角色。
5.相对执行人
在流程还没有开启之前,执行者是谁是未知的,所以这里的指定是相对的,当流程开启的时候才能确定,这里可以设置相对执行人的部门主管、相对执行人的上级主管、相对执行人的所在部门、执行人自己这4个情况。
6.表单确定
有些流程不在定义的时候确定,是由上一节点执行者确定的。
前五种方式可以混合,只要登录者复合定义制定人的并集,就有权限在待办任务中看到等待处理任务并有权限执行。
posted @
2009-02-12 17:27 流腥鱼 阅读(1861) |
评论 (1) |
编辑 收藏
ps -ef |grep tomcat
kill -9 端口
posted @
2009-01-09 18:28 流腥鱼 阅读(990) |
评论 (0) |
编辑 收藏
前段时间有个JSP网站要在服务器上部署,由于服务器上根本没配置过jsp环境,于是装了Jdk和Tomcat,过程还算顺利,很快就安装好了,但是Tomcat的默认端口是8080,访问网站也带个端口多么不爽,因为服务器上有很多ASP站点,又不能不用IIS,于是第一个想到的便是跟IIS6.0整合,baidu google了大半天,搜出来文章倒是很多,也不知是由于我安装的是最新的JDK和Tomcat,的原因还是权限原因(为了安全,更改过多处权限),总之就是不成功,换了两台服务器也没配置成功,到最后不是不能正确运行,就是提示函数不正确,到网上搜,很多人问之类的问题,但几乎没有人正了把经回答的,有些“热心”的倒还说两句“重装一下看看?”“再从头到尾检查一遍试试”。。。算了还是自己搞吧。
继续搞啊搞,还是不行,最后干脆不搞了,心想即使弄好了,性能还不知怎么样呢。于是想另外的解决方法,因为服务器所在的网络有空闲的ip,便想何不让IIS用一个ip,Tomcat用一个ip,都使用80端口?问了几个人都说不行,两个软件用同一个端口那不冲突么,也有的说两个ip那得需要两块网卡啊。服务器上倒是有两块网卡,但就插了一根网线,另一个闲着。我就是要用一块网卡,两个ip,因为在TCP/ip协议属性-》高级中,一块网卡是可以添加多个ip地址的,iis与Tomcat分别监听不同ip的80端口,OK,开始吧。
我们知道IIS默认情况下是监听所有ip地址的80端口的,也就是说,在网站属性中只要选择“全部未分配”,则该网站就可以使用所有本机可用的ip地址。显然这个不符合我们现在的要求,我们首先将IIS所有站点当中全部改为指定IIS要监听的IP地址,包括默认站点,例如全部改为61.156.31.1。再在网卡中加一个ip,也就是在TCP/ip高级属性中再加一个可用的ip,这样一块网卡就可以使用两个或更多个ip了,看似很简单的操作可能有很多人不知道,认为一块网卡只能设一个ip,呵呵。
接下来最关键的一步开始了,便是禁用IIS的套接字池(如果这一步没调好,便不会成功),在微软官方网站上有解释:
http://support.microsoft.com/kb/238131/zh-cn
概要
在下列情况下,您可能需要禁用套接字池:
1、承载的站点数目不多。
2、有特殊的安全考虑。
3、另一个应用程序或服务器需要某个 IP 地址上的端口 80。
更多信息
套接字池会导致“Internet 信息服务”(IIS) 侦听所有 IP 地址,这样,可能会对具有多个网络的安全域造成安全隐患。另外,带宽调节和性能调整会应用于所有针对同一端口(例如,端口 80)进行配置的 Web 站点。如果基于每个站点进行带宽调节或性能调整,则必须禁用套接字池。
由于 DisableSocketPooling 在 IIS 6.0 元数据库架构 (MBSchema.xml) 中被定义为有效属性,所以,您仍然可以使用 Adsutil.vbs 设置该属性,但这种设置不起作用。IIS 6.0 中的功能是新增的核心级别驱动程序HTTP.sys 的一部分。要配置 HTTP.sys,您必须使用Httpcfg.exe。 有关如何在 IIS 6.0 中禁用套接字池的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
813368 (http://support.microsoft.com/kb/813368/) IIS 6.0:设置配置数据库数据 DisableSocketPooling 没有作用
要禁用套接字池,请执行下列步骤:
1. 打开命令提示符并确保您位于 X:\Inetpub\Adminscripts 文件夹(其中 X 是 IIS 安装驱动器)中。为此,请在命令提示符下键入以下
行:
X:
CD\Inetpub\Adminscripts
2. 打开 Adminscripts 文件夹后,请在命令提示符下键入以下行:
cscript adsutil.vbs set w3svc/disablesocketpooling true
3. 该命令反馈如下:
disablesocketpooling :(BOOLEAN) True
4. 停止 IIS Admin 服务,然后再启动它。
5. 重新启动 WWW 服务。
好了,接下来设置IIS要监听的ip地址。到2003的CD下的 support/tools/Support.cab。解压出httpcfg.exe文件,COPY到
windows/system32/目录下,用法自己看帮助
命令行:
绑定到某IP: httpcfg set iplisten -i 61.156.31.1
即命令使用IIS的只监听指定的IP及端口
查看绑定: httpcfg query iplisten
删除绑定: httpcfg delete iplisten -i 61.156.31.1
IIS部分到此就设置好了,接下来设置Tomcat,当然或者你用Apache,Resin等也都可以,在Tomcat的配置文件Server.xml里找到
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" address="61.156.31.2"/>
在后面添加上需要Tomcat监听的ip地址即可,例如:address="61.156.31.2" Apache,Resin或者其他WEB服务器软件都应该有相应的设置的,自己找一下即可。
好了接下来重启IIS,重启Tomcat或Apache,怎么?启动失败?提示端口占用?是啊,我也遇到这种情况,捣鼓了大半天要是再不成功我就要放弃了。实在无奈之下重启了一下服务器,哇,好啦。测试一下61.156.31.1访问的是IIS,61.156.31.2访问的是Tomcat可爱的大猫。
实际上,实现IIS和Apache或Tomcat公用80的方法还很多,例如IIS设置8080,Apache设置80,利用Apache反向代理IIS的8080,当然也可以用NT下面的squid。或者在IIS中安装IIS的Isapi Rewrite,利用IIS的反向代理代理Apache,当然如果IIS站点少,Apache站点多就用第一种方法,IIS站点多,Apache站点少就用第二种方法,但这两种方法在性能上都不是很好,Apache在Windows下的反向代理也有BUG,经常出现Proxy Error的提示,至于IIS的反向代理没用过,因为IIS的ISAPI带反向代理功能的是要收费的。http://www.xpb.cn/blog/623.html
posted @
2008-12-26 18:36 流腥鱼 阅读(3551) |
评论 (1) |
编辑 收藏
eclipse 中使用 svn 插件,原本正常,未作任何更改,突然有一天, eclipse 中查看文件时,文件后面的 版本号 、 文件的状态图标 等等都不见了。
检查插件都在,更新,提交等操作都能正常使用,唯独看不到状态了。
经过一番查找,找到问题解决办法。
打开 : windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项即可。
posted @
2008-12-16 16:34 流腥鱼 阅读(1049) |
评论 (1) |
编辑 收藏
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。下面是它的核心引擎的体系结构图:
下面以
http://www.webxml.com.cn/webservices/DomesticAirline.asmx?Wsdl 航班查询服务为例来分析开发客户端的步骤。
1.首先从
http://ws.apache.org/axis/index.html上下载axis的程序包。
2.运行cmd,进入下载包解压后的目录,运行 Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p client
http://www.webxml.com.cn/webservices/DomesticAirline.asmx?Wsdl
(其中-p是生成代码的包名,根据需要设置)
然后把生成的代码拷贝到项目里面。
3.拷贝axis里面的包到工程里面。
4.客户端代码。
public List<TicketInfo> getDomesticAirlinesTime(String startCity, String lastCity, String theDate) throws RemoteException, ServiceException {
DomesticAirline service = new DomesticAirlineLocator();
GetDomesticAirlinesTimeResponseGetDomesticAirlinesTimeResult airlines;
airlines = service.getDomesticAirlineSoap12().getDomesticAirlinesTime(startCity, lastCity,theDate, null);
MessageElement[] FOCElement = airlines.get_any();
List FOCElementHead = FOCElement[0].getChildren();//消息头,DataSet对象
List FOCElementBody = FOCElement[1].getChildren();//消息体信息,DataSet对象
String nn = FOCElementBody.get(0).toString();//消息体的字符串形式
SAXReader reader = new SAXReader();
Document document = null;
try {
document = document = DocumentHelper.parseText(nn);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.toString());
}
Element root = (Element)document.getRootElement(); // 得到根元素
List<TicketInfo> ticketInfoList = new ArrayList<TicketInfo>();
for (Object e : root.elements())
{
TicketInfo ticketInfo = new TicketInfo();
Element element = (Element) e;
ticketInfo.setAirlineCompany(element.elementText("Company"));
ticketInfo.setFlightNumber(element.elementText("AirlineCode"));
ticketInfo.setStartAirport(element.elementText("StartDrome"));
ticketInfo.setEndAirport(element.elementText("ArriveDrome"));
ticketInfo.setAirCraftType(element.elementText("Mode"));
SimpleDateFormat myFmt=new SimpleDateFormat("HH:mm");
try {
ticketInfo.setStartTime(myFmt.parse(element.elementText("StartTime")));
ticketInfo.setEndTime(myFmt.parse(element.elementText("ArriveTime")));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ticketInfoList.add(ticketInfo);
}
return ticketInfoList;
}
}
本来客户端代码应该是比较简单的,但是这个例子的webservice服务端是用.net写的,查询后返回DataSet类型,java没有对应的类型,所以只能把返回后的结果用xml来解析,然后在放入java的数据对象里面。
posted @
2008-12-04 10:04 流腥鱼 阅读(2858) |
评论 (0) |
编辑 收藏