- ServletContextAware接口示例
- ServletContextAware接口的示例
ServletContextAware接口必须由Action类实现, 以将信息存储在应用程序范围内。
它仅包含一个方法setServletContext。句法:
public void setServletContext(ServletContext context);
ServletContextAware接口的用法
ServletContextAware接口可能有很多实际用法。他们是:
- 你可以使用collection来保存ServletContext对象中表的所有记录, 并从任何操作类中获取这些信息。这样, 将提高Web应用程序的性能。
- 你可以存储Connection对象并从任何操作类等中获取连接对象。
ServletContextAware接口的示例
在此示例中, 我们将创建两个链接, 第一页和第二页。如果直接单击第二个页面, 它将不显示任何数据, 但是如果你单击了第一个链接, 则数据将存储在ServletContext对象中, 并且可以从另一个操作类获取。在第二个链接中, 我们获取存储在ServletContext对象中的数据。
在此示例中, 我们需要以下页面
- index.jsp, 用于提供到第一个和第二个动作的链接。
- 用于定义结果和操作的struts.xml。
- FirstAction.java, 用于在ServletContext对象中存储数据。
- SecondAction.java, 用于从ServletContext对象获取数据。
- 查看显示结果的组件。
1)创建index.jsp作为输入
该jsp页面创建两个链接, 第一个链接调用第一个动作类, 第二个链接调用第二个动作类。
index.jsp
<hr/>
<a href="first">first page</a>|
<a href="second">second page</a>
<hr/>
2)在struts.xml中定义动作并生成结果
此xml文件定义一个包和2个动作。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD
Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="abcd" extends="struts-default">
<action name="first" class="com.srcmini.FirstAction">
<result>firstsuccess.jsp</result>
</action>
<action name="second" class="com.srcmini.SecondAction">
<result>secondsuccess.jsp</result>
<result name="error">seconderror.jsp</result>
</action>
</package>
</struts>
3)创建动作类来存储数据
该动作类实现ServletContextAware接口, 并覆盖setServletContext方法以将信息存储在应用程序范围中。
FirstAction.java
package com.srcmini;
import javax.servlet.ServletContext;
import org.apache.struts2.util.ServletContextAware;
public class FirstAction implements ServletContextAware{
public void setServletContext(ServletContext ctx) {
ctx.setAttribute("dummyobject", "hello");
}
public String execute(){
return "success";
}
}
4)创建动作类以获取数据
此类从应用程序范围获取信息, 如果在会话范围中使用登录名找到任何信息, 则返回成功, 否则返回false。
SecondAction.java
package com.srcmini;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
public class SecondAction{
public String execute(){
ServletContext ctx=ServletActionContext.getServletContext();
String obj=(String)ctx.getAttribute("dummyobject");
if(obj!=null){
return "success";
}
else{
return "error";
}
}
}
5)创建视图组件
有很多视图组件:
- firstsuccess.jsp
- secondsuccess.jsp
- seconderror.jsp
firstsuccess.jsp
该页面创建登录表单。
<jsp:include page="index.jsp"></jsp:include>
<%@ taglib uri="/struts-tags" prefix="s" %>
Hello user, data is set into the ServletContext object
<br/>
Now you may click the second page to verify
<br/>
Data is :<s:property value="#application.dummyobject"/>
secondsuccess.jsp
此页面显示带有用户名的欢迎消息。
<jsp:include page="index.jsp"></jsp:include>
<%@ taglib uri="/struts-tags" prefix="s" %>
Hello user, data is found<br/>
Data is :<s:property value="#application.dummyobject"/>
seconderror.jsp
此页面显示错误消息。
<jsp:include page="index.jsp"></jsp:include>
Sorry , data is not found in the ServletContext object
下载此示例(在myeclipse IDE中开发)
评论前必须登录!
注册