eclipse报错"main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!
eclipse报错"main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.people.v1.People;
import com.google.api.services.people.v1.PeopleScopes;
import com.google.api.services.people.v1.model.ListConnectionsResponse;
import com.google.api.services.people.v1.model.Name;
import com.google.api.services.people.v1.model.Person;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class PeopleQuickstart {
/** Application name. */
private static final String APPLICATION_NAME = "People API Java Quickstart";
/** Directory to store user credentials for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty(
"user.home"),
".credentials/people.googleapis.com-java-quickstart.json");
/** Global instance of the {@link FileDataStoreFactory}. */
private static FileDataStoreFactory DATA_STORE_FACTORY;
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
/** Global instance of the HTTP transport. */
private static HttpTransport HTTP_TRANSPORT;
/** Global instance of the scopes required by this quickstart.
*
* If modifying these scopes, delete your previously saved credentials
* at ~/.credentials/people.googleapis.com-java-quickstart.json
*/
private static final List<string> SCOPES = Arrays.asList(PeopleScopes.CONTACTS_READONLY);
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}
/**
* Creates an authorized Credential object.
* @return an authorized Credential object.
* @throws IOException
*/
public static Credential authorize() throws IOException {
// Load client secrets.
InputStream in = PeopleQuickstart.class.getResourceAsStream(
"/client_secret.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT,
JSON_FACTORY, clientSecrets, SCOPES).setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
// Credential credential = new AuthorizationCodeInstalledApp(
// flow, new LocalServerReceiver()).authorize("user");
Credential credential = new AuthorizationCodeInstalledApp(flow,
new LocalServerReceiver.Builder().setPort(54771).build()).authorize(
"user");
System.out.println("Credentials saved to " +
DATA_STORE_DIR.getAbsolutePath());
return credential;
}
/**
* Build and return an authorized People client service.
* @return an authorized People client service
* @throws IOException
*/
public static People getPeopleService() throws IOException {
Credential credential = authorize();
return new People.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME)
.build();
}
public static void main(String[] args) throws IOException {
People service = getPeopleService();
// Request 10 connections.
ListConnectionsResponse response = service.people().connections()
.list("people/me")
.setPageSize(10).execute();
// Print display name of connections if available.
List<person> connections = response.getConnections();
if ((connections != null) && (connections.size() > 0)) {
for (Person person : connections) {
List<name> names = person.getNames();
if ((names != null) && (names.size() > 0)) {
System.out.println("Name: " +
person.getNames().get(0).getDisplayName());
} else {
System.out.println("No names available for connection.");
}
}
} else {
System.out.println("No connections found.");
}
}
}
其中的81~82行,我改用了83~84行,因为LocalServerReceiver默认会用一个未被占用的随机的端口,经过改用后指定54711端口,那样才好在Google console里面的Credentials添加固定的Authorized redirect URIs,不用来回变了。
在代码运行时发现始终未弹出授权页面,看看了eclipse的控制台,发现错误信息如下:
六月 25, 2016 2:05:52 下午 com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly 警告: unable to change permissions for everybody: E:.credentials\people.googleapis.com-java-quickstart.json 六月 25, 2016 2:05:52 下午 com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly 警告: unable to change permissions for owner: E:.credentials\people.googleapis.com-java-quickstart.json Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest at com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver.getRedirectUri(LocalServerReceiver.java:98) at com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp.authorize(AuthorizationCodeInstalledApp.java:76) at PeopleQuickstart.authorize(PeopleQuickstart.java:82) at PeopleQuickstart.getPeopleService(PeopleQuickstart.java:94) at PeopleQuickstart.main(PeopleQuickstart.java:101) Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 5 more细看了一下,
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest,原来是该没有将tomcat的servlet-api.jar放到项目的JRE System Library下,放入后立刻搞定!
- 分类:
- Java
更新时间:
相关文章
eclipse使用sqlexplorer插件(图文)
前提是你已经安装了sql explorer插件。 不会安装插件的请见 eclipse添加插件 重新启动Eclipse后,可以在菜单W 阅读更多…
linux安装eclipse源码包
eclipse官方给linux系统用户的是类似eclipse-jee-indigo-SR1-linux-gtk-x86_64.tar.gz的包,假设我们把它解压到/home/你的用户名/Program 阅读更多…
eclipse打开文件中文乱码
出现的原因:因为windows下默认的编码是GBK,而我的java源文件编码是UTF-8所以,所以在windows下的注释,在Myelipse下查看就变成了乱码。 解决方法如下: 1) 阅读更多…
eclipse添加插件
eclipse做为当下最流行的开源IDE之一,Eclipse的一大优势就在于其无数优秀的插件。一个好的插件可以大大的提高我们的工作效率,学习如何安装Eclipse插件自然也是必修课了。下面介绍Ecli 阅读更多…
真的准备学习android了
买摩托罗拉里程碑已经快一年了,现在工作比较忙,但是还是想学点什么,就下定决心学习android吧,虽然老早就想学习了,但是一直拖拉到现在,不下定决心不行啊。 JAVA JDK 1.6 Ecli 阅读更多…
java 使用apidoc生成api
TestJavadoc.java的源码如下 [code lang="java"] package lee; /** *Description: *<br />Copyright 阅读更多…