JSP 动作指令
1、概述
2、常见的 JSP 动作指令
3、JavaBean
4、常用 JSP 动作指令
---4.1 jsp:include
---4.2 jsp:useBean
---4.3 jsp:setProperty
---4.4 jsp:getProperty
---4.5 代码示例
---4.6 jsp:forward
---4.7 jsp:param
概述
1、动作指令和编译指令不同,编译指令是通知 servlet 引擎的处理消息。而动作指令是运行时的动作。
2、编译指令在将 JSP 编译成 servlet 时起作用,而处理指令通常可替代成 JSP 脚本。
3、语法:
<jsp:action_name attribute="value" />
常见的 JSP 动作指令
<jsp:include>
在页面被请求的时候引入一个文件。<jsp:useBean>
寻找或者实例化一个 JavaBean。<jsp:setProperty>
设置 JavaBean 的属性。<jsp:getProperty>
输出某个 JavaBean 的属性。<jsp:forward>
把请求转到一个新的页面。<jsp:param>
该标签可以作为其他标签的子标签,为其他标签传递参数(include 和 forward)。
---------------------------以上为常用---------------------------<jsp:plugin>
根据浏览器类型为Java插件生成OBJECT或EMBED标记。<jsp:element>
定义动态XML元素<jsp:attribute>
设置动态定义的XML元素属性。<jsp:body>
设置动态定义的XML元素内容。<jsp:text>
在JSP页面和文档中使用写入文本的模板
JavaBean
1、JavaBean是一个可重复使用的软件组件,遵循特定的接口标准,对Java类的方法命名、行为、继承与实现等有特定的要求。
2、JavaBean 是 JavaWeb 应用的模型组件。
3、JSP 和 servlet 可以调用 JavaBean 完成业务逻辑的操作。
4、JSP 只支持非可视化的 JavaBean。
5、非可视化的 JavaBean 又可分为业务 Bean 和数据 Bean。业务 Bean 用来封装业务逻辑和数据库操作等,数据 Bean 用来封装数据。
5、利用 JavaBean 可以实现业务逻辑和前台应用程序的分离,实现代码的重用,从而提高软件的开发效率。
(1)必须是一个公共的类,即访向控制符为 public。
(2)必须包含有一个访问控制符为 public 的无参构造方法。
(3)属性都是私有的,即访向控制符为 private 。
(4)属性通过 get/set 方法来访问。
- 代码示例
package com.aaa;
public class TestBean {
private String userName;
private String passWord;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
常用 JSP 动作指令
jsp:include
- 这个动作标签可以将另外一个文件内容包含到当前 JSP 页面中,被包含的页面可以是静态的,也可以是动态代码,语法如下。
< jsp:indude page = "url" flush ="false I true"/>
或者是
<jsp:indude page = "uri" fush = "alse I true"> 子动作 </jsp:indude >
- page:该属性用于指定被包含文件的相对路径。
- flush:可选参数,用于设置是否刷新缓冲区,如果为 true,则在当前页面输出使用了缓冲区的情况下,将先刷新缓冲区,然后再执行包含操作。如果为 false 则相反;默认为 false,当<jsp: include >动作包含子动作时,使用第二种格式,否则可使用第一种格式。
<jsp: include >
动作和 include 指令的差别在于,include 动作包含的页面在运行时被加入,而 include 指令在编译的时候就被加入了。- 代码示例:
test.jsp 在页面上输出用 “*” 组成的直角三角形,index.jsp 包含 test.jsp 代码如下。
index. jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>动作包含</title>
</head>
<body>
<h4>输出三角形</h4>
<jsp:include page="test.jsp"/>
</body>
</html>
test.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>输出三角形</title>
</head>
<body>
<%
for(int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
out.print("*");
}
out.print("<br>");
}
%>
</body>
</html>
jsp:useBean
- 语法(当包含子动作时使用第一种格式)
<jsp:useBean id="变量名" class="类路径" scope="储存范围" type="数据类型" >
子动作
</jsp:useBean >
<jsp:useBean id="变量名" class="类路径" scope="储存范围" type="数据类型" />
- 属性
1、id:命名引用该 Bean 的变量。如果能够找到 id 和 scope 相同的 Bean 实例,jsp:useBean 动作将使用已有的Bean实例而不是创建新的实例。
2、class:指定 Bean 的完整包名。
3、scope:指定 Bean 在哪种上下文内可用,可以取下面的四个值之一:page,request,session 和 application。
(1)默认值是 page,表示该 Bean 只在当前页面内可用(保存在当前页面的 PageContext 内)。
(2)request 表示该 Bean 在当前的客户请求内有效(保存在 ServletRequest 对象内)。
(3)session 表示该 Bean 对当前 HttpSession 内的所有页面都有效。
(4) application 则表示该 Bean 对所有具有相同 ServletContext 的页面都有效。
4、type:指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。
5、beanName:指定 Bean 的名字。如果提供了 type 属性和 beanName 属性,允许省略 class 属性。
jsp:setProperty
<jsp:setProperty>
动作常和 <jsp: useBean> 动作一起使用,为 JavaBean 中属性赋值,可以通过以下四种方式赋值。
1、<jsp:setProperty name="id" property="*"/>
在提交数量较多的 JSP 页面中,一般使用这种方法接收并设置 JavaBean 中的属性值。
当接收到一个 request 对象时,JSP 的内在机制会将 request 对象中的参数名和 JavaBean 中的属性进行匹配,并将名字相同的参数赋值给 JavaBean 的同名属性。
使用这种方法时,要求 JavaBean 中的属性名和 request 对象中的参数名字匹配。如果参数和 JavaBean 中的属性值不匹配,会导致无法赋值。
2、<jsp:setProperty name="id" property="属性名" value= "值" />
value 值可以是一个字符串,也可以是表达式。
这种方式采用特定的值给 JavaBean 中的特定属性赋值,要求 value 值和 JavaBean 中的属性类可以成功转化。
3、<jsp:setProperty name="id" property="属性名" param= "参数名" />
property 指的是 JavaBean 中待赋值的属性名,param 值请求中的参数名。
此参数可以来自于表单也可以是来自于 URL 传递的参数。
JSP 内部机制从 request 对象中获取相应的参数值,并赋值给 JavaBean 中指定的属性值。
注意:如果指定了 param 值,就不可以指定 value 值,即 param 和 value 不可以同时使用。
4、<jsp:setProperty name="id" property="属性名" />
利用表单对 JavaBean 进行赋值时,通常使用这种方式。
既没有指定 value,也没有指定 param,那么执行该动作的时候,会从 request 对象中寻找与属性名相同的参数值,如果有,则将该参数值赋值给 JavaBean 中的属性。
注意:如果利用表单给 JavaBean 赋值,除非使用 param 指定参数,负责表单中的控件必须与 JavaBean 中的属性值相匹配。
jsp:getProperty
1、<jsp:getProperty>
用于获取 JavaBean 中的属性值,并且将属性值转化成字符串发送到输入流中,并且显示到页面上。
2、语法如下:
<jsp:getProperty name="实例名" property="属性名" />
name:指定某一范围的 JavaBean 实例的引用。
property:指定 JavaBean 属性名称。
代码示例
TestBean.java:
package com.aaa;
public class TestBean {
private String userName;
private String passWord;
private int age;
//get、set省略...
}
regist.html:
<form action="test.jsp" method="post">
test.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>myJsp</title>
</head>
<body>
<jsp:useBean id="user" class="com.aaa.TestBean" />
<jsp:setProperty name="user" property="*" />
使用getProperty<br>
用户名:<jsp:getProperty name="user" property="userName" /><br>
密码: <jsp:getProperty name="user" property="passWord" /><br>
年龄: <jsp:getProperty name="user" property="age" /><br>
客户端名称:<%=request.getRemoteAddr() %>
</body>
</html>
输入信息后点击提交查询:
jsp:forward
- 这个动作标签是请求转发标签,可以将当前页面的请求转发给其他 web 资源,可以是 JSP 页面、HTML页面、Servlet 等。请求转发指的是停止执行当前的 JSP,而执行被转发的资源,转发后与转发前在同一个请求范围内,地址栏的地址并不会发生变化。
page 属性包含的是一个相对URL。page 的值既可以直接给出,也可以在请求的时候动态计算。 - 语法如下:
格式一:
<jsp:forward page ="ur"/>
格式二:
<jsp:forward page ="url">子动作</isp:forward >
- Page 属性指明被转发的资源,当前 JSP 页面和被转发的资源必须位于相同的上下文环境中。当
<jsp: forward >
动作不包含子动作时,使用第一种格式,否则使用第二种格式。 - 注: forward 指令是一个重定向指令,所以 forward 指令下面的指令是不会被执行到的。
- 代码示例:
由 first.jsp 请求转发到 second.jsp,在 first. jsp 中向 request 对象中保存变量,在 second.jsp 中读取变量 name,由于请求转发仍在同一个请求中,所以 request 对象中的变量仍然有效。
first.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>first</title>
</head>
<body>
<h3>这是first.jsp界面</h3>
<%
request.setAttribute("name","zhangsan");
%>
<%--有动作--%>
<jsp:forward page="second.jsp"><jsp:param name="qwe" value="zs"/></jsp:forward>
<%--无动作--%>
<%--<jsp:forward page="second.jsp"/>--%>
</body>
</html>
second.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>second</title>
</head>
<body>
<h3>这是second.jsp界面</h3>
request对象中name的值是:
<%=request.getAttribute("name") %>
<br>
重定向时通过param传过来的值是:
<%=request.getParameter("qwe") %>
</body>
</html>
jsp:param
- 该标签可以作为其他标签的子标签,<jsp: include >或者<jsp: forward >为其标签传递参数。
语法如下。
<jsp: param name ="Name" value ="Value"/>
Name:用于设定参数名称。
Value:用于设定对应参数的值。 - 代码示例:
在 third.jsp 中,向被转发的资源 fourh.jsp 传递两个参数 name 和 pwd,在 fourth.jsp 中使用 request.getParameter()方法获取参数值。
third.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>third</title>
</head>
<body>
<h3>third.jsp界面</h3>
<%
request.setAttribute("name","zhangsan");
%>
<jsp:forward page="fourth.jsp">
<jsp:param name="name" value="zs"/>
<jsp:param name="psw" value="123"/>
</jsp:forward>
</body>
</html>
fourh.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>fourth</title>
</head>
<body>
<h3>这是fourth.jsp界面</h3>
request对象中name的值是:
<%=request.getAttribute("name") %>
<br>
param动作传过来的name值是:
<%=request.getParameter("name") %>
<br>
param动作传过来的psw值是:
<%=request.getParameter("psw") %>
</body>
</html>