Buf*_*ort 2 java gwt tomcat servlets
我几天都在努力解决我的GWT应用程序和从应用程序调用的servlet的问题.
我实际上正在为我的研究所编写一个带有Java和GWT的Web应用程序.目标是在飞行活动之后生成包含来自用户输入的元数据的XML文件.在那之前,我总是用Python或Matlab编写我的应用程序,两个月前我开始使用Java和GWT(允许用户在线访问这些工具).
Web应用程序由客户端(GUI)和带有servlet的服务器端组成,允许用户下载生成的XML文件,打印pdf报告或上载XML文件(再次使用它).不是很复杂.
使用Eclipse 4.4和嵌入式Jetty服务器,完全没问题!它非常好,XML文件格式良好,下载和上传功能都可以.然后我想在我的笔记本电脑上使用Tomcat服务器(Apache Tomcat 7,Ubuntu 14.04)测试它,我部署了.war(已成功解压缩Tomcat),我设法从firefox访问web应用程序.但是当我尝试访问servlet(上传一个xml文件)时,返回的anwser是"HTTP ERROR 404.问题访问/上传.原因:NOT_FOUND"我试图找到一个使用谷歌的解决方案,我发现在相同的主题,但所有发布的解决方案在我的情况下都不起作用......
以下是调用servlet的主要代码部分:
final FileUpload myFileUpload = new FileUpload();
myFileUpload.setName("uploadFormElement");
myFileUpload.getElement().setId("uploadFormElement");
myFileUpload.getElement().setId("myFile");
panel.add(myFileUpload);
final FormPanel myUploadForm = new FormPanel();
myUploadForm.setAction("/upload");
myUploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
myUploadForm.setMethod(FormPanel.METHOD_POST);
Run Code Online (Sandbox Code Playgroud)
这是我的servlet代码:
package com.eufar.asmm.server;
import java.io.IOException;
import java.util.List;
import java.util.Iterator;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@SuppressWarnings("hiding")
public class UploadFunction<FileItem> extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
@SuppressWarnings("unused")
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()){
Object obj = iter.next();
if(obj == null) continue;
org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem)obj;
if(item.isFormField()){
String name = item.getName();
String value = "";
if(name.compareTo("textBoxFormElement")==0){
value = item.getString();
}
else {
value = item.getString();
}
response.getWriter().write(name + "=" + value + "\n");
}
else {
byte[] fileContents = item.get();
String message = new String(fileContents);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.getWriter().write(message);
}
}
} catch (Exception ex) {
response.getWriter().write("ERROR:" + ex.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<!-- Servlets -->
<servlet>
<servlet-name>DownloadFunction</servlet-name>
<servlet-class>com.eufar.asmm.server.DownloadFunction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadFunction</servlet-name>
<url-pattern>DownloadFunction</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UploadFunction</servlet-name>
<servlet-class>com.eufar.asmm.server.UploadFunction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadFunction</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>Asmm_eufar.html</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)
有关信息,WEB-INF目录中的所有类似乎都可以,所有需要的库...我使用Eclipse进行了快速测试:生成defaut GWT Web应用程序("输入您的名字")并将其部署在Tomcat的.使用Eclipse,没有问题,但Tomcat找不到默认的servlet ...
所以,最后,我不能说我的代码是否绝对正常(我是初学者),我不能说问题是否是错误的Tomcat配置(我是研究员而不是服务器管理员).
我希望你能帮助我.
亲切的问候,
奥利维尔
编辑:我可能忘了添加一些关于我如何将我的应用程序添加到Tomcat以及如何启动它的详细信息.
使用Eclipse,我编译代码,然后将"war"目录中包含的所有文件和目录移动到名为"MyApp"的目录(示例).然后我将此目录压缩为.zip文件并将".zip"更改为".war".然后将此.war文件复制/过去到Tomcat的"webapps"目录.Tomcat处理.war文件,我获得了一个目录calle"MyApp",其中我有另一个包含我所有文件的"MyApp"目录.最后,我启动Firefox并使用以下Url访问我的应用程序:http:// localhost:8080/MyApp/MyApp/Myapp.html
根据Thomas提供的建议,我应该使用Url http:// localhost:8080/MyApp/MyApp/upload访问上传功能.但返回的错误是:"状态HTTP 404. MyApp/MyApp/upload请求的资源不可用(在我的计算机上用法语).它与我上面发布的代码有点不同...
一个可能的区别是webapp的上下文路径.在开发中,Web应用程序部署在root(contextPath=/),而在Tomcat中,它默认使用war文件的名称(contextPath=/mywebapp/).
你的表单总是发布到http://<server>:<port>/upload但是在Tomcat你的servlet是http://<server>:<port>/mywebapp/upload.
你会想要使用:
myUploadForm.setAction(GWT.getHostPageBaseUrl() + "/upload");
Run Code Online (Sandbox Code Playgroud)
或者可能
myUploadForm.setAction("upload");
Run Code Online (Sandbox Code Playgroud)
(没有前导斜线)
| 归档时间: |
|
| 查看次数: |
1359 次 |
| 最近记录: |