Java 在jsp中调用request.getAttribute时,该属性为null

Java 在jsp中调用request.getAttribute时,该属性为null,java,jsp,servlets,web,Java,Jsp,Servlets,Web,它通过单击a href调用Servlet <li ><a href="<%=request.getContextPath() %>/ProviderServlet">privilegeManagement</a></li> 此代码包含在main.jsp中的navigation.jsp中 <%@ page language="java" contentType="text/html; charset=UTF-8

它通过单击a href调用Servlet

    <li ><a href="<%=request.getContextPath() %>/ProviderServlet">privilegeManagement</a></li>
  • 此代码包含在main.jsp中的navigation.jsp中

        <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="java.util.*"%>
    <%@page import="com.chenfeng.javabean.ProviderArchives"%>
    <%@ taglib prefix="c"    uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>main</title>
    </head>
    <body>
        <%@ include file="navigation.jsp"%>
        <div>
            <%@ include file="management.jsp"%>
        </div>
        <div>
          <%
                 String k = (String)request.getAttribute("hu");
                 out.println(k);
          %>
           <c:forEach items="${list}"  var="item">
           <tr> 
            <td>${item.provideID() }</td> 
            <td>${item.GID }</td> 
            <td>${item.Gname }</td> 
            <td>${item.PID }</td> 
            <td>${item.TEL }</td> 
            <td>${item.ADDR }</td>
            <td> 
             <a href="QueryUserByIdServlet?id=${item.provideID }">Modify</a> 
             <a href="DeleteUserServlet?id=${item.provideID }">Delete</a> 
            </td> 
           </tr> 
          </c:forEach> 
        </div>
    </body>
    </html>
    
    然后是我的servlet

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        ProviderDao pd  = new ProviderDao();
        List<ProviderArchives> list = pd.getArchives();
        String str = "chenfeng";
        req.setAttribute("list", list);
        req.setAttribute("hu" , str);
        getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(req,resp);
    }
    
    @覆盖
    受保护的void doGet(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
    //TODO自动生成的方法存根
    ProviderDao pd=新ProviderDao();
    List List=pd.getArchives();
    String str=“晨风”;
    请求设置属性(“列表”,列表);
    请求设置属性(“hu”,str);
    getServletContext().getRequestDispatcher(“/jsp/main.jsp”).forward(req,resp);
    }
    
    然后是我的main.jsp

        <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="java.util.*"%>
    <%@page import="com.chenfeng.javabean.ProviderArchives"%>
    <%@ taglib prefix="c"    uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>main</title>
    </head>
    <body>
        <%@ include file="navigation.jsp"%>
        <div>
            <%@ include file="management.jsp"%>
        </div>
        <div>
          <%
                 String k = (String)request.getAttribute("hu");
                 out.println(k);
          %>
           <c:forEach items="${list}"  var="item">
           <tr> 
            <td>${item.provideID() }</td> 
            <td>${item.GID }</td> 
            <td>${item.Gname }</td> 
            <td>${item.PID }</td> 
            <td>${item.TEL }</td> 
            <td>${item.ADDR }</td>
            <td> 
             <a href="QueryUserByIdServlet?id=${item.provideID }">Modify</a> 
             <a href="DeleteUserServlet?id=${item.provideID }">Delete</a> 
            </td> 
           </tr> 
          </c:forEach> 
        </div>
    </body>
    </html>
    
    
    主要的
    ${item.provideID()}
    ${item.GID}
    ${item.Gname}
    ${item.PID}
    ${item.TEL}
    ${item.ADDR}
    
    然后,当我在服务器上运行时,它显示如下
    提前感谢您的帮助

    这很清楚。在转发
    Servlet上下文对象时,可以设置
    请求对象的
    属性
    。
    而不是:

    getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(req,resp);
    
    写:

    req.getRequestDispatcher("/jsp/main.jsp").forward(req,resp);
    

    实际上,这段代码没有任何原因。但是eclipse遇到了问题。在我删除build目录中的类文件并重新构建它之后,真正的问题日志输出。

    您从未使用属性
    hu
    ,那么为什么它甚至在那里?您是否检查过以确保
    list
    属性不为空?检查您的服务器日志我想一定有一个异常,您没有注意到这不是原因,我以前使用过您的建议。getServletContext()是项目的get absolute path,但req.getRequestDispatcher是相对路径。@JingHu然后,正如Tim所说,检查列表变量。它可能是空的。