java scp文件使用ganymed-ssh2进行远程访问

时间:2011-05-16 16:27:55

标签: java xml servlets ftp scp

我遇到了一个需要解决的问题。我必须上传xml文件的特定元素以将其上传到服务器,设法做到这一点,然后我创建了一个演示方法来检查文件是否正在上传到服务器。

我的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("webmaster@someserver.co.uk", "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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

显示没有错误的可能原因是您丢弃例外。如果您放弃例外,您应该期望得到“不起作用,但没有显示错误”问题。相反,您应该在catch块中打印堆栈跟踪,如下所示:

e.printStackTrace();

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