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

Struts2框架的搭建以及架构总结

2015-12-09 15:05 393 查看
更简单更快的搭建框架(使用示例代码)
1.添加Jar
          commons-fileupload-1.3.1.jar-->文件上传(struts默认上传组件)
commons-io-2.2.jar -->文件上传的依赖包
commons-lang3-3.1.jar -->java.lang包的扩展包
commons-logging-1.1.3.jar -->日志处理
freemarker-2.3.19.jar -->做页面静态化
javassist-3.11.0.GA.jar -->字节码修改
log4j-1.2.17.jar -->日志
ognl-3.0.6.jar
 -->${} EL表达式  #{}OGNL表达式
struts2-core-2.3.16.3.jar -->核心包,拦截器,过滤器
xwork-core-2.3.16.3.jar   -->核心包的依赖包
2.配置过滤器
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
3.添加核心配置文件
文件路径:struts-2.3.16.3\apps\struts2-blank\WEB-INF\classes
struts.xml
package:分类管理,适合多人快发
name:包的名称(必须唯一)?á 必须
namespace:虚拟路径,在请求当前包下面的Action的时候必须添加namespace的名称 √
<package name="default" namespace="/" abstract="" extends="struts-default">
<action name="userAction"></action>
</package>
<a href="userAction.action"></a>
----------------------------------------------------------------
<package name="default" namespace="/qy" extends="struts-default">
<action name="userAction"></action>
</package>
<a href="qy/userAction.action"></a>
extends:继承struts-default 获取默认配置信息√
abstract:定义抽象的包,不允许在当前包下面定义Action  √

4.编写Action(添加自定方法的时候,必须1.不为方法添加参数2.方法必须返回String)
1.实现Action接口
2.继承ActionSupport
3.普通类  (由struts帮我们继承)
public String info(){

return "success";
}

5.将Action配置进入struts.xml文件中
<action name="userAction" class="org.lq.struts.action.UsersAction" method="info">
<result name="success" type="">index.jsp</result>
</action>
name:请求地址(界面中action="",href="",location=""),保证在同包下不允许重复
class:请求处理类
method:指定当前请求的调用方法

动态方法:
1. <constant name="struts.enable.DynamicMethodInvocation" value="true" />
ActionName!MethodName
2.<action name="userAction_*" class="org.lq.struts.action.UsersAction" method="{1}">
<result name="success" >index.jsp</result>
</action>

result:执行完成后返回的一个字符串,它指定了Action执行完成后,需要跳转到那个页面
name:当前返回字符串
type:执行以什么视图方式返回客户
struts提供的默认返回值:
SUCCESS:执行成功后  默认当result的name不写的时候默认
NONE:标识执行成功!但是不需要显示任何视图给客户
ERROR:执行失败
INPUT:表示Action需要多个参数,但是没有给全! 不符合规范,验证框架

LOGIN:登陆失败

type:
dispatcher:转发 默认,跳转页面
chain:转发 跳转Action
redirect:重定向跳转页面
redirectAction:重定向跳转Action   两个效果相同!
freemarker:返回freemarker的模版
httpheader:返回特定http的行为结果类型
stream:文件下载使用,返回文件流
velocity:处理velocity模版
xslt:处理XML和XLST文件使用的
plainText:返回原始文本信息.以源代码方式展示
postback:
全局跳转页面配置
<global-results>

    <result name="success">index.jsp</result>
    </global-results>

Struts2 系统架构

FiltersDispatcher :是整个Struts2的调度中心!
会根据ActionMapper结果来决定是否需要Struts2来处理请求
如果指定URL需要处理,就会执行Action处理.
ActionMapper :提供了HTTP请求与Action执行之间的映射关系.
判断是否需要Struts2进行处理,如果需要返回一个ActionInvocation的信息
ActionProxy
: 处理当前请求到底需要创建那个Action,Action和xwork中间组件

ConfigurationbManager :就是struts.xml文件的内存映射
struts.xml :应用配置信息,URL与Action之间的映射,Result配置
ActionInvocation :真正调用Action,它拥有一个Action的实例和一个Action所依赖的拦截器
Interceptor :拦截器,在运行之前和之后都会被执行的类.
将request的参数设置到Action中
文件上传
防止重复提交
实现验证框架
国际化
通用错误处理
Action : 逻辑执行单元,用来处理用户请求
Result :返回视图信息对象 (响应对象)
Template : 执行完Action和响应对象  获取需要跳转的视图页面(jsp,chars,json,xml)
ActionContext,值栈,OGNL
Struts2标签
自动类型转换
国际化
验证框架

拦截器和过滤器区别:

  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。

  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

struts 预定义拦截器:
1.params
必不可少的,将请求参数设置到Action中 用户请求(表单提交)
2.staticParams
将struts.xml文件中定义的Action参数复制到Action的属性上面!
当前属性必须存在get/set方法.
当请求参数和配置文件中参数赋值,最后获取到的是请求参数
3.prepare
前提必须实现 com.opensymphony.xwork2.Preparable接口
prepare() 在执行当前Action之前被调用
4.chain
转发,跳转Action 用于ResultType 将当前Action中的属性传递到下一个Action中
5.exception
异常处理,处理抛出异常
6.validation
调用验证框架
7.fileUpload
处理文件上传
8.i18n
国际化
9.logger
日志

自定义拦截:

1.实现接口 Interceptor
1.1  创建类实现借口
intercept(ActionInvocation invocation)
init()  启动
destroy() 服务器关闭
1.2 声明拦截器

     <interceptors>

     <!-- 声明拦截器 -->

     <interceptor name="demoInter" class="org.lq.struts.interceptor.DemoInter"></interceptor>

     <!-- 拦截器栈 -->

     <interceptor-stack name="myStack">
     <!-- 调用,引入拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="demoInter"></interceptor-ref>

     </interceptor-stack>

     </interceptors>
1.3 为所有Action配置拦截器
<default-interceptor-ref name="myStack"></default-interceptor-ref>
为单个Action配置
<interceptor-ref name=""></interceptor-ref>
2.继承类 AbstractInterceptor

国际化 Internationalization I18N 国际化
在使程序不做任何修改的情况下,
可以在不同国家或地区和不同语言环境下,按照习惯进行显示字符

本地化 Localization L10N
一个国际化的程序,当它运行在本地机器时,能够根据本地机器的语言进行转换

1.创建国际化资源文件

2.在struts配置文件中添加引用 
<constant name="struts.custom.i18n.resources" value="message"></constant>

3.在JSP页面显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息