#java #jsp #exception #servlets #marketo
#java #jsp #исключение #сервлеты #маркетолог
Вопрос:
Я пытался вызвать класс Java из сервлета, который печатает данные на странице JSP. Класс Java возвращает ответ в формате JSON, и я могу распечатать его в консоли. Я вызвал класс Java в servlet и запустил сервлет через страницу JSP.
Могу ли я напрямую напечатать ответ JSON на странице JSP с помощью Servlet? Если это так, я сталкиваюсь со следующей ошибкой.
PS: Я перепробовал все доступные способы устранения этой ошибки, но у меня ничего не сработало.
SEVERE: Servlet.service() for servlet [com.serves.getData] in context with path [/Demo] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: com.eclipsesource.json.JsonObject
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
at com.tadigital.marketo.servlet.MultipleEmails.getToken(MultipleEmails.java:116)
at com.tadigital.marketo.servlet.MultipleEmails.getData(MultipleEmails.java:74)
at com.tadigital.marketo.serves.getData.doGet(getData.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Вот мой код
Класс JAVA
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.NoSuchElementException;
import java.util.Scanner;
import javax.net.ssl.HttpsURLConnection;
import com.eclipsesource.json.JsonObject;
//the Java sample code on dev.marketo.com uses the minimal-json package
//minimal-json provides easy and fast representations of JSON
//for more information check out https://github.com/ralfstx/minimal-json
public class MultipleEmails {
public String marketoInstance = ;//Replace this with the host from Admin Web Services
public String marketoIdURL = marketoInstance "/identity";
public String clientId = ""; //Obtain from your Custom Service in Admin>Launchpoint
public String clientSecret = ""; //Obtain from your Custom Service in Admin>Launchpoint
public String idEndpoint = marketoIdURL "/oauth/token?grant_type=client_credentialsamp;client_id=" clientId "amp;client_secret=" clientSecret;
public String status; //status filter
public String offset; //offset returned from preveious
public Integer maxreturn; //max 100, default 20
public JsonObject folder; //JSON of parent folder with two members, ID and type(Folder or Program)
public static void main(String[] args){
MultipleEmails emails = new MultipleEmails();
emails.maxreturn = 200;
emails.folder = new JsonObject()
.add("id", 1260)
.add("type", "Folder");
String result = emails.getData();
System.out.println("Here you go...");
System.out.println(result);
}
public String getData() {
String data = null;
try {
//Assemble the URL
StringBuilder endpoint = new StringBuilder(marketoInstance "/rest/asset/v1/emails.json?access_token=" getToken());
//Append Optional Parameters
System.out.println(endpoint);
if (offset != null){
endpoint.append("amp;offset=" offset);
}
if (maxreturn != null){
endpoint.append("amp;maxreturn=" maxreturn);
}
if(status != null){
endpoint.append("amp;status=" status);
}
URL url = new URL(endpoint.toString());
HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setRequestProperty("accept", "text/json");
int responseCode = urlConn.getResponseCode();
if (responseCode == 200) {
InputStream inStream = urlConn.getInputStream();
data = convertStreamToString(inStream);
} else {
data = "Status:" responseCode;
}
} catch (MalformedURLException e) {
System.out.println("URL not valid.");
} catch (IOException e) {
System.out.println("IOException: " e.getMessage());
e.printStackTrace();
}
return data;
} public String getToken(){
String token = null;
try {
URL url = new URL(idEndpoint);
HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setRequestProperty("accept", "application/json");
int responseCode = urlConn.getResponseCode();
if (responseCode == 200) {
InputStream inStream = urlConn.getInputStream();
Reader reader = new InputStreamReader(inStream);
JsonObject jsonObject = JsonObject.readFrom(reader);
token = jsonObject.get("access_token").asString();
}else {
throw new IOException("Status: " responseCode);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return token;
}
private String convertStreamToString(InputStream inputStream) {
try {
return new Scanner(inputStream).useDelimiter("\A").next();
} catch (NoSuchElementException e) {
return "";
}
}
}
Этот класс Java возвращает данные JSON в качестве ответа. Я вызываю этот класс в сервлете следующим образом.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MultipleEmails me = new MultipleEmails();
String s = me.getData();
HttpSession session = request.getSession();
session.setAttribute("GETEMAILS", "Get Emails");
session.setAttribute("DATA", s);
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
try {
rd.forward(request, response);
} catch (Exception e) {
System.out.println(e);
}
И на странице JSP запрос status2Global = (String).getAttribute(«ДАННЫЕ»); используя это, я печатаю на странице. Но я сталкиваюсь с вышеупомянутым исключением.
Комментарии:
1. Вы использовали неправильный класс,
com.eclipsesource.json.JsonObject
. Опубликуйте свой сервлет и JSP-код.2. Отредактировал мой вопрос с помощью кода @ArvindKumarAvinash
3. вы используете библиотеку minimal-json, поэтому она должна передаваться через classpass при запуске вашей программы
4. не могли бы вы, пожалуйста, пояснить @alexander
5. Предположим, вы развертываете свое приложение в каком-либо контейнере сервлетов или сервере приложений. После развертывания в каталоге вашего приложения должен быть подкаталог WEB-INF / lib. В этом подкаталоге должен быть минимальный json jar-файл, поскольку этот подкаталог находится в пути к классу вашего приложения.