您查询的关键词是:jsp的 usebean 
下面是原始网址 https://www.orcode.com/question/416779_k3a65d.html 在 2020-03-06 15:46:44 的快照。

360搜索与该网页作者无关,不对其内容负责。

jsp的范围:useBean - 或代码

jsp的范围:useBean

针对home.jsp
<jsp:useBean id="username" class="java.lang.String" scope="application"/>
<%
username="Jitendra";
%>
<jsp:include page="include.jsp"/>
include.jsp
<%=username%>
这给出了一个错误,即在include.jsp中未定义“username”,即使Bean的范围是应用程序...     
已邀请:
至于你的问题,你使用旧式scriptlet在本地声明的任何东西都没有与
jsp:useBean
链接。此外,声明本地scriptlet变量在包含的页面中不可见,您需要至少将它们显式放入请求范围。使用scriptlet是一种不好的做法。我建议完全忘掉它。 在您的特定情况下,只需创建一个真正的java bean来保存数据。也就是说,具有(隐式)默认构造函数和私有属性的类由公共getter / setter公开。这是一个基本的例子:
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后,您可以使用servlet类预处理请求。你可以使用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映射到
url-pattern
,例如
/show
。然后可以通过
http://example.com/context/show
访问此servlet,并立即执行其
doGet()
。 然后更改/创建放在
/WEB-INF
中的JSP文件
show.jsp
以防止直接访问(以便客户端不能通过
http://example.com/context/show.jsp
访问它,但“强制”调用servlet),使用以下行:
<p>User name: ${user.name}</p>
${user}
指的是与任何请求/会话/应用程序属性键
user
相关联的对象。这在幕后做了
jspContext.findAttribute("user")
。当返回的
User
实例符合javabean规范时,
${user.name}
将调用
User
实例上的
getName()
方法,EL将显示其结果。 哦,我应该补充一下,你不需要
jsp:useBean
,因为servlet已经创建并将所需的bean放在范围内。 也就是说,我建议从一个体面的JSP / Servlet教程/书开始。例子: Sun Java EE教程第二部分1-8章。 Coreservlets.com JSP / Servlet教程。 Head First Servlets& JSP书。 希望这可以帮助。     
你的代码是“邪恶的”,因为
java.lang.String
并不是真正的bean。值得注意的是,它没有“设置”方法来改变它的文本(这是有意的,它意味着是不可变的)。 访问bean的方法是声明一个,然后使用它的属性(即get()和set()方法后面的名称)来更改它。您不能直接更改实际的bean实例,只能更改其值。     
在Tomcat 6上,
home.jsp
被翻译成Servlet代码:
java.lang.String username = null;
synchronized (application) {
username = (java.lang.String) _jspx_page_context.getAttribute("username",
PageContext.APPLICATION_SCOPE);
if (username == null){
username = new java.lang.String();
_jspx_page_context.setAttribute("username", username,
PageContext.APPLICATION_SCOPE);
}
}
username="Jitendra";
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,
"include.jsp", out, false);
虽然行为相同,但生成的确切代码取决于应用程序服务器实现。 本地
username
变量的范围不会扩展到将从
include.jsp
生成的Servlet。您没有将值“Jitendra”设置到应用程序范围中,仅设置局部变量的值。 正如其他人所指出的那样,不可变的String不会成为一个非常好的bean。     

要回复问题请先登录注册