Java 尝试创建一个web服务来上载带有嵌入式Jetty的文件
我正在尝试使用Maven创建一个web服务。我使用了DarchetypeArtifactId=maven原型quickstart,并在main类上创建了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
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。我会按照你的建议再试一次,看看我是否能成功!