填充了文件名并由servlet设置为请求属性的映射在JSP中显示为空

时间:2015-05-11 22:21:47

标签: jsp servlets hashmap file-handling

我正在为一个项目(学术)创建一个博客系统。我有一个问题,我需要将mapLinkedHashMap)传递给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进行开发。

2 个答案:

答案 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客户端或将路径放到现有目录中。