2017-07-15 46 views
0

我想在jsp頁面上使用我的java方法,但大多數來自stackoverflow的答案對我沒有幫助。有人能幫我解決這個問題嗎?如何在jsp中調用java覆蓋的方法?

public class send{ 
private static final String connectionString = "HostName=hackhubdeu.azure-devices.net;SharedAccessKeyName=****;SharedAccessKey=****"; 
private static final IotHubServiceClientProtocol protocol = IotHubServiceClientProtocol.AMQPS; 
private static final String deviceId = "hack01"; 
ServiceClient serviceClient; 
boolean onOff = false; 



public send() { 
    try { 
     this.serviceClient = ServiceClient.createFromConnectionString(connectionString, protocol); 

     this.serviceClient.open(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    messagesending(); 
} 

public static void main(String[] args) { 
    new send(); 

} 

public void messagesending() { 
    onOff = !onOff; 
    try { 
     FeedbackReceiver feedbackReceiver = serviceClient.getFeedbackReceiver(); 
     feedbackReceiver.open(); 

     Message msg = new Message(String.valueOf(onOff)); 
     msg.setDeliveryAcknowledgement(DeliveryAcknowledgement.Full); 

     serviceClient.send(deviceId, msg); 
     System.out.println("Message sent to device"); 

     FeedbackBatch feedbackBatch = feedbackReceiver.receive(10000); 
     if (feedbackBatch != null) { 
      System.out.println("Message feedback received, feedback time: " 
        + feedbackBatch.getEnqueuedTimeUtc().toString()); 
     } 
     if (feedbackReceiver != null) feedbackReceiver.close(); 

    } catch (IotHubException ee) { 
     ee.printStackTrace(); 
    } catch (IOException eee) { 
     eee.printStackTrace(); 
    } catch (InterruptedException eeee) { 
     eeee.printStackTrace(); 
    } 

} 

這是我的Java代碼,我想叫什麼是公共send()方法對serviceclient連接第一,而且比調用messagesending()方法做了一些工作。

<%@page import="munjuPrj.send"%> 
<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 

<%@ page import ="munjuPrj.send" %> 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body> 
<% 
send sendclass = new send(); 
%> 
</body> 
</html> 

這是我的jsp代碼。它不使運行之前任何錯誤,但在我運行這段代碼,我得到以下錯誤:

HTTP Status 500 - An exception occurred processing JSP page /NewFile.jsp at line 14 this error code

+0

請立即更改您的共享訪問密鑰。它被暴露.. –

+0

當你直接運行發送類時,你的程序是否工作,我的意思是沒有調用JSP頁面? –

+0

你可以發佈你的異常StackTrace日誌來指定Http狀態500錯誤信息嗎? –

回答

0

what i wanna call is that public send() method to connect on the serviceclient first, and than call the messagesending() method to do some jobs done.

你們班send()方法是不正常的方法,它是因爲它的名字構造與類名匹配。構造函數在對象構造時自動調用。這就是爲什麼當你在JSP中創建新的發送類對象時,send()方法會自動調用。

如果您想要在發送對象之後調用send方法,就像您問的那樣。有兩種方法:

  1. 不要從send()方法調用messagesending()並更新您的JSP以顯式調用messagesending()。具體如下:以messageSender,和從發送

    <% 
    send sendclass = new send();  
    sendclass.messagesending(); 
    %> 
    
  2. 更改您的類名(但不改變send()方法的名稱和它的身體)。然後寫你的JSP如下:

    <% 
    MessageSender messageSender = new MessageSender(); 
    messageSender.send(); 
    %> 
    

它應幫助您調用發送方法,只要你想。 500錯誤代碼顯示在處理JSP頁面時服務器端出現了一些錯誤。