jsp的范围:useBean

0 java jsp jsp-tags jspinclude java-ee-6

针对home.jsp

<jsp:useBean id="username" class="java.lang.String" scope="application"/>

<%
      username="Jitendra";
%>

<jsp:include page="include.jsp"/>
Run Code Online (Sandbox Code Playgroud)

include.jsp

<%=username%>
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误,即在include.jsp中未定义"username",即使Bean的范围是应用程序...

Bal*_*usC 14

对于您的问题,您使用旧式scriptlet在本地声明的任何内容都不与a链接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;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

在地图这个servlet web.xmlurl-pattern的例如/show.然后应该可以访问此servlet,http://example.com/context/showdoGet()立即执行它.

然后更改/创建show.jsp您放入的JSP文件,/WEB-INF以防止直接访问(以便客户端无法访问它,http://example.com/context/show.jsp但"强制"调用servlet),使用以下行:

<p>User name: ${user.name}</p>
Run Code Online (Sandbox Code Playgroud)

${user}指的是与任何请求/会话/应用程序相关联的属性键的对象user.这在幕后做jspContext.findAttribute("user").当返回的User实例符合javabean规范时,${user.name}will将调用实例getName()上的方法,UserEL将显示其结果.

哦,我要补充的,你就不会需要jsp:useBean这个作为servlet已经创建,并把所需的bean的范畴.

也就是说,我建议从一个体面的JSP/Servlet教程/书开始.例子:

希望这可以帮助.