您的位置:首页 > 编程语言 > Java开发

Struts2(二)核心思想及其工作原理

2017-07-09 12:48 661 查看
通过上一章节的开端,我们对Struts2框架有了整体的认识,已经能够布置一个简单的Struts2小应用,并让他跑起来,现在我们需要的是深入了解其实现的机制,下面我们从以下几方面开始做一个学习。

1. Struts2框架配置文件

Struts2框架按照如下顺序加载struts2配置

default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面

struts-default.xml 该文件保存在 struts2-core-2.3.7.jar

struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar

struts.xml 该文件是web应用默认的struts配置文件

struts.properties 该文件是Struts的默认配置文件

web.xml 该文件是Web应用的配置文件

如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值

2.Struts2框架Action相关配置

struts2所有action都是通过package管理

struts-default是struts-default.xml定义的一个package,内含大量拦截器和结果集

每个package,可以定义一个namespace属性,默认值 “”



Action的访问路径 = 包名称空间 namespace + Action name属性 例如上图采用默认配置namespace “/”

所以客户端访问路径 ${pageContext.request.contextPath}/hello



如果namespace配置为/demo1, 客户端访问路径

${pageContext.request.contextPath}/demo1/hello

3.Struts2框架Action配置默认值


4.访问Action

(1)

- struts2 的Action可以是POJO

- 为了让用户开发的Action更加规范struts2提供了一个Action接口



(2)

- Struts2为Action接口提供了一个实现类 ActionSupport,定义了 表单域校验、错误信息设置和获得国际化信息相关一些方法



(3)

用户编写Action 可以是 POJO

用户编写Action 可以实现Action接口

可以使用结果集常量字符串

用户编写Action 可以继承ActionSupport基类

对请求参数进行校验

设置错误信息

读取国际化信息

execute方法编写注意细节

public 修饰符

String 返回值

无参数

(4)

没有指定method属性,默认执行execute方法



通过method属性,指定调用Action相应方法处理请求



因为指定了method=”regist”,所以HelloAction的regist方法会被调用

(5)

在配置 action元素时,允许在指定name属性时,使用模式字符串(用(*)代表一个或多个任意字符)

在class、method属性及(result)子元素中通过 {N} 形式代表前面地N个* 匹配子串



5.Action访问Servlet API

Struts2的Action没有与任何Servlet API耦合,便于测试

ActionContext

getContext() 返回ActionContext实例对象

get(key) 相当于 HttpServletRequest的getAttribute(String name)方法

put(String,Object) 相当于HttpServletRequest的setAttribute方法

getApplication() 返回一个Map对象,存取ServletContext属性

getSession() 返回一个Map对象,存取HttpSession属性

getParameters() 类似调用HttpServletRequest的getParameterMap()方法

setApplication(Map) 将该Map实例里key-value保存为ServletContext的属性名、属性值

setSession(Map) 将该Map实例里key-value保持为HttpSession的属性名、属性值

方式一 :实现接口,访问Action时完成注入

ServletContextAware
void setServletContext(javax.servlet.ServletContext context)

ServletRequestAware
void setServletRequest(javax.servlet.http.HttpServletRequest request)

ServletResponseAware
void setServletResponse(javax.servlet.http.HttpServletResponse response)


方式二 使用ServletActionContext

static PageContext getPageContext()
static HttpServletRequest getRequest()
static HttpServletResponse getResponse()
static ServletContext getServletContext()


该方案可避免Action类实现XxxAware接口,但Action依然与Servlet API直接耦合

开发中优先使用ActionContext 这样可以避免耦合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts 框架 应用