JSP 动作元素
jsp:include、jsp:forward、jsp:param、jsp:useBean 等标准动作。
Key Points标准动作用 jsp: 前缀,在请求处理期执行;它们和指令的区别是「运行时」而非「编译时」。
七个常用动作
| Action | Purpose |
|---|---|
jsp:include | 运行期包含另一个页面 |
jsp:forward | 把请求转给另一个页面或 Servlet |
jsp:param | 给 include / forward 的目标传参数 |
jsp:useBean | 查找或创建 JavaBean 实例 |
jsp:setProperty | 给 Bean 赋值,可自动绑定请求参数 |
jsp:getProperty | 输出 Bean 的属性值 |
jsp:plugin | 生成嵌入 Applet 的标签,已废弃 |
include 与 forward
JSP
<%-- 运行期包含,可传参 --%>
<jsp:include page="/WEB-INF/parts/nav.jsp">
<jsp:param name="active" value="orders"/>
</jsp:include>
<%-- 转发:当前页后续内容不会执行 --%>
<jsp:forward page="/login.jsp">
<jsp:param name="from" value="/orders"/>
</jsp:forward>Parameters set with jsp:param are read in the target via request.getParameter or ${param.active}. They apply only to include/forward and never appear in the URL.
useBean 三件套
JSP
<jsp:useBean id="user" class="com.example.User" scope="request"/>
<jsp:setProperty name="user" property="*"/>
<p>姓名:<jsp:getProperty name="user" property="name"/></p>property="*" auto-binds request parameters to matching setters: a field named name fills setName. Convenient in early JSP, but implicit binding is hard to debug; explicit assignment in the controller is preferred today.
动作与指令的差别
Action <jsp: > | ||
|---|---|---|
| When | 翻译期 | 请求处理期 |
| Output | 否 | include / forward 会 |
| Params | 不支持 | 支持 jsp:param |
| Scope | 当前文件 | 当前请求 |
Nothing should be written after
jsp:forward. The spec says the container discards later output, but implementations differ; put it at the very top or use RequestDispatcher.forward from a servlet instead.七个常用动作
| 动作 | 用途 |
|---|---|
| 包含 | 运行期包含另一个页面 |
| 转发 | 把请求转给另一个页面或 Servlet |
| 传参 | 给 include / forward 的目标传参数 |
| 取 Bean | 查找或创建 JavaBean 实例 |
| 设属性 | 给 Bean 赋值,可自动绑定请求参数 |
| 读属性 | 输出 Bean 的属性值 |
| 插件 | 生成嵌入 Applet 的标签,已废弃 |
include 与 forward
JSP
<%-- 运行期包含,可传参 --%>
<jsp:include page="/WEB-INF/parts/nav.jsp">
<jsp:param name="active" value="orders"/>
</jsp:include>
<%-- 转发:当前页后续内容不会执行 --%>
<jsp:forward page="/login.jsp">
<jsp:param name="from" value="/orders"/>
</jsp:forward>jsp:param 传的参数在目标页用 request.getParameter 或 ${param.active} 取。它只对 include / forward 有效,不会写到 URL 上。
useBean 三件套
JSP
<jsp:useBean id="user" class="com.example.User" scope="request"/>
<jsp:setProperty name="user" property="*"/>
<p>姓名:<jsp:getProperty name="user" property="name"/></p>property="*" 会自动把同名请求参数塞进 Bean 的 setter——表单字段叫 name,Bean 有 setName,就自动绑定。这是早期 JSP 的便利,但隐式绑定难调试,现在更推荐在 Controller 里显式赋值。
动作与指令的差别
Directive <%@ %> | Action | |
|---|---|---|
| 执行时机 | 翻译期 | 请求处理期 |
| 产生输出 | 否 | include / forward 会 |
| 传参 | 不支持 | 支持 jsp:param |
| 作用范围 | 当前文件 | 当前请求 |
jsp:forward 之后必须让当前页停止输出。虽然规范要求容器丢弃后续输出,但不同容器行为不完全一致,稳妥做法是把它放在页面最前面,或改用 Servlet 里的 RequestDispatcher.forward。