我有一个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
...
我只是在寻找不一定代码的建议。甚至可能是一些阅读材料。相当新的和失去的......
答案 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框架 - 您可能希望将此功能包装到控制器或服务中。