在.jsp文件中显示.java的输出

时间:2015-08-05 17:42:39

标签: java jsp ftp

我有一个java文件连接到ftp服务器并从服务器返回一个目录列表。我的问题是从java文件中获取列表并在jsp中显示目录结果的正确方法是什么?

你会建议我直接从jsp连接到ftp服务器,还是这种糟糕的编码做法?

示例:

Connect.java

package root;
import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;


public class ConnectFTP {


private void showServerReply(FTPClient ftpClient) {
    String[] replies = ftpClient.getReplyStrings();
    if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
        }
    }
}



public void listFTPVendors(String[] args) {
    String server = "ftpserver.com";
    int port = 21;
    String user = "username";
    String pass = "password";
    FTPClient ftpClient = new FTPClient();
    try {
        ftpClient.connect(server, port);
        showServerReply(ftpClient);
        int replyCode = ftpClient.getReplyCode();C
        if (!FTPReply.isPositiveCompletion(replyCode)) {
            System.out.println("Operation failed. Server reply code: " + replyCode);
            return;
        }
        boolean success = ftpClient.login(user, pass);
        showServerReply(ftpClient);
        if (!success) {
            System.out.println("Could not login to the server");
            return;
        } else {
            System.out.println("LOGGED IN SERVER");
        }
        FTPFile[] files = ftpClient.listDirectories();
        for (FTPFile file : files) {
            String details = file.getName();
            if (file.isDirectory()) {
                details = "[" + details + "]";
            }
            System.out.println(details);
        }

    } catch (IOException ex) {
        System.out.println("Oops! Something wrong happened");
        ex.printStackTrace();
    }


}

}

Connect.jsp

...

我只是在寻找不一定代码的建议。甚至可能是一些阅读材料。相当新的和失去的......

3 个答案:

答案 0 :(得分:1)

不是迭代files并打印它,而是return files并将方法listFTPVendors(String[] args)的返回类型更改为FTPFile[]

现在,请从JSP调用此方法并检索JSP代码中的数据。

<%FTPFile[] files = new ConnectFTP().listFTPVendors()%>

请勿忘记导入ConnectFTP中的课程JSP

files中迭代JSP并在网页上显示。

答案 1 :(得分:1)

是的,JSP用于表示逻辑,所以如果将网络代码保存在单独的Java文件中会更好:)

答案 2 :(得分:1)

我看到你正在使用Apache Commons FTP api。你几乎正确地做到了。

我还认为,当您的集合仅由目录组成时,您将不必要地测试目录。 这是因为您使用的是listDirectories()方法 如果您调用了listFiles(),则必须像测试一样测试每个文件是否为目录。

您应该可以按如下方式修改代码:

...
FTPFile[] files = ftpClient.listDirectories();
for (FTPFile file : files) {
    System.out.println("["+ file.getName() +"]");
}
...

直接从JSP页面连接到FTP服务器 - 那里没有“错误”,但通常jsp用于显示目的。

我会避免对页面中的凭据进行硬编码 - 它们应该外部化为配置文件。配置文件也应存储在无法通过浏览器访问的位置。

根据您使用的Web框架 - 您可能希望将此功能包装到控制器或服务中。