假设您的 bean User 有一个名为 getName() 的方法
<jsp:useBean id="user" scope="request" class="com.example.User" />
// ...
<h1>Hello <jsp:getProperty name="user" property="name" /></h1>
Run Code Online (Sandbox Code Playgroud)
范围可能不是请求:取决于你想要什么(会话、页面等)
编辑:您的第二个问题是关于在您的 jsp 中调用业务方法
事实是,您不应该在 JSP 中调用业务方法。您的 JSP 页面应该只显示静态(html 等)和动态(例如 bean)内容。如果您遵循 MVC 模式,则业务工作将委托给 servlet。您的 JSP 只是简单的视图(读取 bean 的属性)并且被禁止(在目录 WEB-INF 中)。
<input
type="hidden" name="action" value="update" />
或<input
type="hidden" name="action" value="register" />
您还可以显示动态内容(bean)。为此,您应该考虑使用 JSTL。
示例(servlet 在请求范围内发送 Movie bean 的 ArrayList):
<c:forEach items="${requestScope.results}" var="movie">
// ${movie.title}
// etc
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
在doPost方法中(因为我们在 html 形式中使用 POST 方法),您可以根据收到的操作分派业务逻辑:request.getParameter("action")
如果 action 是update,那么我们执行更新业务逻辑。
如果 action 是register,那么我们执行 register 业务逻辑。
等等 ...
现在,我们可以在请求范围内存储一些数据以与 jsp 页面进行通信:
ArrayList<Movie> results = new ArrayList<Movie>();
results.add(new Movie(...));
// etc...
request.setAttribute("results", results);
Run Code Online (Sandbox Code Playgroud)
最后,发送数据并显示jsp:
request.getRequestDispatcher("/WEB-INF/update.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
web.xml 的示例(带有映射为欢迎文件 index.jsp 的 servlet)
<servlet>
<servlet-name>Search</servlet-name>
<servlet-class>Servlets.Search</servlet-class>
</servlet>
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class>Servlets.Register</servlet-class>
</servlet>
<servlet>
<servlet-name>Update</servlet-name>
<servlet-class>Servlets.Update</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Search</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Register</servlet-name>
<url-pattern>/Register.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Update</servlet-name>
<url-pattern>/Update.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)