仅在重新启动服务器

时间:2016-06-27 10:19:27

标签: spring image jsp spring-mvc jstl

我在Spring MVC中编写了我的第一个webapp。它是动态网页,用户可以通过multipart/form-data添加壁纸。然后他被重定向到主页,在那里显示所有添加的图片。但是,当我试图添加图像并看到结果时,我只能看到空div,就像图片不存在一样。但重启后Tomcat图像显示正常。我试图更改scope,但我认为这是个坏主意。此外,我将LinkedList更改为ArrayList,但也未成功。

针对home.jsp

<div class="row">
    <c:forEach items="${paths}" var="path">
        <div class="col-lg-3 col-md-4 col-xs-6 thumb">
            <a class="thumbnail" href="#">
                <img class="img-responsive" src="../../../resources/wallpapers/${path}">
            </a>
        </div>
    </c:forEach>
</div>

WallpaperService.java

public List<Wallpaper> wallpapers = new LinkedList<>();
public List<String> paths = new ArrayList<>();

public Wallpaper addWallpaper(File image) {
    Wallpaper wallpaper = new Wallpaper();

    wallpaper.setImage(image);
    wallpapers.clear();
    wallpapers.add(wallpaper);

    return wallpaper;

HomeController.java

File[] files = new File("D:\\IntelliJ IDEA\\Wallpapers\\src\\main\\web\\resources\\wallpapers\\").listFiles();

@RequestMapping("/")
public String home(Model model){
    wallpaperService.paths.clear();

    for (File file : files) {
        wallpaperService.paths.add(file.getName());
    }

    model.addAttribute("paths", wallpaperService.paths);

    return "home";
}

img:home view

生成的html(第一个div没有显示图像,另一个先前添加,重新启动后再显示tomcat):

<div class="row">

        <div class="col-lg-3 col-md-4 col-xs-6 thumb">
            <a class="thumbnail" href="/resources/wallpapers/wallhaven-138570.jpg"
               data-lightbox="wallhaven-138570.jpg">
                <img class="img-responsive" src="/resources/wallpapers/wallhaven-138570.jpg" />
            </a>
        </div>

        <div class="col-lg-3 col-md-4 col-xs-6 thumb">
            <a class="thumbnail" href="/resources/wallpapers/wallhaven-29611.jpg"
               data-lightbox="wallhaven-29611.jpg">
                <img class="img-responsive" src="/resources/wallpapers/wallhaven-29611.jpg" />
            </a>
        </div>

</div>

1 个答案:

答案 0 :(得分:0)

文件列表在控制器的构造函数中创建。在应用程序启动时,此控制器仅被调用一次,因为Spring bean是单例(默认情况下)。

如果您需要最新的文件列表,请在home()方法中创建该列表,而不是在构造函数中创建。

此外,使您的服务无状态,并且不要使用公共字段。我认为这项服务实际上并不实用。