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方式。