论坛首页 Java企业应用论坛

请教有关struts的问题

浏览 6542 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-12-04  
我有一个同事,正在用struts开发程序,有一个问题,解决不了,有那位高手能帮忙解决一下?
1、关于ActionErrors错误显示的问题。我们使用ActionErrors来显示错误,但错误总是显示乱码。页面使用GBK来编码。我们上网查了一些资料,按照他们的解决方案也不好使。我怀疑他们的程序测试了没有。
问题是我们也可以让错误显示正确,但页面就乱码了?!市面上也没有关于ActionErrors写的详细的书。
我们写的临时方法是:造一个类似于ActionErrors的类,继承ArrayList,又造了一个ActionError的bean,中间又一个String的属性,在页面中直接写错误名称,然后写了一个tag,在页面上显示。我们也觉得不符合规范,但是那些号称能解决问题的方案我们都试过了,如改写struts源码等,但都不解决问题。
2、另外又一个关于文件传输的问题。我以前使用的都是FTP协议的。那天看了有些人写的代码,可以用jsp来传输文件,用的是stream流来处理。回头看了struts原文件,也可以实现文件传输,但文件大小不能超过4M。我一直认为不能在web中传输文件,这样会导致IO错误,web解决不了。我原来学web开发的时候书上就说在web中不能使用io文件,这到底是谁错了?
另外,我觉得由于Http协议是一种无状态协议,中间可以断的,包丢了可以重发,但由于文件传输是使用的流文件,中间不能断,后台可能是使用了socket,但是断了怎么处理?这是一个什么样的关系呢?
希望那位大侠解决一下!
   发表时间:2003-12-04  
1、资源文件必须使用Unicode编码,你可以这样来转换

native2ascii -encoding GBK application_tmp.properties application_zh.properties

这样,把所有的ASCII字符都转换为ASCII表示的Unicode编码。这样就好了。记住!,资源文件出非ascii码都需要用native2ascii转换。

2、你提问提的很乱,同时提了好多问题,我不知道该回答你哪个好了。
0 请登录后投票
   发表时间:2003-12-05  
lhyao 写道

另外,我觉得由于Http协议是一种无状态协议,中间可以断的,包丢了可以重发,但由于文件传输是使用的流文件,中间不能断,后台可能是使用了socket,但是断了怎么处理?这是一个什么样的关系呢?
希望那位大侠解决一下!


http的确是一种无状态协议,但并不是说每一次http报文可以中断。报文被分包和如何组织发送和重发都是下层协议解决的问题。 文件传输使用的是流的方式,但并不是中间不能断 的,不然那些支持断点下载的软件是怎么做出来的啊? 我曾经看到过用java实现的断点续传的程序,你可以找找看。其实应该也不难的。
0 请登录后投票
   发表时间:2003-12-08  
多谢二位的解答,struts错误显示的问题解决了,在这里表示感谢!

Robbin说我问的太多了,不好意思,我的语言表达能力不强,有点词不达意,我再解释一下。
关于Java的问题,大家都是看有关方面的书籍,很少有人达到设计过JVM一级的水平。感觉java的原理和程序大家一般都能看懂,学起来比C++容易多了,所以一般对用的东西的原理都有了解。我在学java的时候对文件传输就用过一个socket,别的东西不知道。起socket的时候要用到端口,所以我觉得在http中没有办法用socket。前几天看到在 jsp中可以上传文件,一下就懵住了,因为以前我一直认为传输文件只能用ftp协议,或者用微软的文件服务器,或者用ibm的lotus notes。别的方法我一直认为不安全,也不正规。因为文件传输用的底层的东西太多,在web中实现起来麻烦的很,也需要和文件服务器绑定,而且要有专门的文件服务器。我以前认为用java解决文件传输的办法就是使用JMS,安全、线程等都解决了,不用自己考虑。但我现在接的项目是个小项目,钱很少,根本不可能按照我所想的来作。我上网查了一下,找到了关于jsp文件传输的一些文章。但看了以后一直认为不安全,而且看了struts中的文件传输的类之后,其中写的也非常简单。我的疑问是到底这样用安全不安全?是否能成为标准呢?如果可以,能否把原理讲一讲?
我没有别的目的,大家交流一下,都能提高水平,只不过要麻烦一下robbin和各位大侠了。
0 请登录后投票
   发表时间:2003-12-08  
没有看过struts源代码。我原来用过一个oreilly的文件上传的包。而你说struts的文件上传我估计也是用的是common-fileupload包。

我原来使用的那个oreilly包其实也就是通过HTTP POST来实现文件上传的。服务器端确实使用流的方式来接收,但是是ServletInputStream,是基于HttpServletRequest的:

InputStream in = request.getInputStream();

因此还是HTTP协议的内容,不是TCP层的Socket编程。不要因为它用了一个Stream,你就以为是Socket层了,本质上还是HTTP POST。
0 请登录后投票
   发表时间:2003-12-08  
struts的文件传输使用的就是标准的http文件传输方式, 并不是他的特有发明, 用asp等等都可以实现.  你在使用邮件的附件时,就是这种方式做的.

还有我不知道你的安全性到底是什么意思, 是文件传输的完整性, 还是文件传输过程中会不会有人窃取.

如果只是文件传输的完整性, 那么你不用考虑, 一般除非操作失误都是完整的.
0 请登录后投票
   发表时间:2003-12-08  
谢谢二位!
0 请登录后投票
   发表时间:2003-12-08  
还要请教一下关于struts中ActionMapping的问题。

我发现在《JSP Web 编程指南》一书中关于mapping的使用有两种:
1、return mapping.findForward("success");

2、return new ActionForward(mapping.getInput());

前一种是成功之后的转向,要在struts-config.xml文件中指定,这个我能理解。后一种是返回到原输入页,但是是否一定需要在struts-config.xml文件中指定input=""?不指定的话能否自动转到原输入页?
0 请登录后投票
   发表时间:2003-12-08  
应该是要指定的! 不指定肯定是不能自动转到原输入页的.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics