本文是在学习了基础的javaWeb后对Struts的基础总结。java
目的一是,在于之后本身能更加方便的去回顾这些理论知识,另外也但愿可以帮助知识水平和我差很少的人。spring
错误的地方,但愿你们能指出来。apache
1.Struts是一个实现MVC设计模式的优秀的框架。Struts定义了通用的控制器,经过配置文件和视图,以Action的概念封装用户请求,让代码更加清晰易读。设计模式
2.Struts2以WebWork优秀的设计思想为核心,吸取了Struts框架的部分优势,提供了一个使用更加整洁的MVC设计模式实现的Web应用程序框架。浏览器
Struts2和Struts1的体系差异很是大,由于Struts2使用了WebWork的设计核心。Struts2频繁使用拦截器处理用户请求,容许用户的业务逻辑控制器与Servlet API完全分离。Struts2的体系结构主要包括Struts2的控制器组件,Struts2配置文件和Struts2标签库,3个部分。session
Struts2的控制器组件app
Struts2的控制器组件是Struts2框架的核心,事实上全部MVC框架均以控制器组件为核心。框架
Struts2的控制器有一下的两个部分组成ssh
(1)核心控制器:StrutsPrepareAndExecuteFilterjsp
StrutsPrepareAndExecuteFilter是Struts2的核心控制器,该控制器做为一个filter运行于Web应用程序中,负责拦截全部的用户请求,当用户请求到达时,该filter会过滤用户请求。若是请求以*.action结尾,则该请求将被转入Struts2框架处理。Struts将根据*去查找对应的action。
(2)业务控制器:业务控制器action由用户实现,并在配置文件中进行配置。
a) 彻底的POJO类
b) 无需与任何ServletAPI耦合
c) 既可使用execute()做为默认的处理方法,也可使用另一个public String name方法动态调用
配置文件
当Struts2建立系统的action代理时,须要使用Struts2的配置文件,Struts2的配置文件分为如下两种:
(1)配置action的Struts.xml文件。
(2)配置Struts2全局属性的struts.properties文件(可选)
<struts>
<!-- Struts2的Action均需配置于package中-->
<!--Struts的常量配置-->
<constant name=”struts.action.extension” value=”do”>
<!--将Action的默认访问扩展名*.Action改成*.do-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.objectFactory" value="spring"></constant>
<package name="struts2" namespace="/" extends="struts-default">
<!--定义一个login的Action类,实现类为LoginAction-->
<action name="login" class="LoginAction">
<!--定义结果于视图的映射关系-->
<result name="success">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
Struts2的标签库
导入库:<%@taglib url=”/struts-tags” prefix=”s” %>
架包
如下是我在ssh整合时Struts2的必备包
(1)浏览器发送请求,如请求/login.action
(2)核心控制器strutsPreprareAndExecuteFilter根据请求决定调用合适的Action
(3)WebWork的拦截器链自动对请求应用通用功能,如workflow、validation或文件上传等功能。
(4)回调Action的execute()方法,该方法先获取用户请求参数,而后调用业务逻辑组件来处理用户请求
Action的execute()方法处理结果信息将被输出到浏览器中,能够是HTML页面、图像、也能够是P DF文档或是其余文档。支持的视图技术很是多,即支持JSP、也支持Velocity、FreeMarker等模版技术。
传统的Web开发中,常常会用到servlet API中的HttpServletRequest、HttpSession和ServletContent3个对象。
Struts提供了两种方式:解耦的访问方式与耦合的访问方式(是否使用到底层的http类)
解耦的访问方式
Struts2对3个对象进行了封装,构造了三个Map对象用于代替这三种对象。咱们能够直接使用对应的Map对象保存和读取数据。
获取HttpServletRequest对象(访问request对象)
ActionContext context=ActionContext.getContext()
Map request=(Map) context.get(“request”);
获取HttpSession对象(访问session)
ActionContext context=ActionContext.getContext()
Map session=(Map)context.getSession;
获取ServletContext(访问application)
ActionContext context=ActionContext.getContext()
Map application=(Map)context.getApplication
利用请求对象传递数据,即直接使用ActionContext的put()方法将数据保存至ActionContext中,如ActionContext.getContext.put(),至关于request.setAttribute,缘由在于Struts2中的org.apache.struts2.dispatcher.StrutsRequestWrapper类,该类是HttpServletRequest的包装类,其重写了getAttribute方法。
耦合的方式
获取HttpServletRequest 对象
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletRequest request=A
获取HttpSession对象
HttpSession session=ServletActionContext.getRequset().getSession();
获取HttpServletResponse对象
HttpServletResponse response=ServletActionContext.getResponse();
获取ServletContext对象
ServletContext Context=ServletActionContext.getServletContext();
还能够如下方法得到HttpServletRequest对象和ServletContext对象
获取HttpServletRequest对象
ActionContext.getContext.get(ServletActionContext.HTTP_REQUEST);
//或者ServletActionContext.HTTP_CONTEXT来获得application