【问题标题】:Can't deploy maven restful Upload file无法部署maven restful上传文件
【发布时间】:2017-10-28 11:57:44
【问题描述】:
package Restful.Demo.UploadFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;

@Path("UploadFile")
public class Upload {

    @GET
    @Path("/upload1")
    public String hello()
    {
        return "hello";
    }

    @POST 
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)// use to upload file
    public Response UploadFile(@FormDataParam("file") InputStream inputfile,
                              @FormDataParam("file") FormDataContentDisposition filemetadetail) 
    {

            int statuscode=200;
            String fileLocation="e://Restful/"+filemetadetail.getFileName();
            writeFile(inputfile, fileLocation);
            String output="File uploaded to "+fileLocation;
            return Response.status(statuscode).entity(output).build(); 

    }
    /*
     * @param inputFile the file you want to upload
     * @param fileLocation where  file will be uploaded 
     * @return 0 - success 
     * @throws IOException
     */
    private void writeFile(InputStream inputFile,String fileLocation) 
    {
        OutputStream output=null;
        try
        {
            output=new FileOutputStream(new File(fileLocation));
            int read=0;
            byte[] bytes=new byte[1024];
            //read 
            while((read=inputFile.read(bytes))!=-1)
                output.write(bytes, 0, read);
            output.flush();
            output.close();
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }

    }
}

你好。 我是 Restful 网络服务器的彼得和新手。 以上是我使用 restful api 上传文件的代码 - Jersey 在 Glassfish 服务器上运行 我在尝试将战争发布到 glassfish 服务器时遇到此错误

java.lang.Exception: deploy is failed=Application with name [UploadFile] 未部署在 oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishDeployedDirectory(GlassFishServerBehaviour.java:603) 在 oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishModuleForGlassFishV3(GlassFishServerBehaviour.java:830) 在 oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishModule(GlassFishServerBehaviour.java:790) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModule(ServerBehaviourDelegate.java:1091) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModules(ServerBehaviourDelegate.java:1183) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:987) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:774) 在 org.eclipse.wst.server.core.internal.Server.publishImpl(Server.java:3182) 在 org.eclipse.wst.server.core.internal.Server$PublishJob.run(Server.java:355) 在 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

谁能帮我解决这个问题?

【问题讨论】:

  • 您提供的信息太少,无法为您提供帮助。发布web.xml,什么版本的 Jersey、Servlet、Glassfish,...,你正在运行。
  • 我没有使用 servlet 。只是一个带有 post 表单的 HTML 文件。
  • glassfish 4.1.1 。球衣 2.26
  • 编辑问题并发布web.xml的相关内容。
  • 对不起。我的项目中没有 web.xml。只有 pom.xml

标签: java rest maven jersey glassfish


【解决方案1】:

为了使您的资源类能够正常工作,您需要做一些事情。

  1. 您可以提供Application 子类或web.xml 部署描述符。
  2. 为了能够使用多部分模块,您需要在服务器代码上启用此功能。这是documentation page的摘录:

9.3.1.2。注册

在您可以在客户端/服务器代码中使用 jersey-media-multipart 模块的功能之前,您需要注册 MultiPartFeature。

也就是说,我在示例中添加了以下 web.xml,我可以在 Glassfish 4 上部署应用程序:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<display-name>Archetype Created Web Application</display-name>

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <!-- please see modified package name -->
            <param-value>restful.demo.uploadfile</param-value> 
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>

        <!-- you can choose your favorite name here!! -->
        <url-pattern>/rest/*</url-pattern>    
    </servlet-mapping>

</web-app>

注意事项:

  • 查看上面的注释部分并尝试相应地修改您的代码。

  • 您应该了解 Java 中的一些命名约定(有关详细信息,请参阅this 文档):

    1. 在 Java 中,包名使用小写字母
    2. 方法名称以小写字母开头

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多