home.jsp
<jsp:useBean id="username" class="java.lang.String" scope="application"/> <% username="Jitendra"; %> <jsp:include page="include.jsp"/>
include.jsp
<%=username%>
这给出了一个错误,指出即使在Bean的范围是application的情况下,include.jsp中也没有定义“ username”。
对于您的问题,您使用老式scriptlet在本地声明的任何内容都 不会 与链接jsp:useBean。另外,声明本地scriptlet变量在包含的页面中 不可见,您需要至少将它们明确地放入请求范围内。因为使用scriptlet是一个_坏习惯_ 。我建议完全忘记它。
jsp:useBean
在您的特定情况下,只需创建一个 真正的 Java bean来保存数据。也就是说,具有(隐式)默认构造函数和私有属性的类,这些类由公共获取程序/设置程序公开。这是一个基本示例:
public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
然后,您可以使用Servlet类预处理请求。您可以doGet()为此使用servlet的方法。
doGet()
protected void doGet(HttpServletRequest request, HttpServletResponse response) { User user = new User(); user.setName("Jitendra"); request.setAttribute("user", user); // Store in request scope. request.getRequestDispatcher("/WEB-INF/show.jsp").forward(request, response); }
例如web.xml,将servlet映射到上。然后,该servlet应该可以被servlet访问,并且可以立即执行。url- pattern``/show``http://example.com/context/show``doGet()
web.xml
url- pattern``/show``http://example.com/context/show``doGet()
然后更改/创建show.jsp放置在其中的JSP文件,/WEB- INF以防止直接访问(这样客户机就不能通过它来访问它,http://example.com/context/show.jsp而是“强制”调用该servlet),其行如下:
show.jsp
/WEB- INF
http://example.com/context/show.jsp
<p>User name: ${user.name}</p>
的${user}指的是与任何请求/会话/应用属性键相关联的对象user。这确实在幕后jspContext.findAttribute("user")。当返回的User实例符合javabean规范时,${user.name}它将getName()在User实例上调用方法,并且EL将显示其结果。
${user}
user
jspContext.findAttribute("user")
User
${user.name}
getName()
哦,我要补充的,你就 不会 需要jsp:useBean这个作为servlet已经创建,并把所需的bean的范畴。
就是说,我建议从一本不错的JSP / Servlet教程/书开始。例子:
希望这可以帮助。