1 创建web项目
2 导入struts2中所需要的包.
struts2-core-2.2.1.1.jar struts2中的核心包
xwork-core-2.2.1.1.jar xwork 也是一个web框架, webwork 是基于xwork的..
commons-fileupload-1.2.1.jar commons-io-1.3.2.jar 处理流和文件上传
freemarker-2.3.16.jar 模板引擎的处理框架, 将jsp或者其他的模板高效生成html..
ognl-3.0.jar 相当于el和jstl , 当时比这里牛多了...
javassist-3.7.ga.jar 主要是多java类的字节码文件进行处理
3、配置strust2在当前的web项目中
在web.xml中配置struts2所需的核心过滤器
<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>
4 写处理请求所需要的Action
public class HelloAction {
public void hello(){
System.out.println("HelloAction....hello Method");
}
}
5、在struts.xml中配置上面的Action.
struts.xml 放在classpath的根目录下面, struts.xml的名字是固定的..
根据约束文件写struts.xml, 在struts.xml中如果不会提示节点,那么需要eclipse关联dtd
6、执行Action.
http://localhost:8080/app_name/package_namespace/action_name
每次请求都会创建一个Action的对象, 存在线程安全性..
7、structs.xml中的一些配置:
<struts>
<!-- paclage分包管理你的Action
name: 给包起一个名字
namespace: 给包映射是个命名空间,要访问里面的action必须通过namespace来访问
-->
<package name="first" namespace="/first">
<!--注释
一个action节点来处理一个请求
name: 给action起一个名字: 访问该action 需要通过 包的namespace/action_name
-->
<actionname="hello" class="cn.itcast.cd.action.HelloAction"method="hello">
</action>
</package>
</struts>
8、使用拦截器:
定义:
<interceptors>
<interceptorname="params"class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
</interceptors>
调用:
<actionname="hello"class="cn.itcast.cd.action.HelloAction"method="hello">
<interceptor-refname="params"></interceptor-ref>
</action>
9. Result返回页的配置
9.1 Action中对应的方法执行完后需要转到一个视图
需要通过该Action中定义的方法的返回的String字符串来指定Result
9.2 这些Result都需要配置到:
<action name="threePage"class="cn.itcast.cd.action.ResultAction"method="result3">
<!—类型配置的注释:
name: action中的方法执行完后返回的字符串
type: 以哪种方式转向指定的页面
该类型提前做好配置:
1.可以自己配置:在当前Action所在的包中配置
<result-types>
<result-type name="dispatcher"class="org.apache.struts2.dispatcher.ServletDispatcherResult">
</result-type>
<result-type name="redirect"class="org.apache.struts2.dispatcher.ServletRedirectResult">
</result-type>
<result-type name="plaintext"class="org.apache.struts2.dispatcher.PlainTextResult"></result-type>
</result-types>
那么这些配置类型只能够在当前包中使用,或者是在当前包的子包中使用..
2. 可以继承struts-default包使用里面定义好的类型,例:
<package name="oa"namespace="/oa" extends="struts-default">
注释结束-->
<resultname="page3"type="plainText">
<paramname="location">/page3.jsp</param>
<paramname="charSet">UTF-8</param>
</result>
</action>
如果action没有指定type就会是用默认的type,在result-types定义的时候就指定...structs-default包里预定义的默认type是dispatcher,可以更改后面的default=true来更改默认type
如果在包中定义:
<global-results>
<result name="globalResult">
/globalResult.jsp
</result>
</global-results>
那么当Action对应的方法执行完后,按照返回的字符串找Result,但是在当前Action中找不到对应的Result就会去global-results
10、常用的Result Type
1. Dispatcher 请求转发
2. Redirect URL重定向
3. PlainText 纯文本
11. 常量配置:
在根元素<struts>下可以使用constant子元素配置常量。
从strut2的核心jar包内的org.apache.struts2包下的default.properties文件中可以看到各个常量的注释说明,典型几个常量:
<constant name=“struts.action.extension” value=“do,go”/>配置访问Action的后缀,可以配置多个后缀名。 提示:default.properties文件中为该常量配置了一个空字符串。
常量struts.devmode可以让struts在控制台中打印出更多的信息和重新加载配置文件。
常量struts.configuration.xml.reload可以让struts重新加载配置文件,但不会导致web应用重新启动。
常量struts.i18n.encoding可以设置struts内部进行各种字符编码处理时的字符集编码,例如,用于获取请求参数时的解码、读取静态文本文件和输出静态文本文件时的字符解码和编码。
<constant name=“struts.enable.DynamicMethodInvocation” value=“false”/>可以配置不支持动态方法调用。
常量可以在下面多个文件中进行定义,struts2加载常量的搜索顺序如下,后面的设置可以覆盖前面的设置:
default.properties文件
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties(为了与webwork向后兼容而提供)
web.xml
对于struts.devmode有时候不好使
12、包的定位和Action的查找
<!--根据请求的url地址找最匹配的包的namespace, 如果在最最匹配的包中找不到对应的Action,那么也不会到其它包中查找 -->
<!--com/itcast/asdfasdflasdf/a/sdfa/sdf/asdf/asdf/cd/paction1.action 不写下面一个包的时候这个找得到,最匹配的/com路径下,有定义action名称-->
<packagename="packageName" namespace="/com" extends="struts-default">
<actionname="paction1" class="cn.itcast.cd.action.PackageAction"method="paction1">
</action>
</package>
<!--http://localhost:8080/com/itcast/asdfasdflasdf/a/sdfa/sdf/asdf/asdf/cd/paction1.action这个链接找不到,最匹配的/com/itcast下面没有定义action-->
<package name="packageName1" namespace="/com/itcast" extends="struts-default">
</package>
<!--com/itcast/asdfasdflasdf/a/sdfa/sdf/asdf/asdf/cd/paction1.action不打这个链接,只用“/”可以找到-->
<packagename="packageName2" namespace="/" extends="struts-default">
<actionname="paction2" class="cn.itcast.cd.action.PackageAction"method="paction2">
</action>
</package>
<!--
如果一个包上的namespace没有写或者是namespace="" , 表明该包是一个默认包的命名空间:
如果在一个包中找不到对应的Action 那么就会到默认的包中找Action
-->
<packagename="default_packageName3" extends="struts-default">
<actionname="paction1" class="cn.itcast.cd.action.PackageAction"method="paction1">
</action>
</package>
13、Structs.xml中的默认值与配置:
在根元素<struts>下可以使用include子元素引入其他的配置文件,这样可以将各个模块分散在不同的配置文件中进行配置
<!--配置默认的Action,用于说明在该包下不存在的action路径映射,都可以统交给一个默认的<action>元素去处理。-->
<default-action-refname="employeeadd"></default-action-ref>
<!--配置默认的class,如果说一个Aciton中没有配置到class就用这个 -->
<default-class-refclass="cn.itcast.cd.action.EmployeeAction"></default-class-ref>
<!--method的默认方法为: execute() class的默认值为:com.opensymphony.xwork2.ActionSupport-->
<actionname="employeeadd">
<!-- result>元素的type属性和name属性都可以不设置,默认值分别为dispatcher和success result中的param如果只有一个的话默认是location -->
<result>/success.jsp</result>
</action>
</package>
插件:
使用ConfigBrowser Plugin浏览已经装载的配置信息和列表针对各个包名称空间下的所有Action的访问链接。
14动态方法调用:
14.1、在url里面/action名称+感叹号+方法名,不推荐使用此方法
14.2、通配符:
<!--通配符在name上面使用
1. 在class method result上面可以引用通配符实际上匹配到的内容
-->
<actionname="*_*" class="cn.itcast.cd.action.{1}Action"method="{2}">
<resultname="list">/WEB-INF/view/{1}/list.jsp</result>
<resultname="edit">/WEB-INF/view/{1}/edit.jsp</result>
<resulttype="redirect">
/oa/{1}_list
</result>
</action>