2011-05-16 67 views
0

我遇到了一个我需要解决的情况。我必须上传xml文件的特定元素才能将其上传到服务器,并设法做到这一点,并且我创建了一个演示方法来检查文件是否正在上传到服务器。java scp文件到远程使用ganymed-ssh2

我的XML文件结构,

<config> 
<engine> 
    <eid>1</eid> 
    <sometextelement>text</sometextelement> 
</engine> 

<engine> 
    <eid>2</eid> 
    <sometextelement>text</sometextelement> 
</engine> 

<engine> 
    <eid>3</eid> 
    <sometextelement>text</sometextelement> 
</engine> 


</config> 

,这里是我的servlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doPost(request,response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.setContentType("application/json"); 
     //response.setHeader("Cache-Control", "no-cache"); 
     PrintWriter out = response.getWriter(); 
     JSONObject obj = new JSONObject(); 
     String value = request.getParameter("value"); 
      String message = ""; 
      String update = ""; 
      Element element = null; 
      Element root = null; 
      XMLOutputter xmlOutputter = new XMLOutputter(); 
     try{ 
     doc = saxBuilder.build("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml"); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     root = doc.getRootElement(); 
     List list = doc.getRootElement().getChildren(); 
     Iterator itr = list.iterator(); 
     while(itr.hasNext()){ 
      element = (Element)itr.next(); 
      System.out.println("Entered 1"); 
      File f = File.createTempFile("engine_",".xml"); 
      System.out.println(f); 
      xmlOutputter.output(element, new FileWriter(f)); 

      putFile(f); 
     } 



     // xmlOutputter.output(doc, new FileWriter("E:/workbench j2ee/cPEP_UI/WebContent/engine.xml")); 





     // System.out.println("hello from system"); 
     // out.println("hello"); 



    } 

    public void putFile(File f){ 
     System.out.println("File String: "+f.toString()); 
     Connection Conn = null; 
      try { 
      Conn = new Connection("ftp.someserver.co.uk",22); 
      ConnectionInfo info = Conn.connect(); 
      Conn.authenticateWithPassword("[email protected]", "mypass"); 
      SCPClient SCP = new SCPClient(Conn); 
      SCP.put(f.toString(), "/public_html/webmaster", "0755"); 
      Conn.close(); 
      } catch (Exception e) { 
      try { 
      Conn.close(); 
      } catch (Exception e1) {} 
    } 
    } 

现在,从上面的代码我收到文件引擎1,引擎2和创建引擎3,这就是我想要的,但现在我想要它也上传到服务器。 putFile代码根本不起作用。没有错误显示,传递和用户名都很好,并且服务器名称也是如此。港口也很完美。那么错了什么? 有什么想法?

编辑 - 1

继承人的错误:

java.io.IOException: There was a problem while connecting to ftp.someserver.co.uk:22 
    at ch.ethz.ssh2.Connection.connect(Connection.java:699) 
    at ch.ethz.ssh2.Connection.connect(Connection.java:490) 
    at Push_Individual_Engine.putFile(Push_Individual_Engine.java:106) 
    at Push_Individual_Engine.doPost(Push_Individual_Engine.java:81) 
    at Push_Individual_Engine.doGet(Push_Individual_Engine.java:47) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:529) 
    at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340) 
    at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448) 
    at ch.ethz.ssh2.Connection.connect(Connection.java:643) 
    ... 18 more 

回答

1

为什么显示没有错误,可能的原因是,你是丢弃异常。你应该期望得到“不起作用,但没有错误正在显示”的问题,如果你放弃例外。相反,你应该打印堆栈跟踪在catch块,像这样:

e.printStackTrace(); 

或记录异常,或重新抛出异常。这是三种标准选择。

+0

好吧,是的,现在我得到一个错误,它无法验证我的连接。但我已经重新检查过它,一切正常 – Maverick 2011-05-16 17:08:37

+0

我没有看过API,但用户名看起来不对。 Unix用户名不应该有@s。 – 2011-05-16 17:10:32

+0

其实我已经使用过cpanel来创建ftp账号,而且我也是如何使用filezilla连接的。它有@之间。 – Maverick 2011-05-16 17:15:50

2

您需要在远程机器的sshd_config文件中设置PasswordAuthentication = yes

相关问题