JSP笔记:动作元素小结--20190919

简介

JSP动作元素与指令元素不同的是,JSP动作元素在请求处理阶段起作用。

JSP动作元素是用XML语法写成的,利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

语法格式

<jsp:action_name attribute="value" />

action_name处写标准动作,之后填写相应的属性和值。可以存在有多个属性。

JSP也有单双标签,但是,很多元素都能够自由地在单双标签间转换(一般而言,在不改变基本功能前提下,单标签总能转成双标签,双标签却不一定能转成单标签)

所有动作元素的公共属性

(1)id属性:id属性是动作元素的唯一标识,能够在JSP页面中引用。id值能够通过PageContextl来调用。

(2)scope属性:该属性用于定义作用域。id属性与scope属性有直接关系,scope定义了id对象的寿命。与四大作用域的值一样,从小到大依次为:page、request、session、application。

<jsp:include>动作元素

除了公共属性外,它有两个属性,分别是page和flush,常用的是page属性。

在之前有一个include指令元素<%@ include file=""%>,二者的区别是:指令是在JSP文件被转换成Servlet时引入文件;而动作元素是在页面请求的时候。

所以,相当于页面请求了两个文件,生成了两个servlet容器(只不过一个容器嵌套了一个容器)。

ttt
<jsp:include page="bbb.jsp"></jsp:include>
ttt
<jsp:include page="bbb.jsp"/>

双标签和单标签两种写法的效果相同。

<jsp:useBean>动作元素

此动作元素可以加载一个能够在jsp页面中使用的对象,它的写法如下:

<jsp:useBean id="user" scope="page" class="test.com.User"/>

Id和scope是公共属性,class指定该对象的类型

也可以写成:

<jsp:useBean id="user2" scope="page" class="test.com.User"></jsp:useBean>

二者都能够达到效果,但是,存在有一定的区别,详细信息可看接下来的<jsp:setProperty>动作元素。

<jsp:setProperty>动作元素

此动作元素用来设置已经实例化的Bean对象的属性,有两种写法。

(1)写在useBean之后:这个时候,只要能够找到对应对象,就会设置值。

<jsp:useBean id="user" scope="page" class="test.com.User"/>
<jsp:setProperty name="user" property="username" value="newre" />
<%=user%>

    转换的Java部分如下:

 

(2)写在useBean之中:只有在实例化时才会设置对象的值。

<jsp:useBean id="user2" scope="page" class="test.com.User">
<jsp:setProperty name="user2" property="username" value="newre"/>
</jsp:useBean>
<%=user2%>

转换的Java代码如下:

 

(3)再看一个整体的比较:

    out.write("<!--第一种情况-->\r\n");
    test.com.User user = null;
    user = (test.com.User) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.PAGE_SCOPE);
    if (user == null){
        user = new test.com.User();
        _jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.PAGE_SCOPE);
    }
    out.write("<!--设置属性(位于实例化对象之外)-->\r\n");
    org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("user"), "username", "newre", null, null, false);
    out.write("\r\n");
    out.write("<!--第二种情况-->\r\n");
    test.com.User user2 = null;
    user2 = (test.com.User) _jspx_page_context.getAttribute("user2", javax.servlet.jsp.PageContext.PAGE_SCOPE);
    out.write("<!--第二种情况:只有在实例化时才会设置属性值-->\r\n");
    if (user2 == null){
        user2 = new test.com.User();
        _jspx_page_context.setAttribute("user2", user2, javax.servlet.jsp.PageContext.PAGE_SCOPE);
        org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("user2"), "username", "newre", null, null, false);
    }

我们能够得到结果:双标签里设置属性,相当于实例化时属性会被设置(这里有一个单例,保证一个对象中只能实例化一次),而单标签是在执行过程中设置属性,和对象实例化无关。

<jsp:getProperty>动作元素

<jsp:useBean>用于定义对象,<jsp:setProperty>用于更改对象中字段值,而<jsp:getProperty>则是用来获取对象中的字段值。

<jsp:useBean id="user" class="test.com.User">

<jsp:setProperty name="user" property="username" value="newre"/>
<jsp:setProperty name="user" property="password" value="111"/>

</jsp:useBean>

用户名

<jsp:getProperty name="user" property="username"/>

密码

<jsp:getProperty name="user" property="username"/>

执行结果:

 

<jsp:forward>动作元素

这个是用动作元素实现的请求转发,它只有一个属性page,用来指定要跳转的地址。

<jsp:forward page="bbb.jsp"></jsp:forward>

跳转后,地址没有发生改变,但是内容已经是bbb.jsp的内容。

其他

由于时间的原因,在此就先介绍这五种动作元素,至于更加详细的内容,以及其他的动作元素,会在之后穿插地补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NewReErWen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值