Struts基础总结
本文是在学习了基础的javaWeb后对Struts的基础总结。
目的一是,在于以后自己能更加方便的去回顾这些理论知识,另外也希望能够帮助知识水平和我差不多的人。
错误的地方,希望大家能指出来。
Struts基础总结
1.Struts是一个实现MVC设计模式的优秀的框架。Struts定义了通用的控制器,通过配置文件和视图,以Action的概念封装用户请求,让代码更加清晰易读。
2.Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个使用更加整洁的MVC设计模式实现的Web应用程序框架。
体系结构
Struts2和Struts1的体系差别非常大,因为Struts2使用了WebWork的设计核心。Struts2频繁使用拦截器处理用户请求,允许用户的业务逻辑控制器与Servlet API彻底分离。Struts2的体系结构主要包括Struts2的控制器组件,Struts2配置文件和Struts2标签库,3个部分。
Struts2的控制器组件
Struts2的控制器组件是Struts2框架的核心,事实上所有MVC框架均以控制器组件为核心。
Struts2的控制器有一下的两个部分组成
(1)核心控制器:StrutsPrepareAndExecuteFilter
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的必备包

Struts2的运行流程
(1)浏览器发送请求,如请求/login.action
(2)核心控制器strutsPreprareAndExecuteFilter根据请求决定调用合适的Action
(3)WebWork的拦截器链自动对请求应用通用功能,如workflow、validation或文件上传等功能。
(4)回调Action的execute()方法,该方法先获取用户请求参数,然后调用业务逻辑组件来处理用户请求
Action的execute()方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像、也可以是P DF文档或是其他文档。支持的视图技术非常多,即支持JSP、也支持Velocity、FreeMarker等模版技术。
使用Action来访问servlet API
传统的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
浙公网安备 33010602011771号