非IOC方式:
1、Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象
public class LoginAction implements Action {
//在这里展示了,如何将用户登对录对象写入到request,session,application作用域中
public User user;
public String execute() throws Exception {
ActionContext context=ActionContext.getContext();
Map request=(Map)context.get("request");//获得request对象
Map session=(Map)context.getSession();
Map application=(Map)context.getApplication();
request.put("user",user);//将user对象放到request作用域中
session.put("user",user);//将user对象放到session作用域中
application.put("user",user);//将user对象放到application作用域中
}
2、想要在action类中直接使用HttpServletRequest、HttpServletResponse、ServletContext这些对象
public class LoginAction implements Action {
//在这里展示了,如何将用户登对录对象写入到request,session,application作用域中
public User user;
public String execute() throws Exception {
HttpServletRequest request=ServletActionContext.getReuquest();
HttpSession session=request.getSession();
ServletContext application=ServletActionContext.getServletContext();
request.setAttribute("user",user);//将user对象放到request作用域中
session. setAttribute("user",user);//将user对象放到session作用域中
application. setAttribute("user",user);//将user对象放到application作用域中
}
IOC方式:
1、在Action类中实现某些特定的接口的方式,让Struts2框架在运行时向Action实例注入request、session和application对象。
public class LoginAction implements Action,RequestAware,SessionAware,ApplicationAware {
public Map request;//在这里将通过ioc的方式注入,注意是Map类型
public Map session;
public Map application;
public User user;
public String execute() throws Exception {
request.put("user",user);//将user对象放到request作用域中
session.put("user",user);//将user对象放到session作用域中
application.put("user",user);//将user对象放到application作用域中
}
//request,session.application对象对应的Set/get方法...
}
2、Action类还可以实现ServletRequestAware和ServletContextAware接口,由struts2框架向Action实例注入HttpServletRequest和ServletContext对象。
public class LoginAction implements Action,ServletRequestAware,ServletContextAware {
public HttpServletRequest request;//在这里将通过ioc的方式注入
public ServletContext application;
public User user;
public String execute() throws Exception {
request.setAttribute("user",user);//将user对象放到request作用域中
application. setAttribute("user",user);//将user对象放到application作用域中
}
//override request,application对象对应的Set/get方法...
}
IOC(Inversion of Control):控制反转
不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务、容器负责将这些联系在一起。
IoC的本质是实现了对象之间依赖关系的转移。通过使用Spring框架,开发人员将不必自己在代码中维护对象之间的依赖关系,只需在配置文件中进行设定就可以了。Spring会自动地依据配置信息来维护对象之间的依赖关系,将被依赖的对象设置给依赖对象。(依赖)控制权由应用代码中转到了外部容器,控制权的转移,即所谓的“反转”,换句话说,就是由容器控制程序之间的(依赖)关系,而非传统实现中由程序代码直接操控。