Java:上传文件并获取文件的字符串(内容)
嗨,我有GWT客户端与标准服务器端Servlet。
- 我可以从GWT客户端上传文件,并在服务器端读取它的内容
- 我可以将它作为String发送回客户端
但
我有动作的GWT FormPanel (myModule +“import”)。 FormPanel从servlet调用POST 。 然后浏览器将我重定向到myurl / import,这样我就可以看到上传文件的内容。
这不是我想要的 。 我只想把我的弦回来。 我将submitCompleteHandler添加到我的FormPanel,但它没有记录任何结果。
我注意到servlet有方法这样的setContentType
所以我尝试了text / html,text / plain …我不知道应该有什么…
用一句话来说,我想从servlet向客户端发送String,而不需要浏览器将其重定向到其他地方。 可能吗?
由于您要提交表单,因此您可以使用浏览器更改导航。 为了使它按照您希望的方式工作,您必须使用ajax发送文件。 对于GWT,有一个GWTUpload库可以让你这样做。
如果浏览器重定向您,那是因为您为FormPanel提供了“目标”。 默认情况下,它在隐藏的iframe(又名“ajax upload”)中提交。
正如在javadoc中所说的 ,如果你想要可靠地调用onSubmitComplete
,你必须在你的servlet中设置setContentType("text/html")
。
onSubmitComplete
的结果是返回的HTML的body
innerHTML
因此在发送带有<
或&
值时必须非常小心。 让他们回来的唯一可靠方法是在服务器端逃避他们,并在客户端取消他们。 您可以使用自己的转义机制,也可以使用<
和&
。 在后一种情况下,对于客户端的unescape,你要么使用String#replace,要么创建一个HTML元素,用你得到的字符串设置它的innerHTML,然后得到它的innerText:
public String htmlUnescape(String htmlEscaped) { Element tmp = Document.get().createDivElement(); tmp.setInnerHTML(htmlEscaped); return tmp.getInnerText(); }
在服务器端,您将使用:
escaped = content.replace("&", "&").replace("<", "<")
(如果你不希望<
s成为<
这里的顺序很重要,那么,替换<
和&
就足够了, >
和"
这里不会引起任何问题)
但是,在您的情况下,首先要确保文件的内容是“文本”而不是“二进制”,因为返回它是没有意义的,因为String可能会导致问题,具体取决于您在客户端使用该值的方式。
- 鼠标hover在GWT 1.7中的FlexTable监听器?
- 如何从GWT的序列化策略中删除实现类型?
- GWT Maven Eclipse插件 – 由于重复类而导致编译失败
- GWT / GAE – 不包括.symbolMap资源文件
- gwt maven项目风味:WebAppCreator或gwt-maven-plugin-Archetype – 使用什么
- 如何让GWT编译多个模块?
- 是否可以使用IntelliJ 9 Community Edition在REMOTE服务器上调试GWT客户端代码?
- 当序列化策略更改时,GWT客户端不会收到IncompatibleRemoteServiceException
- GWT JPA – 响应无法反序列化