java – HttpServletRequest突然丢失了对象

我使用print writer直接在servlet中打印一个列表并打印列表.

当我尝试放入jsp时,列表不会打印我是否使用JSTL或scriptlet.

我试图在JSTL和scriptlet中测试该对象是否为null,结果证明它是!

为什么会发生这种情况?我该如何解决这个问题?

有效的Servlet代码

for (Artist artist:artists){
    resp.getWriter().println(artist.getName());
}

将对象放入请求的Servlet代码

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws IOException {        

    ApplicationContext ctx = 
        new ClassPathXmlApplicationContext("com/helloworld/beans/helloworld-context.xml");

    ArtistDao artistDao = (ArtistDao) ctx.getBean("artistDao");
    List<Artist> artists = null;
    try {
        artists = artistDao.getAll();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    req.setAttribute("artists", artists);

    try {
        req.getRequestDispatcher("index.jsp").forward(req, resp);
    } catch (ServletException e) {
        e.printStackTrace();
    }

scriptlet代码突然发现对象为null

<% 

    List<Artist> artists = (List<Artist>) request.getAttribute("artists");

    if (artists == null) {
        out.println("artists null");
    }
    else {
        for (Artist artist: artists){
            out.println(artist.getName());
        }
    }
%>

甚至jstl代码似乎也同意

<c:if test="${artists eq null}">
    Artists are null
</c:if>

<c:forEach var="artist" items="${artists}">
${artist.name}
</c:forEach>

对于我的应用程序,我使用weblogic,spring 2.5.6和ibatis.

最佳答案 我认为这取决于Web服务器.但是,如果不更改以前的目录结构,

尝试将列表放在这样的会话中

req.getSession(false).setAttribute("artists", artists);

在你的jsp中,

List<Artist> artists = (List<Artist>) request.getSession(false).getAttribute("artists"); 

我认为我的方法适用于所有Web服务器.

点赞