struts2 的基本工作流程:
Struts2 的基本配置:
1.copy struts.xml
2.copy *.jar
3.配置 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>
4.配置 struts.xml
①:注释掉原有的 <struts></struts> 标签之间的所有内容。
②:copy <package></package> 标签的所有内容。
<!-- namespace 一般以模块命名,默认为空,当 namespace 不写时,只要在 URL 中访问 hello,都可以直接访问,例如: --> <!-- http://127.0.0.1:8080/Struts2/hello --> <!-- http://127.0.0.1:8080/Struts2/dasdsad/adsadas/sadsadasd/sadasdasdqw/hello --> <package name="default" namespace="/" extends="struts-default"> <!-- 默认跳转的 action --> <default-action-ref name="hello" /> <action name="hello"> <result> /Hello.jsp </result> </action> </package>
<!-- 开发模式 --> <!-- 修改 <action name="hello">,不需要每次重启启服务器,让程序马上有反馈 --> <constant name="struts.devMode" value="true" />
二:
namespace :决定了 action的访问路径,默认为"",可以接收所有路径的 action
namespace 可以写为 / , 或 /xxx , 或者 /xxx/yyy , 对应的 action 访问路径为 /index.action , /xxx/index.action , 或者 /xxx/yyy/index.action.
namespace 最好也用模块来进行命名
示例: struts2.xml
<?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> <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <include file="example.xml"/> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <action name="index"> <result type="redirectAction"> <param name="actionName">HelloWorld</param> <param name="namespace">/example</param> </result> </action> </package> --> <!-- 开发模式 --> <!-- 修改 <action name="hello">,不需要每次重启启服务器,让程序马上有反馈 --> <constant name="struts.devMode" value="true" /> <!-- namespace 一般以模块命名,默认为空,当 namespace 不写时,只要在 URL 中访问 hello,都可以直接访问,例如: --> <!-- http://127.0.0.1:8080/Struts2/hello --> <!-- http://127.0.0.1:8080/Struts2/dasdsad/adsadas/sadsadasd/sadasdasdqw/hello --> <package name="demo" namespace="/demo" extends="struts-default"> <!-- 当访问的 action 不存在的时候,默认跳转的 action --> <default-action-ref name="deaf"/> <!-- 当执行这个 action 的时候,会去找 class 指定的类中的 execute 方法,并根据返回的 String 对象,找 action 中对应的 name 的 result --> <!-- 当 struts.xml 中的 action 没有配置 class 时,默认访问的是继承 ActionSupport 中的这个 execute 方法(IndexAction3.java) --> <!-- method="demoMethod" 对应的是 java 类中的方法,访问的时候就不用在 URL 中写:!demoMethod(不推荐) --> <!-- http://127.0.0.1:8080/Struts2/demo/demohello!demoMethod(推荐)(DMI 动态方法调用) --> <!-- <action name="demohello" class="com.v7struts2.test.StrutsDemo" method="demoMethod" > --> <action name="demohello" class="com.v7struts2.test.StrutsDemo" > <result name="success"> /Hello.jsp </result> <result name="shutdown"> /shutdown.jsp </result> </action> <!-- 默认跳转 action --> <action name="deaf"> <result> /default.jsp </result> </action> <!-- 通配符 --> <!-- 通配符 method 中的占位符,是根据 action-name 中的 * 来匹配的,从{0}~{n} 对应 StudnetInfo.java 中的方法 --> <!-- http://127.0.0.1:8080/Struts2/demo/StudentInfo_Info --> <!-- http://127.0.0.1:8080/Struts2/demo/Student {1}_ {2} --> <!--<action name="Student*_*" class="com.v7struts2.test.Student{1}" method="{2}" > <result name="SUCCESS">/Student{2}_success.jsp</result> </action> --> <!-- 通配符,优化 --> <!-- http://127.0.0.1:8080/Struts2/demo/StudentInfo_Info --> <!-- 灵活性更强 --> <action name="*_*" class="com.v7struts2.test.{1}" method="{2}" > <result name="SUCCESS">/Student{2}_success.jsp</result> </action> <!-- 当配置如下的时候,系统会先调下列精确度高的 action ,而不会去调用使用通配符的 action --> <!-- 使用通配符的 action 的优先级会低于精确度高的 action 的优先级 --> <!-- 而同时使用通配符的两个 action , 无优先级,只与两者前后的顺序有关. --> <action name="StudentInfo_Info" class="com.v7struts2.test.StudentInfo" method="Info" > <result name="SUCCESS">/StudentOK_success.jsp</result> </action> </package> <!-- Add packages here --> </struts>
<!-- 开发模式 --> <!-- 修改 <action name="hello">,不需要每次重启启服务器,让程序马上有反馈 --> <constant name="struts.devMode" value="true" />
4.配置 struts.xml4.配置 struts.xml4.配置 struts.xml