【问题标题】:display output from .java in .jsp file在 .jsp 文件中显示 .java 的输出
【发布时间】:2015-08-05 17:42:39
【问题描述】:

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

你会建议我直接从 jsp 连接到 ftp 服务器还是这是不好的编码习惯?

示例:

连接.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();
    }


}

}

连接.jsp

??

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

【问题讨论】:

    标签: java jsp ftp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我看到您正在使用 Apache Commons FTP api。你做得很好。

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

      您应该能够如下修改您的代码:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        别忘了在JSP 中导入ConnectFTP 类。

        JSP 中遍历files 并将其显示在网页上。

        【讨论】:

        • 与我所拥有的相比会怎样?
        • 只是我在回答中提到的小改动。
        • 在 jsp 中 args 应该评估什么?
        • 你没有在你的方法中使用“args”参数......只是删除它!它应该是 public void listFTPVendors() {...}
        • 没错,args 甚至没有在方法内部使用。
        猜你喜欢
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2016-01-18
        • 2019-04-17
        • 1970-01-01
        • 2012-06-03
        • 2015-05-20
        相关资源
        最近更新 更多