struts2开发流程及配置,域对象对数据存储的3种方式
一、开发流程
1)引入 jar 包,其中必须引入的有(我是用的struts是2.3.32)
commons-fileupload-1.3.2.jar |文件上传下载
commons-io-2.2.jar |
commons-lang3-3.2.jar |long扩充包
freemarker-2.3.22.jar |标签扩充
javassist-3.11.0.GA.jar |
ognl-3.0.19.jar
struts2-core-2.3.32.jar |struts核心包
xwork-core-2.3.32.jar |xwork核心包
2)配置web.xml 文件,引入filter,这是固定格式
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
3)开发action
4)配置 struts.xml 配置文件,该配置文件需要放到 src 目录下。
配置文件样例如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="Adminpkg" namespace="/Admin" extends="struts-default"> <action name="login" class="com.huitong.action.AdminAction" method="login"> <result name="success" type="dispatcher">/index.jsp</result> </action> </package> </struts>
其中result name表示调用类 class 的方法 method 后返回的标记。
说明:package 是用来管理各个action的。
二、action类中对共享数据的处理方式有3中,
1)使用servlet api获取相应的域对象
2)使用 ActionContext 对象获取域对象
3)实现接口SessionAware,RequestAware, ApplicationAware
域对象的说明,有request, session, application
2.2.1)方式1的实现,主要的类是:ServletActionContext,实现代码如下
HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext servletContext = ServletActionContext.getServletContext(); request.setAttribute("request", "requestValServletActionContext"); session.setAttribute("session", "sessionValServletActionContext"); servletContext.setAttribute("application", "servletContextValServletActionContext"); return SUCCESS;
说明:在struts 框架中导入servlet 类,有点高耦合,以后尽量少用。除非到必须要用,例如获取项目地址 request.getContextPath()。
2.2.2)方式2的实现,主要的类是ActionContext,实现代码如下
ActionContext acContext = ActionContext.getContext(); //首先获取ActionContext 对象 Map<String, Object> request = acContext.getContextMap(); Map<String, Object> session = acContext.getSession(); Map<String, Object> application = acContext.getApplication(); request.put("request", "requestValActionContext"); session.put("session", "sessionValActionContext"); application.put("application", "applicationValActionContext"); return SUCCESS;
说明:这种方法首先获取actionContext对象。使用的是map来存储数据。这种方式一般用在方法种类比较少的情况,因为每个处理方法都需要获取对象,进而处理。
要想获取其他域对象,首先获取 actionContext 上下文环境对象。
ActionContext accontext = ActionContext.getContext();
1)获取request 对象
Map<String, Object> request = accontext.getContextMap();
2)获取 session 对象
Map<String, Object> session = accontext.getSession();
3)获取 servletContext 对象
Map<String, Object> application = accontext.getApplication();
2.2.3)方式3 的实现,主要的接口有 SessionAware,RequestAware, ApplicationAware;实现方法如下
public class datapro3 extends ActionSupport implements SessionAware, RequestAware, ApplicationAware { private Map<String, Object> application=null; private Map<String, Object> request=null; private Map<String, Object> session=null; @Override public void setApplication(Map<String, Object> application) { this.application = application; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } public String pro3(){ request.put("request", "requestValRequestAware"); session.put("session", "sessionValSessionAware"); application.put("application", "applicationValApplicationAware"); return SUCCESS; } }
该方法跟实现方式2差不多,只不过这种方法将域对象首先存储到类的属性中,在以后的处理方法上直接使用即可。所以这种方法可以应用于处理的方法比较多的情况。
如果觉得有用,想赞助一下请移步赞助页面:赞助一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2016-04-12 python科学计算基础知识