Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 尝试创建一个web服务来上载带有嵌入式Jetty的文件_Java_Maven_File Upload_Jersey_Embedded Jetty - Fatal编程技术网

Java 尝试创建一个web服务来上载带有嵌入式Jetty的文件

Java 尝试创建一个web服务来上载带有嵌入式Jetty的文件,java,maven,file-upload,jersey,embedded-jetty,Java,Maven,File Upload,Jersey,Embedded Jetty,我正在尝试使用Maven创建一个web服务。我使用了DarchetypeArtifactId=maven原型quickstart,并在main类上创建了jetty的实例,它可以正常工作 package com.rest.test; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.Serv

我正在尝试使用Maven创建一个web服务。我使用了DarchetypeArtifactId=maven原型quickstart,并在main类上创建了jetty的实例,它可以正常工作

package com.rest.test;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class App {
    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(8080);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
             org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        // Tells the Jersey Servlet which REST service/class to load.
        jerseyServlet.setInitParameter(
           "jersey.config.server.provider.classnames",
           UploadFileService.class.getCanonicalName());

        try {
            jettyServer.start();`enter code here`
            jettyServer.join();
        } finally {
            jettyServer.destroy();
        }
    }
}
问题与UploadFileService类中的代码有关,我应该使用什么类包或依赖项

我尝试使用“jersey multipart.jar”,但与Jetty存在依赖冲突。
我也尝试使用Servlet3.0API,但无法使用嵌入式jetty

我发现了几个例子:

-很好的示例,但它适用于jersey服务器

-很好的示例,但它适用于Tomcat服务器

-很好的示例,但它适用于web应用程序

如果有人能提供任何帮助或细节,我真的很感激

提前谢谢

注意:peeskillet将其标记为重复,但它不是重复的!正在使用tomcat,我的问题是关于嵌入式jetty。唯一的巧合是类名UploadFileService.class


大家好

我修改了这个类,现在我有了两个类JettyServer,我在其中设置了服务器,并在其中上载了文件,我试图管理帖子

package com.rest.test.restprj;

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;

public class JettyServer
{
public static void main(String[] args) throws Exception
{

    Server jettyServer = new Server(8080);

    // Create the ResourceHandler. It is the object that will actually handle the request for a given file. It is
    // a Jetty Handler object so it is suitable for chaining with other handlers as you will see in other examples.

    ResourceHandler resource_handler = new ResourceHandler();

    // Configure the ResourceHandler. Setting the resource base indicates where the files should be served out of.
    // In this example it is the current directory but it can be configured to anything that the jvm has access to.
    resource_handler.setDirectoriesListed(true);
    resource_handler.setWelcomeFiles(new String[]{ "./html/index.html" });
    resource_handler.setResourceBase(".");

    //Jersey ServletContextHandler


    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    ServletHolder jerseyServlet = servletContextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
    jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.rest.test.restprj");

    // Add the ResourceHandler to the server.
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, new DefaultHandler() });
    jettyServer.setHandler(handlers);

    try {
        jettyServer.start();
        jettyServer.join();
    } finally {
        jettyServer.destroy();
    }
}
}
上面的课似乎一切都好。但是我不知道注册MultiPartFeature需要什么。我得到了一个错误:

严重:检测到以下问题: 警告:找不到类型为public javax.ws.rs.core.Response com.rest.test.restprj.UploadFile.postsg(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition)的参数的注入源在索引0处抛出java.lang.Exception

@Path("/fileUpload")
public class UploadFile {

    @POST
    //@Consumes("multipart/form-data")
    //@Consumes("image/jpeg")
    @Produces("text/plain")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response postMsg (
            @FormDataParam("file") InputStream stream,
            @FormDataParam("file") FormDataContentDisposition fileDetail) throws Exception {


        String uploadedFileLocation = "./" + fileDetail.getFileName();


        // save it
        writeToFile(stream, uploadedFileLocation);

        String output = "File uploaded to : " + uploadedFileLocation;

        final Application application = new ResourceConfig()
                .packages("org.glassfish.jersey.examples.multipart")
                .register(MultiPartFeature.class);

        return Response.status(200).entity(output).type(MediaType.TEXT_PLAIN).build();

}

    private void writeToFile(InputStream uploadedInputStream,
            String uploadedFileLocation) {

            try {
                OutputStream out = new FileOutputStream(new File(
                        uploadedFileLocation));
                int read = 0;
                byte[] bytes = new byte[1024];

                out = new FileOutputStream(new File(uploadedFileLocation));
                while ((read = uploadedInputStream.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }
                out.flush();
                out.close();
            } catch (IOException e) {

                e.printStackTrace();
            }

        }

} 

您能否发布“与jetty的依赖冲突”语句的详细信息?还有您在“Servlet3.0API”版本中尝试了什么?(这两种方法都可以)注意:要对
jersey.config.server.provider.classnames
使用多个值,请使用逗号分隔的单个字符串。这就是您应该如何注册副本中提到的
MultiPartFeature
,答案保持不变。您使用了错误的依赖项,当添加正确的依赖项时,需要注册多部分功能。现在你把答案在哪里的重复问题弄丢了。你真的认为使用Tomcat还是Jetty会有不同吗?它们都是servlet容器,两个问题中的问题都是相同的“如何使多部分与Jersey一起工作?”。作为一个更大的男人,即使你决定无缘无故地大发脾气,这又是一个复制品。如果您需要帮助,请描述您的问题,我会尽力帮助您。谢谢Joakim Erdfelt和peeskillet。我会按照你的建议再试一次,看看我是否能成功!