五、JSP Actions
(1)Action是在请求时执行的JSP命令
(2)下表列出扩展JSP功能的六个Action标签
使用useBean action实例化一个JavaBean的示例:
[java]view plaincopyprint?
1. <jsp:useBean id="shoppingCart" class="com.bea.Shoopingcart"/>
2. <% shoppingCart.addItem(new CD("U2"));%>
3. <%=shoppingCart.getCount()%>
<jsp:useBean id="shoppingCart" class="com.bea.Shoopingcart"/>
<% shoppingCart.addItem(new CD("U2"));%>
<%=shoppingCart.getCount()%>
六、JSP Directives
(1)Directives是在编译时执行的JSP命令
(2)下面这三个directives能够改变JSP的行为
Directives使用的示例:
[java]view plaincopyprint?
1. <%@page import="mypackge.myClassA"%> 引用一个类
2. <%@page errorPage="myErrowPage.jsp"%> 当异常时调用该JSP页
3. <%page extends="myJSPSuperclass"%> 所要继承的类
4. <%@include file="myHeaderFile.html"%>包含一个头文件
5. <%@taglib uri=myCustomTags.tld prefix=custom%> 加载自己定制的标签
<%@page import="mypackge.myClassA"%> 引用一个类
<%@page errorPage="myErrowPage.jsp"%> 当异常时调用该JSP页
<%page extends="myJSPSuperclass"%> 所要继承的类
<%@include file="myHeaderFile.html"%>包含一个头文件
<%@taglib uri=myCustomTags.tld prefix=custom%> 加载自己定制的标签
(3)八个内置对象:
a、Request 对象封装了客户端到服务器的数据。这些数据有客户提交的数据,也有客户端的一些配置信息。比如客户的IP,主机名等。通过getAttribute方法和setAttribute方法页面获得服务器的数据和向request添加数据。可以利用getParameter查看请求参数。也可以查看请求类型,请求的HTTP头等。
b、Respose 对象从服务器到客户端的响应封装。用来将服务器的内容写入客户端。常用的是getWriter方法。在客户端打印数据。
c、Out 对象 用来向客户端打印数据。它就像是response的一支笔。执行具体的打印动作。
d、Session 对象提供服务器和客户端的会话。一个session就像是一次对话。对话的内容是用户的状态和一些认证信息。
e、Application 对象。就是一个公用的会话。与session相对。session是每个用户独有的。Application 是这些用户共享的一些数据。
f、Config 提供servlet的一些配置信息。仅在当前页有效。
g、pageContext 提供存取所有关于JSP程序执行时所需的属性和方法。如session application config out。有效范围为当前页。这个就像是这些对象的一个大容器。
h、Page 相当于java类中的this。用处不大。表示当前页面。
(4)使用内置对象
a、HttpServletRequest
[java]view plaincopyprint?
1. <% String account=request.getParameter("accountNumber");%>
2. Your account number is<%=account%>
<% String account=request.getParameter("accountNumber");%>
Your account number is<%=account%>
b、ServletContext
[java]view plaincopyprint?
1. <% String table=application.getInitParameter(tableName);
2. String sql="SELECT * FROM"+tableName;
3. ResultSet rs=Statement.executeQuery(sql);%>
<% String table=application.getInitParameter(tableName);
String sql="SELECT * FROM"+tableName;
ResultSet rs=Statement.executeQuery(sql);%>
c、ServletConfig
[java]view plaincopyprint?
1. <p> This Web Application requires Version
2. <%=config.getInitParameter("WLS-Version")%>
3. To run correctly.<p>
<p> This Web Application requires Version
<%=config.getInitParameter("WLS-Version")%>
To run correctly.<p>
(5)对象作用范围
a、pageContext,request,session和application对象都提供了方法,用于在其作用范围内存储对象。
b、范围定义了它们的存货周期和JSPs之间的访问性
对象
生存周期
在哪可访问
pageContext
到将response返回到用户或将request传递到一个新页面为止
当前页面
request
到将response返回到用户为止
当前页面和所有被包含或被传递的页面
session
与用户的会话相同
当前请求和任何来自浏览器后续请求(在session生存时间内)
application
Web应用生存周期
当前和所有后续向同一个Web应用发出的请求
(6)在作用范围内存取对象
A、在对象作用范围内提供以下方法存取对象:
a、setAttribute(String,Object)将一个对象关联到一个字符串,之后可以读取
b、Object getAttribute(String)通过名字读取该对象
c、Enumeration getAttributeNames()取得在作用范围中所有对象的名字
d、void removeAttribute(String)删除一个属性
(7) 在JSP页之间共享request
A、几个JSP页能通过使用request对象在JSP页之间共享对象,从而处理一个请求。
在request上下文中存储对象的示例jsp1.jsp:
[java]view plaincopyprint?
1. <% Employee employee1=new Employee();
2. employee1.setName("John Doe");
3. request.setAttribute("John",employee);%>
4. <jsp:forward page="jsp2.jsp"/>
<% Employee employee1=new Employee();
employee1.setName("John Doe");
request.setAttribute("John",employee);%>
<jsp:forward page="jsp2.jsp"/>
从request上下文中取回对象的示例jsp2.jsp:
[java]view plaincopyprint?
1. <%=((Employee)request.getAttribute("John").getName())%>
<%=((Employee)request.getAttribute("John").getName())%>
(8)、在JSP中使用JavaBeans
A、在业务逻辑或模型数据能够在JSP之外以JavaBean实现
B、JavaBeans遵循以下这些规则
a、一个无变量的构造方法
b、每个属性都有ser和get方法
c、应该可序列化
构造Employee的JavaBean简单示例:
[java]view plaincopyprint?
1. public class EmployeeJavaBean implements
2. Serializable{
3. String name;double salary;
4. public EmployeeJavaBean(){name=null;salary=0.0}
5. public void setName(String n){name=n;}
6. public String getName(){return name;}
7. public void setSalary(double s){salary=s;}
8. public double getSalary(){return salary;}
9. }
public class EmployeeJavaBean implements
Serializable{
String name;double salary;
public EmployeeJavaBean(){name=null;salary=0.0}
public void setName(String n){name=n;}
public String getName(){return name;}
public void setSalary(double s){salary=s;}
public double getSalary(){return salary;}
}
C、在JSP中使用useBean创建JavaBean实例
D、通过使用serProperty和getProperty访问JavaBean的变量:
实例化,初始化和使用JavaBean标签的示例:
[java]view plaincopyprint?
1. <jsp:useBean id="employee"
2. class="mypack.EmployeeJavaBean">
3. <jsp:setProperty name="employee" property="name"
4. value="John Doe"/>
5. </jsp:useBean>
6. <jsp:setProperty name="employee" property="salary"
7. value="20000"/>
8. Employee:<jsp:getProperty name="employee"
9. property="name">
<jsp:useBean id="employee"
class="mypack.EmployeeJavaBean">
<jsp:setProperty name="employee" property="name"
value="John Doe"/>
</jsp:useBean>
<jsp:setProperty name="employee" property="salary"
value="20000"/>
Employee:<jsp:getProperty name="employee"
property="name">
也可以像下面这样使用get和set方法:
[java]view plaincopyprint?
1. <% employee.setSalary(employee.getSalary()+10000);%>
2. salary<%=employee.getSalary()%>
<% employee.setSalary(employee.getSalary()+10000);%>
salary<%=employee.getSalary()%>
E、在默认情况下,你的JavaBean在page作用范围内存放
F、可以使用scope属性设置它的范围为page,request,session或application
存储对象在request上下文中的示例jsp1.jsp:
[java]view plaincopyprint?
1. <jsp:useBean id="employee"
2. class="myPack.EmployeeJavaBean"
3. scope="request"/>
4. <jsp:forward page="jsp2.jsp"/>
<jsp:useBean id="employee"
class="myPack.EmployeeJavaBean"
scope="request"/>
<jsp:forward page="jsp2.jsp"/>
从request上下文中取回对象的示例jsp2.jsp:
[java]view plaincopyprint?
1. <jsp:useBean id="employee"
2. class="mypack.EmployeeJavaBean"
3. scope="request"/>