Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GWT web应用程序中找不到Servlet_Java_Tomcat_Servlets_Gwt - Fatal编程技术网

Java 在GWT web应用程序中找不到Servlet

Java 在GWT web应用程序中找不到Servlet,java,tomcat,servlets,gwt,Java,Tomcat,Servlets,Gwt,几天以来,我一直在为我的GWT应用程序和从该应用程序调用的servlet的问题而挣扎 实际上,我正在用Java和GWT为我的研究所编写一个web应用程序。目标是在飞行活动结束后生成一个包含用户输入元数据的XML文件。在此之前,我总是用Python或Matlab编写应用程序,两个月前我开始使用Java和GWT(允许用户在线访问这些工具) web应用程序由客户端(GUI)和服务器端组成,服务器端带有servlet,允许用户下载生成的XML文件、打印pdf报告或上载XML文件(再次使用)。不太复杂 使

几天以来,我一直在为我的GWT应用程序和从该应用程序调用的servlet的问题而挣扎

实际上,我正在用Java和GWT为我的研究所编写一个web应用程序。目标是在飞行活动结束后生成一个包含用户输入元数据的XML文件。在此之前,我总是用Python或Matlab编写应用程序,两个月前我开始使用Java和GWT(允许用户在线访问这些工具)

web应用程序由客户端(GUI)和服务器端组成,服务器端带有servlet,允许用户下载生成的XML文件、打印pdf报告或上载XML文件(再次使用)。不太复杂

使用Eclipse4.4和嵌入式Jetty服务器,完全没有问题!这真的很好,XML文件格式很好,下载和上传功能都很好。 然后我想用Tomcat服务器(ApacheTomcat 7,用于Ubuntu 14.04)在我的笔记本电脑上测试它,我部署了.war(Tomcat已成功解压),并设法从firefox访问了这个web应用程序。 但是,当我尝试访问servlet(上载xml文件)时,返回的anwser是“HTTP错误404。访问/上载时出现问题。原因:未找到” 我试图用谷歌找到一个解决方案,我发现几乎没有关于同一主题的帖子,但所有帖子的解决方案在我的案例中都不起作用

以下是调用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);
以下是我的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());
    }
}   
}
package com.eufar.asmm.server;
导入java.io.IOException;
导入java.util.List;
导入java.util.Iterator;
导入javax.servlet.servlet;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.FileItemFactory;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
@抑制警告(“隐藏”)
公共类UploadFunction扩展HttpServlet实现Servlet{
私有静态最终长serialVersionUID=1L;
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
@抑制警告(“未使用”)
布尔值isMultipart=ServletFileUpload.isMultipartContent(请求);
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
试一试{
列表项=upload.parseRequest(请求);
迭代器iter=items.Iterator();
while(iter.hasNext()){
Object obj=iter.next();
如果(obj==null)继续;
org.apache.commons.fileupload.FileItem=(org.apache.commons.fileupload.FileItem)obj;
if(item.isFormField()){
字符串名称=item.getName();
字符串值=”;
if(name.compareTo(“textBoxFormElement”)==0){
value=item.getString();
} 
否则{
value=item.getString();
}
response.getWriter().write(name+“=”+value+“\n”);
} 
否则{
byte[]fileContents=item.get();
字符串消息=新字符串(文件内容);
响应。setCharacterEncoding(“UTF-8”);
response.setContentType(“text/html”);
response.getWriter().write(消息);
}
}          
}捕获(例外情况除外){
response.getWriter().write(“错误:+ex.getMessage());
}
}   
}
这是我的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>

下载功能
com.eufar.asmm.server.DownloadFunction
下载功能
下载功能
上传功能
com.eufar.asmm.server.UploadFunction
上传功能
/上传
Asmm_eufar.html
关于信息,WEB-INF目录中的所有类、所有需要的库似乎都正常。。。 我用Eclipse做了一个快速测试:生成defaut GWT web应用(“输入您的名字”)并将其部署到Tomcat上。对于Eclipse,没有问题,但是Tomcat找不到默认的servlet

因此,最后,我不能说我的代码是否绝对正确(我是初学者),也不能说问题是否可能是错误的Tomcat配置(我是研究人员,而不是服务器管理员)

我希望你能帮助我

亲切问候,

奥利维尔

编辑:我可能忘了添加一些关于如何将我的应用程序添加到Tomcat以及如何启动它的详细信息

使用Eclipse,我编译代码,然后将“war”目录中包含的所有文件和目录移动到名为“MyApp”的目录中(示例)。然后我将这个目录压缩成一个.zip文件,并将“.zip”改为“.war”。然后将该.war文件复制/通过到Tomcat的“webapps”目录。Tomcat处理.war文件,我得到一个名为“MyApp”的目录,其中我有另一个包含我所有文件的“MyApp”目录。最后,我启动Firefox并使用以下Url访问我的应用程序:


根据Thomas给出的建议,我应该使用Url访问上传功能。但是返回的错误是:“State HTTP 404.MyApp/MyApp/upload请求的资源不可用(在我的计算机上用法语)。它与我上面发布的代码有一点不同…

一个可能的区别是webapp的上下文路径。在dev中,web app部署在根目录下(
contextPath=/
)而在Tomcat中,它默认使用war文件的名称(
contextPath=/mywebapp/

您的表单总是发布到
http://:/upload
,但在Tomcat中,您的servlet位于
http://:/mywebapp/upload

您将要使用:

myUploadForm.setAction(GWT.getHostPageBaseUrl() + "/upload");
或pos
myUploadForm.setAction("upload");