javax.servlet.ServletException:在作用域内找不到bean [name]

stu*_*stu 16 java jsp usebean

我收到这个错误:

javax.servlet.ServletException: bean not found within scope
Run Code Online (Sandbox Code Playgroud)

在顶部的页面上.

<jsp:useBean id="bean" type="com.example.Bean" scope="request" />
Run Code Online (Sandbox Code Playgroud)

该类存在于类路径中,它今天早上起作用,而且我没有得到范围内未找到的内容.

这是怎么造成的,我该如何解决?

Bal*_*usC 33

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

下列:

<jsp:useBean id="bean" type="com.example.Bean" scope="request" />
Run Code Online (Sandbox Code Playgroud)

确实基本上幕后如下:

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

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

// Use bean ...
Run Code Online (Sandbox Code Playgroud)

以下内容:

<jsp:useBean id="bean" class="com.example.Bean" scope="request" />
Run Code Online (Sandbox Code Playgroud)

幕后基本上做了以下几点:

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

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

// Use bean ...
Run Code Online (Sandbox Code Playgroud)

如果以前的工作,并没有奏效"在突然的",那么就意味着事情是负责把豆的范围已停止工作.例如,一个servlet在以下位置执行以下操作doGet():

request.setAttribute("bean", new Bean());
request.getRequestDispatcher("page.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

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