一:创建项目,添加依赖包
二:在web.xml配置核心控制器
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
三:创建action
class XXAction extends ActionSupport//继承ActionSupport定义action { 定义全局属性;//请求传进来时会自动把同名的参数值注入全局属性变量中 定义处理方法; 重写父类提供的默认方法;//主要有两个:execute()和validate()
return "结果"; }
四:创建拦截器
五:配置struts.xml
1:配置常量
2:引入其他模块配置的xml
3:定义package
3.1)注册拦截器
3.2)配置默认拦截器、全局result
3.3)注册action:配置method、引用拦截器、配置结果集、默认参数值
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <!--配置Structs2自身选项:常量配置--> <constant name="struts.action.extension" value="action,do,..." />//后缀名配置,什么后缀名的请求交给structs2处理 <!-- 是否启用开发模式 --> <constant name="struts.devMode" value="true" /> <!-- struts配置文件改动后,是否重新加载 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 设置浏览器是否缓存静态内容 --> <constant name="struts.serve.static.browserCache" value="false" /> <!-- 请求参数的编码方式 --> <constant name="struts.i18n.encoding" value="utf-8" /> <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 --> <constant name="struts.i18n.reload" value="true" /> <!-- 文件上传最大值 --> <constant name="struts.multipart.maxSize" value="104857600" /> <!-- 让struts2支持动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" />//开启感叹号形式的action方法调用 <!-- Action名称中是否还是用斜线 --> <constant name="struts.enable.SlashesInActionNames" value="false" /> <!-- 允许标签中使用表达式语法 --> <constant name="struts.tag.altSyntax" value="true" /> <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true --> <constant name="struts.dispatcher.parametersWorkaround" value="false" /> <include file="struts-default.xml"></include>//组件化开发使用该标签:可以针对不同模块的请求处理定义成不同xml,引入structs.xml即可。注意文件头同strcuts.xml <!-- package提供了将多个Action组织为一个模块的方式 package的名字必须是唯一的 package可以扩展 当一个package扩展自 另一个package时该package会在本身配置的基础上加入扩展的package 的配置 父package必须在子package前配置 name:package名称 extends:继承的父package名称 abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action --> <package name="com.kay.struts2" extends="struts-default" namespace="/test">
<!--注册拦截器--> <interceptors> <interceptor name="timer" class="com.kay.timer"></interceptor> <interceptor name="logger" class="com.kay.logger"></interceptor> <!-- 定义拦截器栈 --> <interceptor-stack name="mystack"> <interceptor-ref name="timer"></interceptor-ref> <interceptor-ref name="logger"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 定义默认的拦截器 每个Action都会自动引用 如果Action中引用了其它的拦截器 默认的拦截器将无效 --> <default-interceptor-ref name="mystack"></default-interceptor-ref> <!-- 全局results配置:每个action都可以使用--> <global-results> <result name="input">/error.jsp</result> </global-results> <!-- Action配置--> <action name="hello" class="com.kay.struts2.Action.LoginAction" method="调用action的哪个方法进行请求处理,不配置则默认调用execute方法"> <interceptor-ref name="timer"></interceptor-ref>//把注册的拦截器作用到该action上 <result name="success" type="dispatcher">/talk.jsp</result>//配置结果跳转 <param name="url">http://www.sina.com</param>//配置action中某全局变量的默认初始值,action中变量需要定义好setter/getter方法 </action> </package> </struts>
六:在页面端通过action的url来发送请求