Struts2:访问或添加request/session/application属性
通过前面的练习大家都知道,在action的方法中与servlet的所有的API是没有任何关系的。所以在struts2中做到了aciton与serlvet的松耦合,这点是非常强大的。但是如果没有HttpServletRequest,HttpServletSession,ServletContext有些功能是没有办法完成的。比如购物车程序,需要把购买的物品放入session中。所以就得找一些路径使得在struts2中和serlvet的API相结合。
Struts2ActionContextMap
publicStringscope()throwsException{
ActionContextctx=ActionContext.getContext();
ctx.getApplication().put("app","应用范围");//往ServletContext里放入app
ctx.getSession().put("ses","session范围");//往session里放入ses
ctx.put("req","request范围");//往request里放入req
return"scope";
}
JSP:
<body>
${applicationScope.app}<br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
HttpServletRequestHttpSessionServletContext
Requestsessionapplication
request.setAttribute(“name”,value);
${requestScope.name}
session.setAttribute(“name”,value);
${sessionScope.name}
application
ServletContextapplication=getServletContext();
application.setAttribute(“name”,value);
${application.name}
Struts2servlet松耦合
获取HttpServletRequest/HttpSession/ServletContext/HttpServletResponse对象
方式一:
ServletActionContext调用ServletAPI
//Struts2中提供ServletActionContext
//request
HttpServletRequestrequest=ServletActionContext.getRequest();
request.setAttribute("user",user);
//session
HttpSessionsession=request.getSession();
session.setAttribute("user",user);
//application
ServletContextapplication=ServletActionContext.getServletContext();
application.setAttribute("user",user);
方式二:实现几个接口
packagewww.csdn.struts_scope.action;
importjavax.servlet.ServletContext;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importorg.apache.struts2.ServletActionContext;
importorg.apache.struts2.interceptor.ServletRequestAware;
importorg.apache.struts2.interceptor.ServletResponseAware;
importorg.apache.struts2.util.ServletContextAware;
importwww.csdn.struts_scope.domain.User;
importcom.opensymphony.xwork2.ActionContext;
importcom.opensymphony.xwork2.ActionSupport;
publicclassUsersActionextendsActionSupportimplementsServletRequestAware,
ServletResponseAware,ServletContextAware{
//调用servlet中的api
privateHttpServletRequestrequest;
privateHttpServletResponseresponse;
privateServletContextapplication;
privateUseruser;
publicUsergetUser(){
returnuser;
}
publicvoidsetUser(Useruser){
this.user=user;
}
//注入request
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
}
//注入response
publicvoidsetServletResponse(HttpServletResponseresponse){
this.response=response;
}
//注入application
publicvoidsetServletContext(ServletContextapplication){
this.application=application;
}
publicStringlogin(){
request.setAttribute("user",user);
request.getSession().setAttribute("user",user);
application.setAttribute("user",user);
return"user_login";
}
}
如果能用ActionContext解决就不坚决不使用后边两种
就用方式一、ServeltActionContext