问题描述
我一直在尝试从servlet调用java类,该servlet在JSP页面上打印数据。 java类返回JSON响应,我可以在控制台中将其打印出来。我已经在servlet中调用java类,并通过JSP页面运行servlet。
我可以使用Servlet直接将JSON响应打印到JSP页面上吗?如果是这样,我将面临以下错误。
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)
这是我的代码
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 @R_827_4045@ion 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_credentials&client_id=" + clientId + "&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("&offset=" + offset);
}
if (maxreturn != null){
endpoint.append("&maxreturn=" + maxreturn);
}
if(status != null){
endpoint.append("&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数据作为响应。我通过以下方式在servlet中调用此类。
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)request.getAttribute(“ DATA”);使用这个我在页面上打印。但我面临上述异常。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)