📅  最后修改于: 2021-01-11 06:33:45             🧑  作者: Mango
ServletContextAware接口必须由Action类实现,以将信息存储在应用程序范围内。
它仅包含一个方法setServletContext。句法:
public void setServletContext(ServletContext context);
ServletContextAware接口可能有很多实际用法。他们是:
在这个例子中,我们正在创建两个链接,第一页和第二页。如果直接单击第二个页面,它将不显示任何数据,但是如果您单击了第一个链接,则数据将存储在ServletContext对象中,并且可以从另一个操作类获取。在第二个链接中,我们获取存储在ServletContext对象中的数据。
在此示例中,我们需要以下页面
该jsp页面创建两个链接,第一个链接调用第一个动作类,第二个链接调用第二个动作类。
这个xml文件定义了一个包和2个动作。
firstsuccess.jsp
secondsuccess.jsp
seconderror.jsp
该动作类实现ServletContextAware接口,并重写setServletContext方法以将信息存储在应用程序范围中。
package com.javatpoint;
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";
}
}
此类从应用程序范围获取信息,如果在会话范围中使用登录名找到任何信息,则返回成功,否则返回false。
package com.javatpoint;
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";
}
}
}
有很多视图组件:
该页面创建登录表单。
<%@ taglib uri="/struts-tags" prefix="s" %>
Hello user, data is set into the ServletContext object
Now you may click the second page to verify
Data is :
此页面显示带有用户名的欢迎消息。
<%@ taglib uri="/struts-tags" prefix="s" %>
Hello user, data is found
Data is :
此页面显示错误消息。
Sorry , data is not found in the ServletContext object