一尘不染

javax.servlet.ServletException:在范围内找不到bean [name]

jsp

我收到此错误:

javax.servlet.ServletException: bean not found within scope

在此页面顶部的页面上。

<jsp:useBean id="bean" type="com.example.Bean" scope="request" />

该类存在于类路径中,今天上午工作,并且我不了解范围内未找到的含义。

这是怎么引起的,我该如何解决?


阅读 367

收藏
2020-06-08

共1个答案

一尘不染

您需要class属性而不是type属性。

以下:

<jsp:useBean id="bean" type="com.example.Bean" scope="request" />

确实 基本上 幕后如下:

Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);

if (bean == null) {
    throw new ServletException("bean not found within scope");
}

// Use bean ...

而以下:

<jsp:useBean id="bean" class="com.example.Bean" scope="request" />

基本上在后台执行以下操作:

Bean bean = (Bean) pageContext.getAttribute("bean", PageContext.REQUEST_SCOPE);

if (bean == null) {
    bean = new Bean();
    pageContext.setAttribute("bean", bean, PageContext.REQUEST_SCOPE);
}

// Use bean ...

如果以前的工作,并没有“在突然”的工作,那么就意味着 事情 是负责把豆的范围已停止工作。例如,一个servlet,它在中执行以下操作doGet()

request.setAttribute("bean", new Bean());
request.getRequestDispatcher("page.jsp").forward(request, response);

也许您直接通过URL调用了JSP页面,而不是通过URL调用了Servlet。如果您想禁用对JSP页面的直接访问,则将它们放入/WEB-INF并转发给它。

2020-06-08