??xml version="1.0" encoding="utf-8" standalone="yes"?>色在线中文字幕,色www精品视频在线观看,国产欧美一区二区三区在线看http://www.aygfsteel.com/dreamstone/archive/2009/01/31/252781.htmldreamstonedreamstoneSat, 31 Jan 2009 03:20:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2009/01/31/252781.htmlhttp://www.aygfsteel.com/dreamstone/comments/252781.htmlhttp://www.aygfsteel.com/dreamstone/archive/2009/01/31/252781.html#Feedback0http://www.aygfsteel.com/dreamstone/comments/commentRss/252781.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/252781.html阅读全文

dreamstone 2009-01-31 11:20 发表评论
]]>
acegi的验证问? ---中文用户名登录,?qing)md5加密密码方式http://www.aygfsteel.com/dreamstone/archive/2008/09/19/230020.htmldreamstonedreamstoneFri, 19 Sep 2008 13:29:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2008/09/19/230020.htmlhttp://www.aygfsteel.com/dreamstone/comments/230020.htmlhttp://www.aygfsteel.com/dreamstone/archive/2008/09/19/230020.html#Feedback0http://www.aygfsteel.com/dreamstone/comments/commentRss/230020.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/230020.html 因ؓ(f)之前acegi都是另一个同事负责,现在同事不在Q只能自p冻I扑ֈacegi中取得用户名的地?br /> org.acegisecurity.ui.webapp.AuthenticationProcessingFilter 中的q段代码
 1public Authentication attemptAuthentication(HttpServletRequest request)
 2        throws AuthenticationException {
 3        String username = obtainUsername(request);
 4        String password = obtainPassword(request);
 5
 6        if (username == null{
 7            username = "";
 8        }

 9
10        if (password == null{
11            password = "";
12        }

13
14        UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
15
16        // Place the last username attempted into HttpSession for views
17        request.getSession().setAttribute(ACEGI_SECURITY_LAST_USERNAME_KEY, username);
18
19        // Allow subclasses to set the "details" property
20        setDetails(request, authRequest);
21
22        return this.getAuthenticationManager().authenticate(authRequest);
23    }

24

取出username后发现是qQ如果解册个问题呢Q第一个想到的是{?br />
username=new String(username.getBytes("ISO8859-1"),"UTF-8");
解决问题Q但是这D代码要嵌入到acegi中必重新编译acegi
上边的办法改动太大,再想办法Q想到既焉题是来自~码Q看看web.xml的filter发现原因在这
spring的filter是解决编码问题的Q但是因为acegi的filter在spring之前Q所以编码没有{码。又不能把acegi的filter挪到spring filter之后Q这样就有安全问题了?br />
那就增加一个filterQ只qo(h)d链接Q然后设|一下代替spring的encodingfilter讄一下编码,解决问题
public class EncodeChnUsernameFilter implements Filter{
    
private static final String ACEGI_SECURITY_FORM_USERNAME_KEY ="j_username";
    
private static final String ACEGI_SECURITY_FORM_PASSWORD_KEY = "j_password";
    
public void destroy() {
        
    }


    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(
"UTF-8");
        chain.doFilter(request, response);
    }


    
public void init(FilterConfig arg0) throws ServletException {
        
    }

}
中文用户名登录问题解决了?br />
但是另一个问题来了,密码是非明文的md5加密的,需要加密,同样不想更改acegi?br /> 那好吧l用filterQ看看能否getParameter后再set回去
String password= request.getParameter("j_password");
//q里是个md5加密函数
password = md5(password);
//怎么setq去呢?
request.getParameterMap().put("j_password",password);
//启动试一下,异常报错Qmap不能putQ看一下异常,发现q个不是普通的mapQ是org.apache.catalina.util.ParameterMapQ这个map中有个标志位lockQtomcat不让更改http接收到的倹{?br /> //Z不服输的_Q一定要搞定它,呵呵
ParameterMap map = (ParameterMap)request.getParameterMap();
map.setLock(
false);
map.put(
"j_password",password);
map.setLock(
true);
//搞定Q不对,~译不通过Q发现org.apache.catalina.util.ParameterMap的jar包是catalina.jar?br /> 把这个包攑ֈl(f)ib下编译,通过Q运行出向下转型错误Q仔l看一下发现request.getParameterMap()出来的ParameterMap.getClass()的id?00多,而接受{?/span>
的ParameterMap.class.getClass()?000多,不是一个类啊。想想也对,lib下和tomcat的server/lib下各有一个catalina.jarq个是两个cM?br />
eclipse add 外部jar包,直接add上tomcat中的catalina.jarQ编译运行,q是有问题,q次是报的classNotFound异常Qؓ(f)什么会(x)q样呢,命名Server
/lib下有q个jar包,后来想了下明白了。tomcat一定是限定了catalina.jar不能被普通的用户cL直接引用。处于安全性考虑吧。这条\C通了Q回到acegi才发现acegi的配|文件中是可以随意配|a(chn)utheticationfilter的,自己写一个autheticationfilterQ配|进去,不用pȝ的,解决问题Qfilter里边怎么写都没问题,爱怎么处理怎么处理Q呵?/span>



dreamstone 2008-09-19 21:29 发表评论
]]>
jdom ?dom4jdxml文g时如何让dtd验证使用本地dtd文g或者不生效http://www.aygfsteel.com/dreamstone/archive/2007/08/29/140993.htmldreamstonedreamstoneWed, 29 Aug 2007 09:05:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/08/29/140993.htmlhttp://www.aygfsteel.com/dreamstone/comments/140993.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/08/29/140993.html#Feedback5http://www.aygfsteel.com/dreamstone/comments/commentRss/140993.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/140993.html阅读全文

dreamstone 2007-08-29 17:05 发表评论
]]>
通过httpClientq接 tomcat https (ssl)http://www.aygfsteel.com/dreamstone/archive/2007/07/27/132861.htmldreamstonedreamstoneFri, 27 Jul 2007 10:01:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/07/27/132861.htmlhttp://www.aygfsteel.com/dreamstone/comments/132861.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/07/27/132861.html#Feedback0http://www.aygfsteel.com/dreamstone/comments/commentRss/132861.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/132861.htmlHttpClientq接tomcat httpsQ用私有证书)

步骤一Q?/span>

?/span>www.apache.org下蝲所需的类?/span>

commons-codec-1.3.jar

commons-httpclient-3.1-rc1.jar

commons-logging.jar

步骤二:(x)

制作证书Q?/span>

keytool -genkey -alias tomcat -keyalg RSA

L输入Q最后一个提C入回车(保证两个密码相等Q否?/span>tomcat不能启动.

默认生成的文件在用户目录?/span>.keystore

步骤三:(x)

配置tomcat

更改tomcat配置文gserver.xml

加入

<Connector port="8443" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" disableUploadTimeout="true"

               acceptCount="100" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

                        keystoreFile="C:\.keystore"   keystorePass="123456"

                        />

其中keystoreFile是刚生成文g的带全\径的名字

keystorePass是刚才徏立证书时候的名字

启动tomcatQ访?/span>https:\\localhost:8443/如果能正常看刎ͼ说明tomcat?/span>https配置成功.

步骤四:(x)

生成jdk能用的证书
 1,用ie导出证书(导出Ҏ(gu)Q?a >http://www.ibm.com/developerworks/cn/opensource/os-httpclient/#N10114)

2,假设上边导出文g的名字叫tt.cer

执行(保配置?/span>java  home)

keytool -import -noprompt -keystore D:\Java\jdk1.5.0_06\jre\lib\security\carcert -alias tomcat -file tt.cer –trustcacerts

其中U色的部分替换成自己jre的\?/span>,alias同徏立证书时的名字,file时刚才导出的证书的名?/span>

 

?x)提C入密码,输入刚才建立证书时输入的密码

 

步骤五:(x)

~写代码

 

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;


public class Test {
    
public static void main(String[] args) throws Exception{
//        normal();
        ssl();

    }

    
public static void ssl()throws Exception{
        String url 
= "https://127.0.0.1:8443/ts/";
        get(url);
    }

    
public static void normal()throws Exception{
        String url 
= "http://127.0.0.1:8080/ts/";
        get(url);
    }

    
public static void get(String url) throws Exception{
        HttpClient client 
= new HttpClient();
        GetMethod getMethod 
= new GetMethod(url);
        
//讄成了默认的恢复策略,在发生异常时候将自动重试3ơ,在这里你也可以设|成自定义的恢复{略
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
                    
new DefaultHttpMethodRetryHandler()); 
        
//执行getMethod
        int statusCode = client.executeMethod(getMethod);
        
if (statusCode != HttpStatus.SC_OK) {
          System.err.println(
"Method failed: " + getMethod.getStatusLine());
        }

        
byte[] responseBody = getMethod.getResponseBody();
        System.out.println(
new String(responseBody));
        getMethod.releaseConnection();
    }

}

 

普通连接和sslq接只有一个差距就?/span>url

 

 



dreamstone 2007-07-27 18:01 发表评论
]]>
apache mina (异步q接框架)介绍http://www.aygfsteel.com/dreamstone/archive/2007/07/09/129004.htmldreamstonedreamstoneMon, 09 Jul 2007 03:26:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/07/09/129004.htmlhttp://www.aygfsteel.com/dreamstone/comments/129004.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/07/09/129004.html#Feedback5http://www.aygfsteel.com/dreamstone/comments/commentRss/129004.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/129004.html一、介l?br>mina(Multipurpose Infrastructure for Network Applications) 是apache的顶U项目之一Q用于构造异步连接的各种|络应用
二、最单的使用实例
package aicu.mina;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.SimpleByteBufferAllocator;
import org.apache.mina.filter.LoggingFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;

public class MinaTimeServer {

    
private static final int PORT = 9123;

    
public static void main(String[] args) throws IOException {
        
//讄buffer
        ByteBuffer.setUseDirectBuffers(false);
        ByteBuffer.setAllocator(
new SimpleByteBufferAllocator());
        
//定义acceptor
        IoAcceptor acceptor = new SocketAcceptor();
        
//定义config
        SocketAcceptorConfig cfg = new SocketAcceptorConfig();
        
//讄config,加入filter
        cfg.getSessionConfig().setReuseAddress( true );
        cfg.getFilterChain().addLast( 
"logger"new LoggingFilter() );
        cfg.getFilterChain().addLast( 
"codec"new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
        
//加入port handler cfg
        acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg);
        System.out.println(
"MINA Time server started.");
    }

}

对应的handler ,handler的作用是在对应的|事件的处理代码
package aicu.mina;
import java.util.Date;

import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.TransportType;
import org.apache.mina.transport.socket.nio.SocketSessionConfig;

public class TimeServerHandler extends IoHandlerAdapter {
    
public void exceptionCaught(IoSession session, Throwable t) throws Exception {
        t.printStackTrace();
        session.close();
    }


    
public void messageReceived(IoSession session, Object msg) throws Exception {
        String str 
= msg.toString();
        
//如果是quit关闭session退?/span>
        if( str.trim().equalsIgnoreCase("quit") ) {
            session.close();
            
return;
        }

        
//否则打印当前日期
        Date date = new Date();
        session.write( date.toString() );
        System.out.println(
"Message written");
    }


    
public void sessionCreated(IoSession session) throws Exception {
        System.out.println(
"Session created");

        
if( session.getTransportType() == TransportType.SOCKET )
            ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 
2048 );

        session.setIdleTime( IdleStatus.BOTH_IDLE, 
10 );
    }

}
三、用方法:(x)
~译上边两个c(需要加入mina的jar文g)Q然后运行terminalServer
开?>q行->cmdq入控制?br>telnet 127.0.0.1 9123
输入hello
得到当前日期
输入quit关闭session?br>

dreamstone 2007-07-09 11:26 发表评论
]]>
SLF4J 教程Q自由在各种log中切?http://www.aygfsteel.com/dreamstone/archive/2007/07/09/128993.htmldreamstonedreamstoneMon, 09 Jul 2007 02:47:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/07/09/128993.htmlhttp://www.aygfsteel.com/dreamstone/comments/128993.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/07/09/128993.html#Feedback6http://www.aygfsteel.com/dreamstone/comments/commentRss/128993.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/128993.html一、介l:(x)
单日记门?simple logging Facade for java)SLF4J是ؓ(f)各种loging APIs提供一个简单统一?br>接口Q从而得最l用戯够在部v的时候配|自己希望的loging APIs实现?Logging API实现既可?br>选择直接实现SLF4J接的loging APIs如:(x) NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现
来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。在SLF4J发行版本中包含了几个
jar包,如slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-log4j13.jar,
slf4j-jdk14.jar and slf4j-jcl.jar通过q些jar文g可以使编译期与具体的实现q。或者说可以
灉|的切?br>二、官方站?br>官方的网站:(x)http://www.slf4j.org/manual.html
三、ؓ(f)何用slf4j?
我们在开发过E中可能使用各种logQ每个Log有不同的风格、布局Q如果想灉|的切换那么slf4j是比较好?br>选择?br>四、如何用slf4j
下边一D늨序是l典的用slf4j的方?

 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Wombat {
    
final Logger logger = LoggerFactory.getLogger(Wombat.class);
    Integer t;
    Integer oldT;
    
public void setTemperature(Integer temperature) {
        oldT 
= t;
        t 
= temperature;
        logger.error(
"Temperature set to {}. Old temperature was {}.", t, oldT);
        
if (temperature.intValue() > 50{
            logger.info(
"Temperature has risen above 50 degrees.");
        }

    }

    
public static void main(String[] args) {
        Wombat wombat 
= new Wombat();
        wombat.setTemperature(
1);
        wombat.setTemperature(
55);
    }

}


下边介绍一下运行上边程序的q程?br>1,~译上边的程序,需要classpath中加入slf4j-api-1.4.1.jar文g
2,q行Ӟ需要classpath中加上slf4j-simple-1.4.1.jar
q行得到l果:
----------------------------
0 [main] ERROR Wombat - Temperature set to 1. Old temperature was null.
0 [main] ERROR Wombat - Temperature set to 55. Old temperature was 1.
0 [main] INFO Wombat - Temperature has risen above 50 degrees.
q个是simple log风格Q?/p>

3,切换Q如果想切换到jdk14的log的风|只需要把slf4j-simple-1.4.1.jar
从classpath中移除,同时classpath中加入slj4j-jdk14-1.4.1.jar
q时的运行结?
---------------------------------------------------
2007-7-9 10:40:15 Wombat setTemperature
严重: Temperature set to 1. Old temperature was null.
2007-7-9 10:40:16 Wombat setTemperature
严重: Temperature set to 55. Old temperature was 1.
2007-7-9 10:40:16 Wombat setTemperature
信息: Temperature has risen above 50 degrees.
已经变成jdk14的log风格了?br>4,再次切换到l(f)og4j
同样U除slj4j-jdk14-1.4.1.jarQ加入slf4j-log4j12-1.4.1.jarQ同时加入log4j-1.2.x.jar
加入log4j.properties。得到显C结?
---------------------------------------
10:42:27,328 ERROR Wombat: Temperature set to 1. Old temperature was null.
10:42:27,328 ERROR Wombat: Temperature set to 55. Old temperature was 1.
10:42:27,328  INFO Wombat: Temperature has risen above 50 degrees.
在不同的风格中切换只需要在部v期切换类库就可以了,和开发时无关?br>



dreamstone 2007-07-09 10:47 发表评论
]]>
Ҏ(gu)Corba 了解Icehttp://www.aygfsteel.com/dreamstone/archive/2007/05/09/116067.htmldreamstonedreamstoneTue, 08 May 2007 16:48:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/05/09/116067.htmlhttp://www.aygfsteel.com/dreamstone/comments/116067.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/05/09/116067.html#Feedback1http://www.aygfsteel.com/dreamstone/comments/commentRss/116067.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/116067.htmlIce ?和C++的同事一起听的。记录一些内容,另外放一些自qq的资料Q?br>1Q学?fn)Ice必须的网?br>www.zeroc.com
2Qice?br>

ICE(Internet Communications Engine)是一个ؓ(f)现实中程序员而写的中间gq_。作Z个高性能的互联网通信q_QICE包含了很多分层的服务和插?Plug-ins)Qƈ且简单、高效和强大?/p>

ICE的自׃用遵从GNU的GPL(GNU General Public Licens)许可的条ƾ。ICE也有商业的许可证Q如果你惛_ICE使用在你的私有品中Q那么你应该使用ICE的商业许可证。可以联p?a href="mailto:sales@zeroc.com" target=_blank>sales@zeroc.com来获得这斚w的更多信息?/p>

ICE当前支持C++、Java、C#、Visual Basic、Python和PHP~程语言Qƈ支持在多U操作系l上q行。更多的操作pȝ和编E语a会(x)在以后的发布中支持?/p>

ICE有以下几部分l成Q?/p>

Slice
ICE的规范语aQ跟CORBA的IDL(Interface Definition Language){h(hun)的东ѝSlice建立了客L(fng)和服务器端共同遵守的契约Q接口。Slice也用来描q对象持久数据?/p>

Slice Compilers
Slice的规范语a可以影射成多U编E语a。目前ICE支持C++QJavaQPythonQPHPQC#和VB的语a影射。Ice的客L(fng)和服务器端协同工作,而不?x)知道分别实现的是何U编E语a?/p>

Ice
Ice的核心库。在众多的特性当中,Ice核心库通过一个高效的协议(包含TCP/UDP层上协议压羃)来管理所有的通信dQؓ(f)多线E服务器提供了一个灵zȝU程池,q且有特别的功能来支持上百万对象的可扩展性?/p>


IceUtil
一些常用的功能函数集。例如Unicode处理和多U程~程Q是用C++写成?/p>

IceBox
一个专用于ICE应用的应用服务器。ICEBox可以方便地运行和理动态加载、共享库或javacȝ形式Ice的服务?/p>

IcePack
一个成熟的服务Ȁzd部v工具。IcePack能大大简化在异构|络之间部v应用的复杂性。只要简单的~写XML格式的一个部|描q文ӞIcePackp自动处理剩下的工作?/p>

Freeze
Freeze提供了Ice Servants对象的自动持久性。通过几行代码Q一个应用就可以生成一个高度可扩展的逐出?evictor)来高效地理持久对象?/p>

FreezeScript
在大的Y仉目里Q持久对象的数据cd改变很常见。ؓ(f)了最化q些变化的媄响,FreezeScript提供了相应的工具来检查和ULFreeze生成的数据库。这些工h持XML格式的配|脚本,易于使用?/p>

IceSSL
用于Ice核心的动态的SSL传输插g。提供了认证、加密和消息完整性,使用工业标准的SSL协议来实现?/p>

Glacier
面向对象中间件^台的一个最大的挑战是安全性和防火墙。Glacier是Ice的防火墙解决Ҏ(gu)Q它大大化了安全E序的部|ӀGlacier认证和过滤客L(fng)hq允许服务器通过安全的方式回调客L(fng)对象。结合IceSSL的用,Glacier提供了强大的安全解决Ҏ(gu)Q即安全Q又易于配置理?/p>

IceStorm
一个支持联盟的消息服务。和大多数的其他消息和事件服务相比,IceStorm支持有类型的事gQ这意味着通过联盟q播一个消息和调用一个接口上的一个方法一样容易?/p>

IcePatch
一个Y件修补和分发的服务。ؓ(f)保q行的Y件是最新的版本Q要l常更新软gQ这是一件乏味的工作。IcePatch自动更新在某个目录层ơ下的文件。只有需要更新的文g?x)下作到客户端,Z快速的下蝲更新QIcePatch使用的高效的压羃法?br>3、ice vs corba差异
http://gigaboy.bokee.com/2158057.html
4、ice vs corba性能Ҏ(gu)
http://gigaboy.bokee.com/2160870.html
5、ice评h(hun)
corba是一个规范,ice不是 ice的特性是zerocx样怎样?所以也不会(x)有第三方产商参与 ice对各U^台的支持也只有zeroc的实现版本。用Ice不用自己设计传输协议?QIce有成熟的商用案例。ICE是以前Corba的开发者来开发的Q吸取了corba的长处,避免了一些短处,特点是:(x)效率高、简单、免?/p>


dreamstone 2007-05-09 00:48 发表评论
]]>
工作入? http://www.aygfsteel.com/dreamstone/archive/2007/05/07/115739.htmldreamstonedreamstoneMon, 07 May 2007 11:06:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/05/07/115739.htmlhttp://www.aygfsteel.com/dreamstone/comments/115739.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/05/07/115739.html#Feedback2http://www.aygfsteel.com/dreamstone/comments/commentRss/115739.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/115739.html阅读全文

dreamstone 2007-05-07 19:06 发表评论
]]>
安装appfusehttp://www.aygfsteel.com/dreamstone/archive/2007/04/17/111153.htmldreamstonedreamstoneTue, 17 Apr 2007 01:48:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/04/17/111153.htmlhttp://www.aygfsteel.com/dreamstone/comments/111153.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/04/17/111153.html#Feedback8http://www.aygfsteel.com/dreamstone/comments/commentRss/111153.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/111153.htmlL(fng)q里(ant入门)

 一Q准?/span>

1,安装Jdk1.4

2,安装mysql

3,解压~?/span>antQ拷?/span>junit.jar?/span>ant_home/lib/?/span>

4,path,classpath,jdk_home,and_home,catalina_home

5,试安装

cmd->输入java

cmd->输入ant

二:(x)安装Q?/span>

1Q拷?/span>appfuse-webwork-1.9.3-src.zip?/span>d:/work

   解压~?/span>appfuse-webwork-1.9.3-src.zip到当前文件夹

2,修改配置文gbuild.properties

q里?/span>mysqlZ子:(x)

原来的样子:(x)

--------------------------------------------------------

#database.jar=${postgresql.jar}

#database.type=postgresql

#database.host=localhost

#database URL for creating other databases (doesn't work with pgsql)

#database.admin.url=jdbc:${database.type}://${database.host}/template1

#database.admin.username=postgres

#database.admin.password=postgres

 

#hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

#database.driver_class=org.postgresql.Driver

#database.url=jdbc:${database.type}://${database.host}/${database.name}

--------------------------------------------------------

 

修改后的样子Q?/span>

--------------------------------------------------------

database.jar=${mysql.jar}

database.type=mysql

database.host=localhost

#database URL for creating other databases (doesn't work with pgsql)

database.admin.url=jdbc:${database.type}://${database.host}/mydb

database.admin.username=root

database.admin.password=aa

 

hibernate.dialect=org.hibernate.dialect.MySQLDialect

database.driver_class=com.mysql.jdbc.Driver

database.url=jdbc:${database.type}://${database.host}/${database.name}

--------------------------------------------------------

 

修改D:\work\myapp\metadata\sql里边?/span>mysql-create.sql

把第一句改?/span>

create database if not exists @DB-NAME@ CHARACTER SET utf8 COLLATE utf8_general_ci;

 

2,生成工程

cmdq入d:\work\appfuse->输入ant new

全部使用默认

3,~译Q?/span>

Ant compile

 

3Q徏立表l构

q入mysql>

Create database mydb

Ant setup-db

 

4,

Ant test-all

 

5,部v

Ant deploy

三,q行

1
?span>  
q行tomcat?span>

2?span>  打开览器,输入http://localhost:8080/myappQ会(x)看到d面?/span>

 

注意问题Q?/span>

每次更改环境变量后应该重新打开CMDH口

 

下蝲地址Q?/span>

  • ?/span> AppFuse 下蝲面 下蝲 appfuse-tapestry-1.9.3-src.zipQƈ解压~在L目录下。这?/span> zip 已经定制了?/span> Tapestry 作ؓ(f)表现层的实现框架Q因而用v来较为直接?/span>
  • ?/span> http://java.sun.com 下蝲最新的 JDKQƈ安装或解压羃CQ意目录下。本文采?/span> JDK 1.5.0。设|环境变?/span> JAVA_HOME 指向 JDK 所在的目录Qƈ?/span> PATH 中添?/span> %JAVA_HOME%/bin?/span>
  • ?/span> http://jakarta.apache.org/tomcat 下蝲最新版?/span> TomcatQƈ安装或解压羃CQ意目录下。本文采?/span> Tomcat 5.5.17。设|环境变?/span> CATALINA_HOME 指向 Tomcat 的安装目录?/span>
  • ?/span> http://ant.apache.org下蝲最新版?/span> AntQƈ解压~到L目录下?/span>AppFuse 要求的最低版本是 1.6.2Q本文采用的?/span> 1.6.5。设|?/span> ANT_HOME 指向 Ant 所在的目录Qƈ?/span> PATH 中添?/span> %ANT_HOME%/bin。另外,要拷贝一?/span> junit.jar ?/span> %ANT_HOME%/lib 下,如果 lib 下没?/span> junit.jarQ?/span>AppFuse 的脚本在q行时会(x)l出警告信息?/span>junit.jar 可以?/span> http://www.junit.org 获得Q也可以?/span> %AppFuse%/lib/junit3.8.1 目录下获得?/span>
  • ?/span> http://www.mysql.com 下蝲最新版?/span> MySQLQƈ安装或解压羃CQ意目录下。本文采用的?/span> 5.0?/span>

 参考:(x)http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html

1. Ant 中常用的 AppFuse target
target 说明 所在文?/th>
new q个 target 是?AppFuse 必须要用到的Q它用来?AppFuse 同的目录下创徏一个新目。创E是交互式的Q会(x)让用戯入项目名U、数据库名称以及(qing)根包路径?/td> AppFuse 安装目录下的 build.xml
setup 用于初始化一个新的项目,它包含了从数据库创徏、Tomcat 讄?war 文g的生成和部v{一pd操作?/td> 目根目录下?build.xml
deploy 如果你修改的代码不涉?qing)到数据库的更改Q那么可以用这?targetQ因为它只负责生成ƈ重新部v war 包?/td> 目根目录下?build.xml
setup-db 如果你只是要Ҏ(gu)据库q行更改Q用这?target。比如,重新创徏数据库,重新加蝲h数据{操作?/td> 目根目录下?build.xml
install AppGen ?target。如果你不希望?AppGen 帮你生成 dao cd service cM?qing)其他的代码Q就使用q个 target?/td> extras/appgen 目录下的 build.xml
install-detailed AppGen ?target。如果你希望使用 AppGen 帮你生成所有代码,׃用这?target?/td> extras/appgen 目录下的



dreamstone 2007-04-17 09:48 发表评论
]]>
配制Spring声明型事务和JdbcTemplate的?/title><link>http://www.aygfsteel.com/dreamstone/archive/2007/02/08/98844.html</link><dc:creator>dreamstone</dc:creator><author>dreamstone</author><pubDate>Thu, 08 Feb 2007 10:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/dreamstone/archive/2007/02/08/98844.html</guid><wfw:comment>http://www.aygfsteel.com/dreamstone/comments/98844.html</wfw:comment><comments>http://www.aygfsteel.com/dreamstone/archive/2007/02/08/98844.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dreamstone/comments/commentRss/98844.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dreamstone/services/trackbacks/98844.html</trackback:ping><description><![CDATA[     摘要: Spring 声明事务 JdbcTemplate  <a href='http://www.aygfsteel.com/dreamstone/archive/2007/02/08/98844.html'>阅读全文</a><img src ="http://www.aygfsteel.com/dreamstone/aggbug/98844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dreamstone/" target="_blank">dreamstone</a> 2007-02-08 18:33 <a href="http://www.aygfsteel.com/dreamstone/archive/2007/02/08/98844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用IText打印PDFhttp://www.aygfsteel.com/dreamstone/archive/2007/01/29/96468.htmldreamstonedreamstoneMon, 29 Jan 2007 03:55:00 GMThttp://www.aygfsteel.com/dreamstone/archive/2007/01/29/96468.htmlhttp://www.aygfsteel.com/dreamstone/comments/96468.htmlhttp://www.aygfsteel.com/dreamstone/archive/2007/01/29/96468.html#Feedback11http://www.aygfsteel.com/dreamstone/comments/commentRss/96468.htmlhttp://www.aygfsteel.com/dreamstone/services/trackbacks/96468.html
import java.io.FileOutputStream;

import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;


public class Example {
    
private static Font FONT_11;
    
private static BaseFont msgothic;
    
public static void main(String[] args) throws Exception{
        
try{
            
//定义字体
            msgothic = BaseFont.createFont("D:\\workspace\\UseIText\\MSMINCHO.TTC,0",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
            FONT_11
=new Font(msgothic);
            FONT_11.setSize(
11);
        }
catch(Exception e){
            e.printStackTrace();
        }

        
//Z试方便Q加入自动关闭打开acrord32
        Runtime.getRuntime().exec("tskill acrord32").waitFor();
        Thread.sleep(
1000);
        Document document
=new Document(PageSize.A4.rotate());
        
//写文?/span>
        PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream("d:/temp.pdf"));
        document.open();
        makeDocument(document);
        document.close();
        
//Z试方便Q加入自动关闭打开acrord32
        Runtime.getRuntime().exec("\"c:\\Program Files\\Adobe\\Acrobat 7.0\\Reader\\acrord32.exe\" d:/temp.pdf").waitFor();
    }

    
public static void makeDocument(Document document)throws Exception{
        
//table大部份操做类ghtml,下边是一些常用的参数
        
//3是ȝ列数Q也可以同时指定行数和列数new Table(3,4)
        Table table=new Table(3);
        
//table的宽?/span>
        table.setWidth(98);
        
//cMhtml的cellSpaceing
        table.setSpacing(2);
        
//每一列的宽度Q是比例不是固定宽度
        table.setWidths(new int[]{10,30,60});
        
//寚w方式
        table.setAlignment("CENTER");
        
//table是否有边?/span>
        table.setBorder(0);
        
//cell默认是否有边?/span>
        table.setDefaultCellBorder(0);
        
//自动填充I白
        table.setAutoFillEmptyCells(true);
        
int n=10;
        
for(int i=0;i<n;i++){
            makeContent(table);
        }

        
//新的一要加上q句
        document.newPage();
        
for(int i=0;i<n;i++){
            makeContent(table);
        }

        document.add(table);
    }

    
public static void  makeContent(Table table)throws Exception {
        
int len = table.columns();
        
for(int i=0;i<len;i++){
            String testStr 
= "test"+i+"xxxxxxxxxxxxxxxxxxxxxx";
            Cell cell
=new Cell(testStr);
            
//max lines Q设|成1防止换行Q配合cell宽度Q可以实现自动截?/span>
            cell.setMaxLines(1);
            table.addCell(cell);
        }

    }

    
//构造一个自定义的cell
    public static Cell makeCell(int colspan,String align,int maxLines,Font font){
        Cell cell 
= null;
        Paragraph paragraph 
=null;
        
try{
            
//使用自定义字?/span>
            paragraph=new Paragraph("testxxx",font);
            cell
=new Cell(paragraph);
            
//讄colspan,同样的方法可以设|rowspan
            if(colspan >1){
                cell.setColspan(colspan);
            }

            
//讄寚w
            if((align != null&& (!align.equals(""))){
                cell.setHorizontalAlignment(align);
            }

            
//讄maxlines
            cell.setMaxLines(maxLines);
        }
catch(Exception e){
            e.printStackTrace();
        }

        
return cell;
    }

}



dreamstone 2007-01-29 11:55 发表评论
]]>
վ֩ģ壺 | ͷ| ׷| ƽ| | ƽ| ף| | | | | Զ| Խ| | | | | ̩| Į| ̫| Զ| | | | | ״| | Ϫ| | | | | | | ͭ| | ̨| | | | ֦|