1.简介:
JSP标签也称之为JSP Action(JSP动作)元素,它用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码,
造成JSP页面难以维护。JSP 动作元素与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。动作元素只有一种语法,它符合XML标准:
<jsp:action_name attribute="value" />
2.指令
用法:
<jsp:include page="head.jsp"></jsp:include>
<p style="color: red;">这里是主体</p>
<jsp:include page="foot.jsp"></jsp:include>
来说明一下动态包含和静态包含的区别:
1.动态包含使用的是JSP动作,指定包含页面的属性是page,静态包含使用的JSP指令,属性是file
2.原理不同:
a) 静态包含是直接将JSP的内容直接嵌入到访问的JSP页面。
将包含的页面的内容直接以out.write()的形式插入到service方法中。
注意:
1.编译出来的servlet只有一个。
2.静态包含是在编译时期将页面代码原封不动包含进来再运行的,所以如果页面之间相同标签的属性如果不同会起冲突,
同理,包含的jsp页面与被包含的jsp页面最好没有重复的html标签。否则会发生覆盖现象。
b) 动态包含是将两个JSP分别编译成不同的servlet,将被包含的servlet输出的
内容包含到自己的页面中,实际上还是在内部调用了include方法
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “foot.jsp”, out, false);
原理是发送了一个请求给被包含的页面,获取到了响应的html(out.write()中的内容)并包含在自己的页面中。
通俗点说就是附加这个被包含的JSP经过编译后的效果,所以可以含有与当前JSP程序中重复的内容,因为在附加过来之前就会被解析掉。
include动作还可以传递参数到包含的页面中,用法:
<jsp:include page="head.jsp">
<jsp:param value="this is value" name="key"/>
</jsp:include>
而后在接收的页面中使用request.getParameter的方式取出:
<% String value = request.getParameter("key"); %>
<%=value %>
3.
jsp:useBean动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得我们既可以发挥Java组件重用的优势,同时也避免了损失JSP区别于Servlet的方便性。jsp:useBean动作最简单的语法为:
<jsp:useBean id="name" class="package.class" scope="page|request|session|application" />
如果不设置scope 默认为page 这里的page对象是内置对象中的pageContext对象,设置的值 可以通过表达式直接获取 <%=pageContext.getAttribute(“name”)%>
实例:
<jsp:useBean id="user1" class="bean.User" scope="session"></jsp:useBean>
<jsp:setProperty property="userID" name="user1" value="1"/>
<jsp:setProperty property="userName" name="user1" value="Harry"/>
<jsp:setProperty property="password" name="user1" value="password"/>
<%=session.getAttribute("user1") %>
注意:scope中的作用域对象之间的数据是不能共享的,如果是session,那么只有session的getAttribute才能够获取到。
4.
jsp:forward动作把请求转到另外的页面,其实就是请求转发。
jsp:forward标记只有一个属性page。语法格式如下所示:
<jsp:forward page="请求转发的URL" />
<jsp:forward page="jspb.jsp"></jsp:forward>