首先,我在Google和SO上搜索有关该主题的小时,但没有发现任何帮助。 这可能是原因,我错了,或者我监督了解决方案。通过GWT进行XML文件上传和解析
我有一个使用GWT和Appengine的应用程序。 XML文件应该上传并由SAX解析器解析,并返回一个ArrayList,并将条目返回给页面。
对于本地测试,我删除了App的Appengine部分。 所以我有一个GWT安装程序,commons-io & commons-fileupload。
到目前为止,我创建了我的入口点和用于处理文件上传的Servlet。可以返回XML文件的字符串表示形式。但我想通过解析从XML文件中提取信息并将其显示在我的FlexTable中。所以我想用XML文件的元素创建一个ArrayList并将其返回到我的入口点类。
入口点:
public class XMLParser implements EntryPoint {
private static final String UPLOAD_ACTION_URL = GWT.getModuleBaseURL() + "upload";
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger("XMLParserLogger");
private VerticalPanel mainPanel = new VerticalPanel();
private FlexTable articleFlexTable = new FlexTable();
private FileUpload fileUpload = new FileUpload();
private FormPanel form = new FormPanel();
/**
* This is the entry point method.
*/
public void onModuleLoad() {
fileUpload.setName("uploadFormElement");
form.setAction(UPLOAD_ACTION_URL);
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
form.add(fileUpload);
//Table for Articles
articleFlexTable.setText(0, 0, "ID");
articleFlexTable.setText(0, 1, "Amount");
articleFlexTable.setText(0, 2, "Start Amount");
articleFlexTable.setText(0, 3, "PCT");
articleFlexTable.setText(0, 4, "Price");
articleFlexTable.setText(0, 5, "Stock Value");
mainPanel.add(form);
mainPanel.add(new Button("Submit", new ClickHandler() {
public void onClick(ClickEvent event) {
form.submit();
}
}));
mainPanel.add(articleFlexTable);
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
String xml = event.getResults();
logger.info(xml);
Window.alert(xml);
}
});
RootPanel.get("parser").add(mainPanel);
}
}
的Servlet:
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = -5897221701350776117L;
private static final Logger log = Logger.getLogger(FileUploadServlet.class
.getName());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// process only multipart requests
if (ServletFileUpload.isMultipartContent(req)) {
ServletInputStream sis = req.getInputStream();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(sis));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
bufferedReader.close();
String xml = stringBuilder.toString();
log.info(xml);
resp.setContentType("text/html");
resp.setStatus(HttpServletResponse.SC_CREATED);
resp.getWriter().print(xml);
resp.flushBuffer();
} else {
resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE,
"Request contents type is not supported by the servlet.");
}
}
的web.xml:
<!-- Servlets -->
<context-param>
<!-- max size of the upload request -->
<param-name>maxSize</param-name>
<param-value>3145728</param-value>
</context-param>
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>net.mybecks.gwt.server.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/xmlparser/upload</url-pattern>
</servlet-mapping>
我试图使用像gwtupload,upload4gwt库,但他们不解决我的问题并没有很好的记录。
所以我完全想知道我是如何上传一个xml文件并返回List作为回调。通过SAX解析文件我已经知道了。
BR, mybecks
所以,你想要什么知道的是创造
ArrayList
?如何解析XML?如何从服务器发送ArrayList到入口点?或者你的代码出于某种原因不起作用? – jusio 2012-02-02 15:59:05好吧,我想知道我是如何激动地将xml文件上传到服务器并返回列表。如何解析这个文件我已经知道了。我将它添加到问题 – mybecks 2012-02-02 16:10:45