struts2

来源:互联网 发布:淘宝网登录首页官网 编辑:程序博客网 时间:2024/06/08 16:17

Struts2.x 框架 开发简单web应用流程

1、 创建工程 ,加载jar包
2、 编写web.xml文件配置Struts 2的核心Filter
3、 创建action 并在struts.xml文件中配置。

这里好多新手都可能对此有这样的疑惑 :action编写的过程中并未像struts1那样除了actionMapping actionForm, 外还有 httpRequest和httpresponse等参数,并没收到用户请求,怎么处理请求呢?
核心servlet或者Filter接收到用户请求时候,通常会对其进行简单的预处理,例如解析,分装参数,然后通过反射来创建Action实例,并调用Action的指定方法Struts1 通常是execute方法,struts2通常可以是任一方法。来处理用户请求。那么当servlet 或者Filter拦截到用户请求后,他怎么知道创建哪个action的实例呢?这就需要配置文件了!配置文件中指定 创建 实例的类
这里写图片描述
上图显示了Structs2应用的的一次请求响应过程。
其中
1、 发送请求
2、 调用execute方法
3、 调用业务方法
4、 返回业务结果
5、 返回逻辑视图名
6、 Forward 到物理视图
7、 生成响应视图
8、 输出响应
从上图可以看出xxxAction业务控制器通常并不与物理视图关联,这种做法提供了很好的解耦。业务控制器只负责返回处理结果,而处理结果与怎样的视图相关联,依然由StrutsPrepareAndExecuteFilter来决定。这样做的好处是当你需要将某个视图名映射到不同视图资源,无需修改代码,直接修改配置文件就好。
Struts 2 中 常量的配置
通过struts.properties 文件
通过 Struts.xml 配置文件
通过 web应用的web.xml文件

name
value

Struts 框架按照 如下顺序加载 struts2 常量
Struts-default.xml— struts-plugin.xml—struts.xml—struts.properties—web.xml

其中struts2.xml 配置文件 可以包含其他配置文件

Struts2 的编码 部分 主要就是 Action的实现
1、Action类里面包含了对用户请求处理的逻辑,被称为业务控制器。在struts2中它可以不继承任何类 或者实现任何接口。
在 Action类里面 的实例变量,不仅可以用来封装请求参数,而且可以封装处理结果。如果你希望把登陆结果显现给下一个页面,那么这个结果可以用实例变量 来表示然后 在下一页面中使用。其实系统并不会特别关注哪个实例变量用来封装请求,哪个来封装处理结果。而这对于系统是平等的。同样在jsp页面中输出实例变量时同样不区分。
2、Action接口和ActionSupport基类
为了用户开发的Action类更加规范,struts2提供了Action接口。
Public interface Action{
//定义接口里包含的一些结果字符串5个
Public static final String …
//定义处理用户请求的execute()方法
Public String execute();

}
还提供了 一个实现类:ActionSuport,该类实现了许多默认的方法,包括获取国际化信息的方法,数据校验的方法。
4、 Action与servletAPI没有耦合关系这是struts2的一个改良之处。但是对于一个web应用的控制器来说不访问servlet API几乎是不可能的。最常访问的servlet API httpservletRequest、servletContext、servletSession。
Struts2 提供了一个ActionContext类,struts2的Action可以通过此类来访问Servlet API.主要方法如下:
Object get(object key);类似于httpservletrequest 中getAttrbute(String name)方法。
Application getApplication():返回一个map对象,该对象模拟了该应用的servletContext实例。
Static ActionContext getContext().获取系统的ActionContext实例。
Map getParameters():获取所有的请求参数。
Map getSession(); void setSession(Map session); void setApplication();

ActionContext 不是直接获得Servlet API 的实例.为了在Action中直接访问ServletAPI 可以实现如下接口 servletContextAware servletRequestAware ervletResponseAware 之后便可以 访问 servletContext 实例 httpservletRequest 实例 httpservletResponse实例。

还可以通过 SevletActionContext工具类来访问servletAPI 。但是该方法虽然方便 却与servletAPI直接耦合。不利于高层次的解耦
5、 Action的配置
在sturts.xml文件中配置.struts2 框架就是用包来管理Action 和 拦截器的 每个包中包含多个Action、多个拦截器、多个拦截器的引用集合。 当为某个包指定了命名空间时,该包下所有的Action处理的URL应该是命名空间+包名。Struts2可以指定根命名空间,通过设置某个包的命名空间为“/”指定根命名空间。按照书本上说的是一个请求url,系统首先在指定的命名空间下面寻找目的Action 如果未找到在默认命名空间下面找,仍未找到系统错误。
定义Action时,至少需要指定该Action name 属性。该name属性既是该Action的名字,也指定请求该Action所处理请求的URL。Class 指定该Action的实现类。使用标签来标明逻辑视图与物理视图关系并控制转发。

Action的动态方法调用
当你写一个jsp表单页面时通常会有不同的按钮比如 注册 登录等等对应的逻辑是不一样的。Struts2的Action中可以报多个处理逻辑。这些逻辑与execute有相同的方法签名。
同时 还可以指定method 属性及使用通配符。在配置元素时,可以为他指定method属性,则可以让Action调用指定的方法。通过这种方式 可以吧一个Action 定义为多个逻辑Action,即Action类的每个处理方法都映射一个逻辑Action,前提是这些方法具有相似的方法签名:方法的形参列表为空,方法的返回值为String。
可以为每一个逻辑Action类配置一个Action元素,也可以利用通配符的方式,为Action类配置。

Result 配置 默认的结果类型是 dispatcher,用于指定使用JSP作为视图的结果类型。还有很多 主要介绍 如下:
1、 plaintext:主要用于显示实际视图资源的源代码。使用plaintext 可以指定俩个参数
location charset
2、 redirect 这种处理结果 与dispatcher相对应的。Redirect将请求重定向到指定的资源,重定向会丢失所有的请求参数,请求属性、不要将重定向的资源定向到WEB-INF,因为是受保护的资源。
3、 redirectAction 结果类型 ,它是重新生成一个请求。但是与redirect结果类型区别是:他是用ActionMapperFactory 提供的ActionMaper来重定向到另外一个Action.
配置时可以指定如下参数 actionName namespace

动态结果 解析:可以匹配所有crud_*.action 的请求 比如 有crud_create.action 的请求到来,调用相应的处理类create()方法处理请求。
全局结果