0

下面是 servlet 类,它通过在bean类的对象上调用方法来设置名称,然后转发到 jsp 页面。

package BeanTesters;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

 public class Controller extends HttpServlet {
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
    Bean bean = new Bean(); 
    bean.setName("Suhail Gupta");
    //request.setAttribute("name", bean);
    RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
    rd.forward(request, response);
  }
}

这是 bean 类:

package BeanTesters;

 public class Bean {

  private String name = null;

  public void setName(String n) {
    name = n;
  }

  public String getName() {
    return name;        
  }
 }

以下是尝试显示 servlet 设置的名称的 jsp 片段:

<jsp:useBean id="namebean" class="BeanTesters.Bean" scope="request" />
    Person created by the Servlet : <jsp:getProperty name="namebean" property="name" />

我得到的结果是:Servlet 创建的人:null为什么我得到一个空值?

4

1 回答 1

1

因为jsp:useBean标签试图在"namebean"请求的属性中获取一个 bean,并且由于您没有在该属性名称下存储任何内容,所以它创建了一个。因此,JSP 使用的 bean 实例与 servlet 中创建的实例不同。

将以下代码放入您的 servlet,您将获得所需的行为:

request.setAttribute("namebean", bean);

请注意,这些jsp:xxx标签已完全过时,不应再使用。您应该改用 JSP 表达式语言 (EL) 和 JSTL:

Person created by the Servlet : ${namebean.name}

甚至更好的是,确保名称中存在的潜在 HTML 字符被正确转义:

Person created by the Servlet : <c:out value="${namebean.name}"/>
于 2012-03-13T08:08:47.470 回答