随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0
数据加载中……

我的评论

共7页: 上一页 1 2 3 4 5 6 7 下一页 
在本文还未涉及到客户端验证,在服务端也可做简单验证。在客户端验证并不保险。
@葛坤进
你说的服务端处理是什么意思,是指调用execute方法,还是指处理请求参数。struts1.x的调用过程是这样的。

首先struts1.x会通过actionform对象装载客户端的请求参数,然后会调用actionform类的validate方法,最后会调用Action类的execute方法,这个过程无需争辩,也不需要看struts1.x源代码,谁做都会这么做的。 至于简单验证和复杂验证,只是逻辑上区分一下。就算是客户端的javascript,同样可以通过ajax进行与数据库相关的验证。当然,非要在validate里进行数据库验证也没有什么。不过一般ActionForm类里可直接访问请求参数,因此,一般用于直接验证请求参数的值是否合法。
@葛坤进
DAO?这篇文章只是演示如何使用Struts1.x,还没上升到层次的概念。一个Helloworld是不需要使用任何设计模式的,那与本文的主旨不符。否则就成唯模式论了!
但愿本文能给想学习struts1.x的朋友带来收获!_^_
@aaa
你这异常是建立mystruts.actionform.ProductForm错误,你将ProductForm类放在哪了?
re: url中jsessionid引起的一个问题 银河使者 2009-02-25 14:27  
当客户端不支持cookie是,就会使用url来传递sessionid,否则会直接用cookie来传递sessionid。
re: 银河系列原创教程 银河使者 2009-02-25 09:14  
@膘叔
试了cyberarticle,总体来说不错,不过不知怎么着,把我的空格都变成?了,晕。
@test
你是用myeclipse开发的吗?那不太可能,struts1.x是否可成功发布?
@test
原因是你没引用LinkedList,在程序前面加上import java.util.*;

我一般是手写的,MyEclipse或jbuilder也许能自动生成services.xml,但我没用过。
这些类应该放在WEB-INF\lib目录或WEB-INF\classes目录中,如果要在内部使用,直接调用就可以了,如果在外部使用(如发布成WebService),建议你使用spring来处理,这样只要在aar文件中放一个services.xml就可以了,直接可以将spring的装配bean发布成webservice。
你可以参考我的文章:
http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/02/13/254499.html
@zhuyongjp
被调用的类需要放在axis2目录中的WEB-INF\lib目录或WEB-INF\classes目录中,这样就可以调用了
哈哈,struts 1.x快发完了,完事统一做pdf
@zhy
是的,也可以是web根目录。

<forward name="newProduct" path="/mystruts/newProduct.jsp" /> 这么不行吗,<forward>没有子元素。这么也可以的。这是xml的写法,与struts没关系。
如果用户修改密码或删除用户,可以在修改或删除密码后将session里的相关内容删除,这样客户端必须要重新登录才能继续使用了。
@Alexwan
如果用户修改密码,可以在修改密码后将session里的相关内容删除,这样客户端必须要重新登录才能继续使用了。
第二种方法可以使用Web Service Session,我不太清楚CXF如何处理session,但写了几篇关于axis2处理http session的方法,
http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/01/26/252564.html

http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/02/03/253154.html
@java
学哪个版本可由个人自己决定,现在有很多公司还有使用Struts1.x,当然,也可以从Struts 2.x开始学。关于Struts2.x,可以参阅我写的Struts2.x教程:http://www.blogjava.net/nokiaguy/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2008/04/15/193229.html
re: 归并排序(merge sort)算法实现 银河使者 2009-02-15 22:47  
@刚哥
你的那个是C++的算法,基本思路类型,都是数据结构讲的,哈哈!!这些数据结构书上都有,看看就知道了!
re: 归并排序(merge sort)算法实现 银河使者 2009-02-15 22:46  
@刚哥
这算法是很多年前写的,现在看看写成用变量定义数组了。估计是用Java用多了,不小心写成Java格式的了。以前这些算法好象都调试过,可能是这个没测试过。可能当初是写的示意代码。基本上都忘了细节了。^_^
不需要参数就是参数为0,用

    <operation name="getPeopleInfo " mep="http://www.w3.org/2006/01/wsdl/in-out">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </operation>
啊,我很久以前写的东西,一直没发,现在发上了。现在仍然有很多人在使用struts1.x。
@wjywilliam
没错,可以通过invocation.getAction()获得Action对象的属性,但并不建议这么做,使用ValueStack接口的setValue和findValue方法更容易实现设置和获得Action对象的属性值的工作。
re: Struts2教程1:第一个Struts2程序 银河使者 2009-02-11 22:32  
@123
运行不了可能是配置错了,把错误信息和配置方法贴出来看看。Java的东西刚开始是谁都会为配置头痛,慢慢就好了。
re: Struts2教程7:上传任意多个文件 银河使者 2009-02-11 16:50  
@这是一个好教程
这两个jar可以到www.apache.org上的commons子项目上下载。这两个文件是必须的。
re: 银河系列原创教程 银河使者 2009-02-10 19:03  
可惜啊,现在blogjava还未提供做pdf的功能,有空放到我在javaeye的blog里做一下,哈哈
@1121
放到一起是在开发阶段,发布了,就已经放到jar包中了。
@yapituy
这个我也试了,但客户端也是未补获AxisFault异常,我用java、c#和delphi试的客户端,都未补获AxisFault异常,不知axis2内部是如何处理的,也许是有bug,也许是服务端程序的设置问题,最终还没解决,还是就是超时的问题,可能是axis2本身的问题。
@jiangminjie
也可以,这种方法
用到其他的再加上,但makefile这些已经适合大多数程序了。
re: Struts2.1.6测试小记 银河使者 2009-02-09 13:30  
@zero
不用struts2的ajax也行,自己用其他的ajax framework,绕过struts 2。
struts 2分为两部分,后端的拦截器,action等,以及前台的struts 2标签,这些标签并不是必须的,也可直接用html表单。struts 2的标签有时排版有些别扭,要想排好,还得了解struts 2中的模板。而且这些不能在象dreamweaver中设计。
re: Struts2.1.6测试小记 银河使者 2009-02-09 12:43  
如果用ajax,可以用其他的,如jquery,struts 2本身的ajax功能不太好用,也比较复杂。不知道struts 2中的ajax是自己做的,还是集成的。
re: Struts2.1.6测试小记[未登录] 银河使者 2009-02-09 11:59  
这以前试的struts2.0.11有的只有ie里好使,firefox里不好使啊。ajax要实现真正的跨浏览器是很困难的
应该是有的,就象Spring-struts插件一样。在applicationContext.xml中有一些装配bean可以在一装载applicationContext.xml文件时就被自动装载。不过这样的bean我还没有实现过,只要在这些bean中可获得application,应该是可行的。还有就是可以在action中检查application是否存在该bean,如果不存在,就获得bean,并保存。也可以在拦截器中做这样的事,这样就不耦合了。
@Hadis
你的意思是这个Bean通过DAO获得,而这个DAO对象需要使用Spring获得。并想在程序启动时(这是指程序第一次运行的时候吧)通过Spring获得该DAO对象,并通过DAO对象再从数据库的某个表映射成一个Bean,然后将这个Bean对象保存在application。如果上这个意思,实现的方法很多。
如果想让程序第一次运行之前就完成这个动作,可以使用Servlet监听器,监听域对象(application对象,实际上就是ServletContext对象)的创建和销毁,要想监听servletContext对象,需要实现ServletContextListener接口,在ServletContextListener接口的contextInitialized方法中通过Spring获得DAO,再获得Bean,这个方法在ServletContext对象创建之后立刻被调用。关于监听器的细节请参阅相关的文档吧!!!
re: Struts2.1.6测试小记 银河使者 2009-02-07 22:24  
@zero
试的哪个ajax特性
另外会话是可以持久化的,但不知axis2是如何处理的
不知你的用户有多少,10000,还是20000,或更多,一个会话只占很小的内存。当然,除了使用会话解决你的问题外,还有另外一个方法可以达到同样的效果。使用会话的目的是为了进行权限验证,你可以为每一个web service方法都加上一个用户名和密码,可以将这些放到类中进行传递,这样就不需要会话了,每次调用方法程序都从数据库中验证,你也可以定义一个静态的Map对象在服务端来保存经常登录的用户名和密码,这样当这些用户调用该方法时就不用再到数据库中去验证了。如博客园和blogjava所使用的msn writer写blog,就是使用的MetaWebBlog API,这个API虽然不是Web Service(只是一个远程方法调用),但使用的就是我说的第二种方法,每一方法都有一个用户名和密码。你看看这些方法就知道了:http://www.cnblogs.com/nokiaguy/services/metaweblog.aspx
这是application级别的,只有服务器重启或重新发布应用程序会话才会消失。而其他级别的我试了一下,并不能跨服务共享会话。
re: Struts2.1.6测试小记 银河使者 2009-02-06 18:20  
@隔叶黄莺
是的,如果通过配置文件来实现多个方法,可以通过url的方式来实现(使用!),也可以在<action>元素中使用method属性来配置。
但使用注释还没有试过是否可以使用这种方式。
re: HttpURLConnection上传文件(图片)小试 银河使者 2009-02-06 14:37  
@々上善若水々
就是传送二进制(字节流),至于字节流里是什么,完全由用户自己定义,当然可以是文件夹里的内容,而且都自己实现还是个好处,可以实现断点上传功能。甚至是多线程上传。在服务端利用Servlet就可以实现。
re: HttpURLConnection上传文件(图片)小试 银河使者 2009-02-06 13:27  
要是在客户端直接用java编写程序上传文件,直接用tcp传二进制流就可以(当然,这要服务端也是自己实现),模拟http上传效率有些低。
@zb
你用wsdl2java试一下就知道了,wsdl2java的用法见《WebService大讲堂之Axis2(1):用POJO实现0配置的WebService》

如果是字节,wsdl2java会使用DataHandler类型处理,详见我的第四篇关于axis2的文章:

http://www.blogjava.net/nokiaguy/archive/2009/02/archive/2009/01/archive/2009/01/22/252305.html
@robin
data.DataForm这个类在使用wsdl2java命令生成客户端的stub类时已自动生成了。我们只要使用就可以了,在内部,axis2会将data.DataForm转换成基于soap协议的请求和响应消息。这个我们一般不用去管他。就直接将data.DataForm当成本地的类使用即可。不过要注意,不能自己在本地建立个与data.DataForm的内容一样的类,stub只能使用自己生成的类。你可以看一下stub代码。


对于本文并未直接使用wsdl2java生成stub代码,是使用的RPC调用方式,对于这种方式,只要直接将服务端的data.DataForm复制给客户端即可。客户端的data.DataForm类就是服务端的data.DataForm类,只要将data.DataForm类同客户端一定发布即可。

你如果用过c#就会看到也是自动生成了相应的data.DataForm类。
re: 令我头疼的JSP乱码问题 银河使者 2009-02-03 14:50  
还有就是URLEncoding=是处理服务端接收客户数据时的乱码的,这与页面显示乱码无关。
re: 令我头疼的JSP乱码问题 银河使者 2009-02-03 14:49  
AL32UTF8和UTF8类似,只是高级的UTF-8,这不用转换

你先看看页面上编码的设置是否为UTF-8,还有就是看一下页面的源代码,用记事本打开,看盾能否正常显示。从数据库中取出的是UTF-8编码的字符,如果页面出现乱码,有可能是使用了其他的编码方式进行了解码。还是有就是看看你的web程序是不是什么地方用了GBK处理了。在发送到客户端之前就成乱码了。如response.setCharacter(...),或使用其他的方法处理的。
@Sam
是的,感谢提醒,已经改过来了。
re: 感谢死亡 银河使者 2009-02-01 09:42  
以前看过一个美剧“星际之门:亚特兰蒂斯”,剧中的亚特兰蒂斯人拥有高度的文明。在他们的时代,正在研究一种可以使人永远不死的方法,这种方法就是使生命脱离脆弱的肉体,相当于灵魂出壳,亚特兰蒂斯人管这种技术叫“升天”,使生命以纯能量的形式存在。但这种技术并不稳定,有时会失败,使人永远消失。 虽然这是科幻,不过科学总是在发展,未来总是充满不确定性。也许处在遥远未来的人类会成为这剧中的亚特兰蒂斯人,完成亚特兰蒂斯人未完成的事业。说到这,突然想起安徒生位于丹麦首都哥本哈根的墓志铭上写的那样“虽然我的肉体死亡了,但我的灵魂将得到永生”。
最后祝人类一路走好,happy new year!
re: JDBC查询动态封装 银河使者 2009-01-31 21:05  
@ cccp21
在使用ResultSet时当然不能关闭Connection,不知道你为什么会在使用ResultSet之间关闭Connection,这个Connection是共享的?还是用的什么其他方式。为了提高效率,可以使用连接池,一般每个Connection都是线程独享的,用完了再还给连接池。以上只针对Web应用,如果是桌面引用,建议使用Web Service方式。

如果想关闭ResultSet方便些,可以使用jdbc+spring的方式,也就是jdbcTemplate,这个很方便。基本原理是从连接池中获得一个Connection,执行一条或多条SQL语句,返回结果(这个结果也是封装的,和你的方法差不多,但考虑了异常处理),在返回结果之前,Connection就已经关闭了,关闭的动作是由Spring自动完成的。 而对于用户来说,只是调用了JdbcTemplate的一个方法来获得查询结果。再也不用考虑什么Connection、ResultSet,另人讨厌。不过对于小程序,用什么都行,我还是喜欢直接用jdbc,对于大一点的程序,尤其对Web程序,个人认为用jdbc +Spring比较好,如果想更高级一些,还跨数据库,可以使用hibernate+spring的方式。
re: 跳出多层循环的简单方法(Java版) 银河使者 2009-01-30 19:33  
@Robin's Java World
我试了,的确不可以,就象java的const关键字,也不能使用,虽然是保留字。如果你有可以的例子,贴了来,让我也学习一下。
re: 跳出多层循环的简单方法(Java版) 银河使者 2009-01-30 19:27  
象下面的程序可以吗?
String[] arr = new String[]{"a", "b", "c"};
for(String s: arr)
{
for(String ss: arr)
{
for(String sss: arr)
{
System.out.print(sss);
goto labelA;
}
}
}
labelA:

不行啊,
共7页: 上一页 1 2 3 4 5 6 7 下一页