gpt4 book ai didi

java - com.sun.jersey.server.impl.application.RootResourceUriRules. ResourceConfig 实例不包含任何根资源类

转载 作者:行者123 更新时间:2023-11-28 23:20:55 25 4
gpt4 key购买 nike

我在将 war 文件上传到 AWS Tomcat8 服务器时遇到了一些问题。

项目类型:动态网页项目;Tomcat:版本 - 8;Java:1.8 版

在我使用 Java 向 AWS S3 实例添加文件上传和下载操作代码之前,它运行良好。

13-May-2017 19:29:55.770 INFO [http-nio-8088-exec-3] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 13-May-2017 19:29:55.784 INFO [http-nio-8088-exec-3] com.sun.jersey.api.core.PackagesResourceConfig.init Scanning for root resource and provider classes in the packages:
com.harsha.app.services 13-May-2017 19:29:55.881 INFO [http-nio-8088-exec-3] com.sun.jersey.server.impl.application.WebApplicationImpl._initiate Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 13-May-2017 19:29:56.304 SEVERE [http-nio-8088-exec-3] com.sun.jersey.server.impl.application.RootResourceUriRules. The ResourceConfig instance does not contain any root resource classes. 13-May-2017 19:29:56.313 INFO [http-nio-8088-exec-3] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\harsha.war has finished in 6,475 ms

AmazonS3操作类:

package com.harsha.app.servlet.file;

import java.io.File;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.harsha.app.constant.Constant;

public class AmazonS3DriveOperation {

AWSCredentials credentials;
AmazonS3 s3Client;

public AmazonS3DriveOperation() {
s3Authorization();
}

public void s3Authorization() {
credentials = new BasicAWSCredentials(Constant.ACCESS_KEY_ID, Constant.SECRET_ACCESS_KEY);
s3Client = new AmazonS3Client(credentials);
}

public void s3FileUpload(String bucketName, String fileName, File file) {
s3Client.putObject(bucketName, fileName, file);
}

public S3Object s3FileDownload(String bucketName, String fileName) {
GetObjectRequest request = new GetObjectRequest(bucketName, fileName);
S3Object s3Object = s3Client.getObject(request);
return s3Object;
}

public boolean s3FileDelete(String bucketName, String fileName) {
try {
DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, fileName);
s3Client.deleteObject(deleteObjectRequest);
return true;
}
catch (AmazonClientException e) {
e.printStackTrace();
return false;
}
}

}

DataDeleteServlet 类:

package com.harsha.app.servlet.file;

import java.io.File;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.harsha.app.constant.Constant;
import com.harsha.app.database.DBManager;
import com.harsha.app.database.DataUpload;

/**
* Servlet implementation class DataFileDelete
*/
@WebServlet("/DataFileDelete")
public class DataFileDelete extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public DataFileDelete() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String fileName = request.getParameter("fileName");
String filePath = Constant.DATA_DRIVE + fileName;
String serverDocumentsId = request.getParameter("serverDocumentsId");

fileName = Constant.BASE_UPLOAD_FOLDER + Constant.SUFFIX + fileName;

DBManager dbManager = new DBManager();
System.out.println(filePath);
RequestDispatcher rd = request.getRequestDispatcher("adminUploadExcel.jsp");
AmazonS3DriveOperation amazon = new AmazonS3DriveOperation();
if(amazon.s3FileDelete(Constant.BUCKET_NAME, fileName)) {
DataUpload.deleteFileFromServer(serverDocumentsId, dbManager);
System.out.println("Done");
request.setAttribute("msg", "Data Delete Successful");
}
else {
request.setAttribute("msg", "Data Delete Unsuccessful");
System.out.println("Not Done");
}
dbManager.close();
rd.forward(request, response);

}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

}

DataFileUploadDownload Servlet 类:

package com.harsha.app.servlet.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.codehaus.jettison.json.JSONArray;

import com.amazonaws.services.s3.model.S3Object;
import com.harsha.app.constant.Constant;
import com.harsha.app.database.DBManager;
import com.harsha.app.database.DataUpload;
import com.harsha.app.util.ExcelRead;

@WebServlet(name = "DataFileUploadDownload",urlPatterns = {"/DataFileUploadDownload/*"})
public class DataFileUploadDownload extends HttpServlet {
private static final long serialVersionUID = 1L;
int BUFFER_LENGTH = 4096;

String fileNameAssigned = "";
String fileNameGiven = "";
String excelType = "";



public DataFileUploadDownload() {
super();
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String filePath = request.getRequestURI();

String fileName = filePath.replace(Constant.REPLACE_URL,"");
AmazonS3DriveOperation amazon = new AmazonS3DriveOperation();

fileName = Constant.BASE_UPLOAD_FOLDER + Constant.SUFFIX + fileName;

S3Object s3Object = amazon.s3FileDownload(Constant.BUCKET_NAME, fileName);
InputStream input = s3Object.getObjectContent();

response.setContentLength((int) s3Object.getObjectMetadata().getContentLength());
response.setContentType(new MimetypesFileTypeMap().getContentType(s3Object.getObjectMetadata().getContentType()));

OutputStream output = response.getOutputStream();
byte[] bytes = new byte[BUFFER_LENGTH];
int read = 0;
while ((read = input.read(bytes, 0, BUFFER_LENGTH)) != -1) {
output.write(bytes, 0, read);
output.flush();
}

input.close();
output.close();
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
DBManager dbManager = new DBManager();
out.println("Hello<br/>");

boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
if (!isMultipartContent) {
out.println("You are not trying to upload<br/>");
return;
}
out.println("You are trying to upload<br/>");

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> fields = upload.parseRequest(request);
out.println("Number of fields: " + fields.size() + "<br/><br/>");
Iterator<FileItem> it = fields.iterator();
if (!it.hasNext()) {
out.println("No fields found");
return;
}
out.println("<table border=\"1\">");
while (it.hasNext()) {
out.println("<tr>");
FileItem fileItem = it.next();
boolean isFormField = fileItem.isFormField();
if (isFormField) {
out.println("<td>regular form field</td><td>FIELD NAME: " + fileItem.getFieldName() +
"<br/>STRING: " + fileItem.getString()
);
out.println("</td>");
if(fileItem.getFieldName().equals("fileName"))
excelType = fileItem.getString();
} else {
out.println("<td>file form field</td><td>FIELD NAME: " + fileItem.getFieldName() +
//"<br/>STRING: " + fileItem.getString() +
"<br/>NAME: " + fileItem.getName() +
"<br/>CONTENT TYPE: " + fileItem.getContentType() +
"<br/>SIZE (BYTES): " + fileItem.getSize() +
"<br/>TO STRING: " + fileItem.toString()
);
fileNameGiven = fileItem.getName();
fileNameAssigned = DataUpload.getCurrentTime() + "" + getFileName(fileNameGiven);
String path = Constant.DATA_DRIVE + ""+ fileNameAssigned;
System.out.println(path);

//File fileUpload = new File(path);

fileNameAssigned = Constant.BASE_UPLOAD_FOLDER + Constant.SUFFIX + fileNameAssigned;

File file = new File(fileNameAssigned);
fileItem.write(file);
AmazonS3DriveOperation amazon = new AmazonS3DriveOperation();
amazon.s3FileUpload(Constant.BUCKET_NAME, fileNameAssigned, file);
out.println("</td>");
}
out.println("</tr>");
}
out.println("</table>");
DataUpload.insertNewUploadFileDetails(fileNameGiven, fileNameAssigned, dbManager);
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
uploadExcelData(fileNameAssigned, excelType, dbManager);
dbManager.close();
RequestDispatcher rd = request.getRequestDispatcher("adminUploadExcel.jsp");
request.setAttribute("msg", "Data Upload Successful");
rd.forward(request, response);
}

private String getFileName(String fileName) {
return fileName.substring(fileName.indexOf('.')).trim();
}

private void uploadExcelData(String fileNameAssigned, String excelType, DBManager dbManager) throws IOException {
ExcelRead er = new ExcelRead();
if(excelType.equals("Family")) {
JSONArray jArray = er.readBooksFromExcelFile(fileNameAssigned, excelType);
DataUpload.uploadFamilyArchieve(jArray, dbManager);
}
else if(excelType.equals("Member")) {
JSONArray jArray = er.readBooksFromExcelFile(fileNameAssigned, excelType);
DataUpload.uploadMemberArchieve(jArray, dbManager);
}
}

}

ExcelFileCreating 和下载 Servlet 类:

package com.harsha.app.servlet.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.codehaus.jettison.json.JSONArray;

import com.amazonaws.services.s3.model.S3Object;
import com.harsha.app.constant.Constant;
import com.harsha.app.database.DBHandler;
import com.harsha.app.database.DBManager;
import com.harsha.app.util.ExcelRead;

/**
* Servlet implementation class TableDataDownload
*/
@WebServlet(name = "TableDataDownload",urlPatterns = {"/TableDataDownload/*"})
public class TableDataDownload extends HttpServlet {
private static final long serialVersionUID = 1L;
int BUFFER_LENGTH = 4096;

String fileNameAssigned = "";
String fileNameGiven = "";
String excelType = "";


/**
* @see HttpServlet#HttpServlet()
*/
public TableDataDownload() {
super();
}

public JSONArray agricultureImpactReport() {
DBManager dbManager=new DBManager();
JSONArray jsonArray = DBHandler.getAgricultureImpactReport(0, new Date().getTime()/1000, dbManager);
dbManager.close();
return jsonArray;
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filePath = request.getRequestURI();
System.out.println(filePath);

String impactName = filePath.replace(Constant.REPLACE_URL2,"");
System.out.println(impactName);

JSONArray jsonArray = new JSONArray();

if(impactName.equals("agriculture.xls")) {
jsonArray = agricultureImpactReport();
filePath = ExcelRead.generateExcelReport(jsonArray, impactName);
}
System.out.println(jsonArray.toString());
System.out.println("filepath=" + filePath);
String path = Constant.DATA_DRIVE + filePath;
System.out.println("path=" + path);

String fileName = filePath;
/*File file = new File(path);
InputStream input = new FileInputStream(file);

response.setContentLength((int) file.length());
response.setContentType(new MimetypesFileTypeMap().getContentType(file));
*/

fileName = Constant.BASE_UPLOAD_FOLDER + Constant.SUFFIX + fileName;
AmazonS3DriveOperation amazon = new AmazonS3DriveOperation();

S3Object s3Object = amazon.s3FileDownload(Constant.BUCKET_NAME, fileName);
InputStream input = s3Object.getObjectContent();

response.setContentLength((int) s3Object.getObjectMetadata().getContentLength());
response.setContentType(new MimetypesFileTypeMap().getContentType(s3Object.getObjectMetadata().getContentType()));

OutputStream output = response.getOutputStream();
byte[] bytes = new byte[BUFFER_LENGTH];
int read = 0;
while ((read = input.read(bytes, 0, BUFFER_LENGTH)) != -1) {
output.write(bytes, 0, read);
output.flush();
}

input.close();
output.close();
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}

}

网络.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Yushu</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.harsha.app.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>

List of Jar Configured in Project. All present in lib folder under WEB-INF

我的 pom.ml 中的依赖项:

<dependencies>

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.127</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.127</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20141113</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>

我尝试了很多解决方案,例如:

  • 包括每个 API 的 Jar 文件。
  • 在 pom 中包含对 maven 的依赖。
  • 检查 Jersey Servlet 容器和服务根的 Web.xml包装。
  • 正在检查创建的超过 1 个服务的相似 URL歧义。
  • 已检查 Java 和 Tomcat 版本。 AWS 和我的 locak 机器版本是数学。

Bug 仍未修复。请在这件事上给予我帮助。提前致谢。

最佳答案

如果您尝试使用 Jersey,为什么要使用 Servlet?这不是 Jersey 的工作方式。使用 Jersey,您可以使用 @Path 注释资源类。例如

package com.harsha.app.services;

@Path("pets")
public class PetsResource {
@GET
@Path("{id}")
@Produces("application/json")
public Pet get(@PathParam("id") long id) {
...
}

@POST
@Consumes("application/json")
public Response create(Pet pet) {
...
}
}

注意顶部的包。 Jersey 将扫描该包(因为这是您在 web.xml 中配置的包)以查找使用 @Path 注释的类,因此它可以将其注册为 资源类。这就是您收到错误消息“没有根资源类”的原因。

我什至不打算解释上面代码的作用。这是一个太宽泛的话题。您将需要阅读一些教程和文档才能真正了解这些东西。但是你现在所做的是完全错误的。

关于java - com.sun.jersey.server.impl.application.RootResourceUriRules.<init> ResourceConfig 实例不包含任何根资源类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com