我正在为一个项目(学术)创建一个博客系统。我有一个问题,我需要将map
(LinkedHashMap
)传递给jsp
文件。但浏览器显示Nothing 。这是我的代码:
public void doService (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = "localhost:8080/YouBlogger/Posts/";
File dir = new File(path);
File [] files = dir.listFiles();
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
Arrays.sort(files, new Comparator<Object>(){
public int compare(Object o1, Object o2) {
return compare( (File)o1, (File)o2);
}
private int compare( File f1, File f2){
long result = f2.lastModified() - f1.lastModified();
if( result > 0 ){
return 1;
} else if( result < 0 ){
return -1;
} else {
return 0;
}
}
});
for(int i=0 ; i < 10 ; i++){
map.put(files[i].getName(), files[i].getPath());
}
request.setAttribute("map", map);
RequestDispatcher dispatcher = request.getRequestDispatcher("/welcome.jsp");
dispatcher.forward(request, response);
}
我100%确定错误在此代码中,因为当我对map
进行硬编码时,jsp会在其上显示数据。这有什么不对吗?可能是path
??
修改 这是我的jsp代码:
<body>
<div id = "Header">
<h1>You Blogger</h1>
</div>
<div id = "data">
<c:forEach var="country" items="${map}">
${country.key} + ${country.value}
<br/>
</c:forEach>
<form action="new_post" method = "POST">
<input type = "submit" value = "Add A New Post" ></input>
</form>
</div>
</body>
该项目正在apache tomcat 8.0上运行,我正在使用eclipse Luna进行开发。
答案 0 :(得分:1)
File
构造函数需要一个真实的路径来访问本地目录。因此,您不应使用localhost:8080
访问它,而是应使用如下所示的实际路径访问目录
String path="/home/test/apache/webapp/projectname/YouBlogger/Posts/"
如果您不想对路径进行硬编码,可以使用request.getSession().getServletContext().getRealPath("/")
获取网络服务器目录的真实路径
答案 1 :(得分:-1)
我认为问题出在您的代码的第2行和第3行:
String path = "localhost:8080/YouBlogger/Posts/";
File dir = new File(path);
这样做的目的是查看目录c:/localhost:8080/YouBlogger/Posts/
并在那里列出文件,因为驱动器c上可能不存在此目录:它将不返回任何内容。如果要在远程计算机上列出文件,则需要使用某个HTTP客户端或将路径放到现有目录中。