JSP基础(六)——JSP的动作元素

     不同于JSP指令元素,JSP动作元素(Action Element)是在客户端请求时动态执行的,是通过XML语法格式标记来实现控制Servlet引擎行为的。JSP动作元素是一种特殊标签,并且以前缀jsp和其他的HTML标签相区别,利用JSP动作元素可以实现很多功能,包括动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码等。JSP定义了几个预设的Action Element标签。


JSP预设Action Element标签:

1.JavaBean(在后面学习JavaBean时再详细总结)

    <jsp:useBean>   使用JavaBean

    <jsp:setProperty>  设置JavaBean的属性值

    <jsp:getProperty>  取得JavaBean的属性值

    <jsp:param>    设置传达参数


2.一般元素

    <jsp:plugin>    载入Java Applet或javaBean

    <jsp:forward>    网页重新定向

    <jsp:include>     载入HTML或JSP文件


3.XML(2.0新增)

    <jsp:attribute>   设置标签属性

    <jsp:body>       动态设置XML标签主体

    <jsp:element>     动态设置XML标签


下面我来详细总结一下一般性的Action Element的使用方式!!!


一、<jsp:include>

    <jsp:include>动作元素可以用来包含其他静态和动态页面。<jsp:include>的包含是运行时包含,同时支持编译时包含。<%@ include file=""%>指令是编译时包含,编译时包含只是将静态文件内容加载到JSP页面中,优点是速度快;运行时包含是指包含的文件在运行时被JSP容器编译执行。


1.1 <jsp:include>动作元素的语法格式

▶带参数

<jsp:includepage="relative URL"flush="true|false"/>

▶不带参数

<jsp:includepage="relative URL" flush="true|false">

<jsp:param name="attributeName" value="attributeValue"/>

<jsp:param...

</jsp:include>

其中,relative URL 为被包含文件的相对路径;属性flush为true时,表示实时输出缓冲区。

<jsp:param>用于在包含文件时传递一些参数,一个<jsp:include>中可以包含一个或多个<jsp:param>动作元素。


1.2 <jsp:include>动作元素使用实例

 例:文件jsp_include.jsp静态包含文件static.html,动态包含action.jsp

static.html代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>static.html文件</title>
</head>
<body>
<form method="post" action="jsp_include.jsp">
<table>
    <tr>
        <td>please input your name:</td>
        <td><input type="text" name="name">
    </tr>
    <tr>
        <td>input your password:</td>
        <td><input type="password" name="password"></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" value="login"></td>
    </tr>   
</table>
</form>
</body>
</html>

jsp_include.jsp代码如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp_include.jsp文件</title>
</head>
<body>
<%@ include file="static.html" %>
<%
//静态包含只是把文件包含进来 
%>
<a href="action.jsp">goto action--></a>
<br>
<!-- 超链接转到action.jsp文件和动态包含该文件的显示是不同的 -->
this example show include works
<br>
<!-- 动态包含文件并传递参数 -->
<%
    String name = (String)request.getParameter("name");
    String pwd = (String)request.getParameter("password");
%>
<jsp:include page="action.jsp" flush="true">
    <jsp:param name="a1" value="<%=name %>"/>
    <jsp:param name="a2" value="<%=pwd %>"/>
</jsp:include>
</body>
</html>

action.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>action.jsp文件</title>
</head>
<body>
举例说明动态包含的工作原理
<br>
参数a1: name:
<%=request.getParameter("a1")%>
<br>
参数a2: password:
<%=request.getParameter("a2") %>
<br>
<%
	out.println("hello from action.jsp");
%>    
</body>
</html>
结果如下:




    其中,方法String request.getParameter("parameterName")以字符串的形式返回客户端传来的某一个请求参数的值,改参数名由parameterName指定。当传递给此方法的参数名没有实际参数与之对应时,返回null。

    action.jsp的内容是动态变化的,他的内容由参数a1,a2决定,而static.html文件的内容是不变的。超链接中并没有传递参数,所以a1和a2都显示null。


1.3 JSP中include指令与include动作的区别

▶include指令是指把其他页面的Java代码加进来,和本页面的代码合并在一起,相当于把源代码从那个页面复制到本页面中,然后编译。并且由于本页面编译时已经包含了别的文件的源代码,所以以后其他页面更改时,本页面不会理,因为已经编译过了。JSP引擎将对所包含文件进行语法分析。

▶<jsp:include>动作是指两个页面的代码运行完以后,再把包含的那个页面运行后的HTML结果页面,加到本页面运行后的HTML结果页面中来。所以是运行时包含,并且还可以传递参数给被包含页面。JSP引擎不对所包含的文件进行语法分析。


二、<jsp:forward>

   <jsp:forward>用于在服务器端结束当前页面的执行,并从当前页面跳转到其他指定页面。转向的目标页面可以是静态的HTML页面、JSP文件或Servlet类。语法与<jsp:include>类似。


 2.1 <jsp:forward>语法格式

▶带参数

<jsp:forwardpage="pageURL"/>

▶不带参数

<jsp:forwardpage="pageURL"/>
<jsp:param name="attributeName" value="attributeValue"/>
<jsp:param...
</jsp:forward>


2.2 <jsp:forward>动作元素使用实例

<jsp:forward>操作的典型使用就是登录,如进行权限检验的页面。
例:logoin.jsp是用户登陆界面,checklogin.jsp是登录检验页面,当验证通过后,把页面forward到success.jsp页面,如不成功,就把页面forward到login.jsp页面进行重新验证。

login.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>这是login.jsp页面</title>
</head>
<body>
<form method="get" action="checklogin.jsp">
    <table>
        <tr>
            <td>输入用户名:</td>
            <td><input type="text" name="name" value=<%=request.getParameter("user") %>></td>
        </tr>
        <tr>
            <td>输入密码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr colspan="2">
            <td><input type="submit" value="login"></td>
        </tr>
    </table>
</form>
</body>
</html>
checklogin.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>这是checklogin.jsp页面</title>
</head>
<body>
<%--进行登陆检查 --%>
<%
    String name=request.getParameter("name");
    String password=request.getParameter("password");
    //如果验证通过,forward-->success.jsp,否则forward-->login.jsp
    if(name.equals("Amy") && password.equals("123456")) {
%>
<jsp:forward page="success.jsp">
    <jsp:param name="user" value="<%=name %>"/>
</jsp:forward>
<%  }else{ %>
<jsp:forward page="login.jsp">
    <jsp:param value="<%=name %>" name="user"/>
</jsp:forward>
<%  } %>
</body>
</html>
success.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>这是success.jsp页面</title>
</head>
<body>
登录成功!<br>
*******Welcome******* <%=request.getParameter("user") %>
</body>

</html>
执行结果




    注意,在页面重定向的过程中(后面两个截图中),地址栏的地址并没有发生变化,这样防止用户跳过登录验证页面而直接进入到其他网页。另外,由于地址不变,就不会产生新的request,可在页面重定向时不传递参数。


三、<jsp:param>

    ▶<jsp:param>元素主要是用来传递参数给JSP程序,而由程序取得参数值,在程序中便是一个变量值。

    ▶语法:<jsp:paramname="attributeName"value="attributeValue"/>
name属性表示传递参数的名称,并通过value属性来设置属性的值。且JSP操作元素和HTML元素不同,属性值必须加上双引号“ ”,否则执行时会报错。

    ▶使用<jsp:param>元素来传递参数,在JSP程序中通过request.getParameter("attributeName");来取得参数的值。

    ▶<jsp:param>必须配合<jsp:inclue>、<jsp:forward>和<jsp:plugin>等元素,在加载外部程序或是网页转换的时候,传递参数给另外一个JSP程序



四、<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>动作

4.1 <jsp:useBean>

4.1.1<jsp:useBean>用来加载JSP页面中使用的JavaBean,其语法格式如下:

   <jsp:useBean  id="beanIntanceName"  scope="page|request|session|application"  class="package.class"></useBean>

     其中,id 指定该JavaBean的实例变量的名称,scope 指定该Bean变量的有效范围。
     page 指只在当前JSP页面有效;request 指在任何执行相同请求的JSP文件中使用Bean,直到页面执行完毕;session 指从创建该Bean开始,在相同session下的JSP页面中可以使用该Bean;application 指从创建Bean开始,在相同application下的JSP下的JSP页面中可以使用该Bean。


 4.1.2 <useBean>简单示例    

▶class 属性指定Bean的类路径和类名,不可接受动态值,这个class不能是抽象的

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>useBean.jsp页面</title>
</head>
<body>
<h1>
    <jsp:useBean id="clock" class="java.util.Date"/> 
    Now,It's <%=clock %>
</h1>
</body>
</html>


▶bean属性用于指定Bean的名字,可以接收动态值,beanName属性必须与type属性结合使用,不能与class属性同时使用。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp:useBeanBeanName演示</title>
</head>
<body>
<h1>
    <jsp:useBean id="clock" type="java.io.Serializable" beanName="java.util.Date"/>
    Now, it's <%=clock %>
</h1>
</body>
</html>



4.2 <jsp:setProperty>

4.2.1 <jsp:setProperty>用于设置Bean的属性值。语法格式:

<jsp:setProperty
    name="beanInstanceName"
    {
        property="*"|
        property="propertyName" [param="parameter"]|
        property="propertyName"value="{String|<%=expression%>}"
    }
/>


4.2.2 <jsp:setProperty>动作用来设置已经实例化的Bean对象的属性,它有两种方法:

▶ 可以在jsp:useBean元素的外面使用<jsp:setProperty>

<jsp:useBean id="myName".../>
...
<jsp:setProperty name="myName"property=“someProperty” .../>

此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。


▶ 把<jsp:setProperty>放在jsp:useBean元素的内部

<jsp:useBean id="myName"...>
...
<jsp:setProperty name="myName"property=“someProperty” .../>
</jsp:useBean>

此时,<jsp:setProperty>只有在新建Bean实例时才会执行,如果使用现有实例,则不执行<jsp:setProperty>

注:<jsp:setProperty>中name值必须和<jsp:useBean>中的id值相同,且大小写敏感


4.2.3 <jsp:setProperty>的属性和用法

name (必须有)

    表示要设置的是那个Bean

property(必须有)

    表示要设置那个属性

    有一种特殊方法,如果property的值是“*”,表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应属性的set方法。

value(可选,不能与param同时用)

    用来指定Bean属性的值。

    字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、Boolean、boolean、byte、Byte、char、Character。

param(可选,不能与value同时用)

    指定用哪个请求参数作为Bean属性的值。

    如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,可以让Bean自己提供默认属性的值,只有当请求参数明确指定了新值时才修改默认属性值。


4.3 <jsp:getProperty>

     使用<jsp:getProperty>可获取Bean的属性值,用于在页面中显示。

    <jsp:getProperty name="beanInstanceName" property="propertyName"/>

    其中Bean的名字name由<jsp:useBean>中的id指定;property指定Bean的属性名。



五、<jsp:plugin>

<jsp:plugin>功能在于从JSP网页中加载Java Applet或JavaBean程序组件,与HTML的<Applet>与<Object>标签有着类似的功能。这个元素有许多属性设置

▶type    加载Java程序的类型,可设置的值有applet和bean。

▶code    加载Java程序编译后的类名称,如showpic.class。

▶codebase    编译后Java程序类所在的目录,可设置绝对路径或者相对路径。若未设置此属性,则以当前执行网页所在的目录为默认值。

▶name     用来对加载的Java Applet或JavaBean程序设置一个用以识别的名称。

▶align    设置加载的程序在窗口的对齐方式,可设置的有bottom(下对齐)、top(上对齐)、middle(居中)、left(左对齐)、right(右对齐)。

▶height     加载的程序在窗口中显示的高度。

▶width     加载的程序在窗口中显示的宽度。

▶hspace     加载程序的显示区与网页其他内容的水平间距。

▶vspace    加载程序的显示区与网页其他内容的垂直间距。

▶<jsp:params>    若要传递参数给加载的程序,则必须在<jsp:params></jsp:params>的起始和结束标签中使用<jsp:param>操作元素来设置。



补充:Post与Get的差异:

     标签<form>的Method属性有两个取值,Post和Get,两者主要差别在于数据的传输方式。Post将所要传送的数据包包含在HTTP文件头中,隐藏了提交信息,适用于传输大量数据;Get则是将数据直接串接在网址栏后端,只适合数据量较小时用,速度快,如百度就是用的get方式。




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值