Struts基础总结

 

本文是在学习了基础的javaWeb后对Struts的基础总结。

目的一是,在于以后自己能更加方便的去回顾这些理论知识,另外也希望能够帮助知识水平和我差不多的人。

错误的地方,希望大家能指出来。

 

            Struts基础总结

1.Struts是一个实现MVC设计模式的优秀的框架。Struts定义了通用的控制器,通过配置文件和视图,以Action的概念封装用户请求,让代码更加清晰易读。

2.Struts2WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个使用更加整洁的MVC设计模式实现的Web应用程序框架。

 

体系结构

Struts2Struts1的体系差别非常大,因为Struts2使用了WebWork的设计核心。Struts2频繁使用拦截器处理用户请求,允许用户的业务逻辑控制器与Servlet API彻底分离。Struts2的体系结构主要包括Struts2的控制器组件,Struts2配置文件和Struts2标签库,3个部分。

 

Struts2的控制器组件

Struts2的控制器组件是Struts2框架的核心,事实上所有MVC框架均以控制器组件为核心。

Struts2的控制器有一下的两个部分组成

(1)核心控制器:StrutsPrepareAndExecuteFilter

StrutsPrepareAndExecuteFilterStruts2的核心控制器,该控制器作为一个filter运行于Web应用程序中,负责拦截所有的用户请求,当用户请求到达时,该filter会过滤用户请求。如果请求以*.action结尾,则该请求将被转入Struts2框架处理。Struts将根据*去查找对应的action

(2)业务控制器:业务控制器action由用户实现,并在配置文件中进行配置。

a) 完全的POJO

b) 无需与任何ServletAPI耦合

c) 既可以使用execute()作为默认的处理方法,也可以使用另外一个public String name方法动态调用

 

配置文件

Struts2创建系统的action代理时,需要使用Struts2的配置文件,Struts2的配置文件分为以下两种:

(1)配置actionStruts.xml文件。

(2)配置Struts2全局属性的struts.properties文件(可选)

<struts>

<!-- Struts2Action均需配置于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">

<!--定义一个loginAction类,实现类为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的拦截器链自动对请求应用通用功能,如workflowvalidation或文件上传等功能。

(4)回调Actionexecute()方法,该方法先获取用户请求参数,然后调用业务逻辑组件来处理用户请求

Actionexecute()方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像、也可以是P DF文档或是其他文档。支持的视图技术非常多,即支持JSP、也支持VelocityFreeMarker等模版技术。

 

 

 

 

 

使用Action来访问servlet API

传统的Web开发中,经常会用到servlet API中的HttpServletRequestHttpSessionServletContent3个对象。

Struts提供了两种方式:解耦的访问方式与耦合的访问方式(是否使用到底层的http)

 

解耦的访问方式

 

Struts23个对象进行了封装,构造了三个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

 

利用请求对象传递数据,即直接使用ActionContextput()方法将数据保存至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

 

 

 

posted on 2013-07-07 21:54  张张开  阅读(285)  评论(0)    收藏  举报

导航