以下是Servlet类,该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 为什么我得到一个null值?
因为jsp:useBean标签试图"namebean"在请求的属性中获取bean ,并且由于您没有在该属性名称下存储任何内容,所以它创建了一个。因此,JSP使用的bean实例与在servlet中创建的实例不同。
jsp:useBean
"namebean"
将以下代码放入servlet中,您将获得所需的行为:
request.setAttribute("namebean", bean);
请注意,这些jsp:xxx标记已完全过时,不应再使用。您应该改用JSP表达式语言(EL)和JSTL:
jsp:xxx
Person created by the Servlet : ${namebean.name}
甚至更好,以确保名称中存在的潜在HTML字符已正确转义:
Person created by the Servlet : <c:out value="${namebean.name}"/>