2014-01-20 109 views
0

這是Java代碼使用套接字從C服務器接收數據並將數據存儲在Google數據存儲中並在Google應用引擎上部署該應用。HTTP 500網站無法顯示頁面

package pack.exp; 

@SuppressWarnings("serial") 
public class CToJavaToCloudServlet extends HttpServlet 
{ 
static List<String> obj1; 

public static void main(String[] args) throws UnknownHostException, IOException 
{ 
     Socket s = new Socket("10.9.11.55", 6870); 
    InputStream stream = s.getInputStream(); 
    byte[] data = new byte[13]; 
    int read; 
    String can_Id= null; 


    while((read = stream.read(data)) != -1) 
    { 
     can_Id= String.format("%02X%02X%02X%02X", data[0], data[1], data[2],  
      data[3]); 

    String can_Data= String.format("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", 
      data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11]); 

    obj1= new ArrayList<String>(); 
    obj1.add(can_Data.substring(0, 2)); 
    obj1.add(can_Data.substring(3, 5)); 
    obj1.add(can_Data.substring(6, 8)); 
    obj1.add(can_Data.substring(9, 11)); 
    obj1.add(can_Data.substring(12, 14)); 
    obj1.add(can_Data.substring(15, 17)); 
    obj1.add(can_Data.substring(18, 20)); 
    obj1.add(can_Data.substring(21, 23)); 
    } 
} 

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws 
      IOException 
{ 
    Key k1 = KeyFactory.createKey("C","0C F0 0400"); 

    String statusEEC1= obj1.get(0); 
    String driversDemandEnginePercentTorque= obj1.get(1); 
    String actualEnginePercentTorque= obj1.get(2); 
    String engineSpeed= obj1.get(3) + obj1.get(4); 
    String sourceAddressOfControllingDeviceForEngineControl= obj1.get(5); 
    String engineStarterMode= obj1.get(6); 
    String engineDemandPercentTorque= obj1.get(7); 

    Entity can1 = new Entity(k1); 

    can1.setProperty("Status EEC", statusEEC1);  

      can1.setProperty("Drivers Demand Engine Percent Torque", 
      driversDemandEnginePercentTorque); 

      can1.setProperty("Actual Engine Percent Torque", 
      actualEnginePercentTorque); 

      can1.setProperty("Engine Speed", engineSpeed); 

      can1.setProperty("Source Address Of Controlling Device For Engine Control", 
      sourceAddressOfControllingDeviceForEngineControl); 

      can1.setProperty("Engine Starter Mode", engineStarterMode); 

      can1.setProperty("Engine Demand Percent Torque", 
      engineDemandPercntTorque); 


    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
    datastore.put(can1); 

    Entity can11 = null; 

    try 
    { 
     can11= datastore.get(k1); 
    } 

    catch (EntityNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 


    String statusEEC11= (String) can11.getProperty("Status EEC"); 

      String driversDemandEnginePercentTorque1= (String) 
      can11.getProperty("Drivers Demand Engine Percent Torque"); 

      String actualEnginePercentTorque1= (String) can11.getProperty("Actual 
      Engine Percent Torque"); 

      String engineSpeed1= (String) can11.getProperty("Engine Speed"); 

      String sourceAddressOfControllingDeviceForEngineControl1= (String) 
      can11.getProperty("Source Address Of Controlling Device For Engine 
      Control"); 
    String engineStarterMode1= (String) can11.getProperty("Engine Starter 
      Mode"); 
    String engineDemandPercentTorque1= (String) can11.getProperty("Engine 
      Demand Percent Torque"); 


    resp.setContentType("text/plain"); 
    resp.getWriter().println("Can id 0C F0 0400------>"); 
    resp.getWriter().println(""); 
    resp.getWriter().println("Status EEC--- " + statusEEC11); 
    resp.getWriter().println("Drivers Demand Engine Percent Torque---" + 
      driversDemandEnginePercentTorque1); 
    resp.getWriter().println("Actual Engine Percent Torque---" + 
      actualEnginePercentTorque1); 
    resp.getWriter().println("Engine Speed---" + engineSpeed); 
    resp.getWriter().println("Source Address Of Controlling Device For Engine 
      Control---" + sourceAddressOfControllingDeviceForEngineControl1); 
    resp.getWriter().println("Engine Starter Mode---" + engineStarterMode1); 
    resp.getWriter().println("Engine Demand Percent Torque---" +     
      engineDemandPercentTorque1); 
    resp.getWriter().println(""); 
    resp.getWriter().println(""); 
    resp.getWriter().println(""); 
    resp.getWriter().println(""); 
    } 
} 

在將應用程序部署到谷歌雲引擎時出現錯誤。 網站無法顯示頁面 HTTP 500 最有可能的原因: •網站正在維護中。 •網站有編程錯誤。

有人可以幫我解決這個問題。

回答

1

javax.servletjavax.servlet.http軟件包提供寫入servlet的接口和類。所有servlet必須實現定義生命週期方法的Servlet接口。在實現通用服務時,可以使用或擴展隨Java Servlet API提供的GenericServlet類。 HttpServlet類提供了用於處理HTTP特定服務的方法,如doGetdoPost

由於您正在實施HttpServlet接口,因此您必須實施doGet和/或doPost

Servlet init方法允許servlet在服務請求之前執行一次性初始化。執行初始化方法時出現的一個常見錯誤是:

因此您的main方法根本沒有被調用。將代碼從main移到init。你的代碼的另一個問題是你打開一個期望數據的套接字。這應該在doGet和/或doPost方法中完成,因爲它們負責接收數據。

+0

@ user987339 是的我已經在代碼中實現了doGet()。 – Sandeep

+0

我沒有注意到它。我已經更新了答案。 – user987339

+0

@ user987339 我已將主方法替換爲public void init() ,而且我的Socket代碼僅在init()方法中,我從服務器連續獲取數據,但部署後我得到相同的錯誤和數據不在GAE – Sandeep