struts2.1.6 02

 <package name="front" namespace="/" extends="struts-default"/>  和java一样 是打包

<result name="success"/>  凡是name="success“ 可以不写,因为默认就是success

当copy一个struts 项目还需要改动   把原来的项目名称改成现在的


namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action.
namespace最好也用模块来进行命名 

定义自己的Action

  1. <pre name="code" class="java">xwork 的源码</pre>D:\dongxing\SSH\struts\res\xwork-2.1.2\src\java引入方法与struts一样  
  2. <pre></pre>  
  3. <p></p>  
  4. <p>xwork --> java Source Attachment --->  D:\dongxing\SSH\struts\res\xwork-2.1.2\src\java按 F3 可以切换到下一个联系的属性、方法、类、</p>  
  5. <pre name="code" class="java">package com.demo;  
  6.   
  7. public class IndexAction1 {  
  8.     public String execute() {  
  9.         return "success";  
  10.     }  
  11. }  
  12. </pre><br>  
  13. <pre name="code" class="java">package com.demo;  
  14.   
  15. import com.opensymphony.xwork2.Action;  
  16.   
  17. public class IndexAction2 implements Action{  
  18.     public String execute() throws Exception {  
  19.         return "success" ;  
  20.     }  
  21. }  
  22. </pre><br>  
  23. <p>开发的时候只用ActionSupport<br>  
  24. </p>  
  25. <pre name="code" class="java">package com.demo;  
  26.   
  27. import com.opensymphony.xwork2.ActionSupport;  
  28.   
  29. public class IndexAction3 extends ActionSupport {  
  30.     @Override  
  31.     public String execute() throws Exception {  
  32.         return "success" ;  
  33.     }  
  34. }  
  35. </pre><br>  
  36. 具体视图的返回可以由用户自己定义的Action来决定<br>  
  37. 具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容<br>  
  38. 具体Action的实现可以是一个普通的java类,里面有public String execute方法即可<br>  
  39. 或者实现Action接口<br>  
  40. 不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法<pre name="code" class="html"><constant name="struts.devMode" value="true"/>       
  41.       
  42.     <package name="front" extends="struts-default" namespace="/">  
  43.         <action name="index" class="com.demo.IndexAction3">  
  44.             <result name="success">   
  45.                 /ActionIntroduction.jsp  
  46.             </result>  
  47.         </action>  
  48.     </package></pre>  
  49. <p><br>  
  50. </p>  
  51. <p> 路径设置<br>  
  52. </p>  
  53. <p>struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br>  
  54. <a href="http://localhost:8080/Struts2_4_Introduction/index.jsp">index.jsp</a><br>  
  55. 虽然可以用redirect方式解决,但redirect方式并非必要。<br>  
  56. 解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)<br>  
  57. 或者使用myeclipse经常用的,指定basePath </p>  
  58. <pre name="code" class="java">package com.demo;  
  59.   
  60. public class PathAction {  
  61.     public String execute() {  
  62.         return "path" ;  
  63.     }  
  64. }  
  65. </pre><br>  
  66. <pre name="code" class="html"><constant name="struts.devMode" value="true"/>       
  67.       
  68.     <package name="front" extends="struts-default" namespace="/path">  
  69.         <action name="path" class="com.demo.PathAction">  
  70.             <result name="path">   
  71.                 /path.jsp  
  72.             </result>  
  73.         </action>  
  74.     </package></pre><br>  
  75. <pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  76. <%  
  77. String path = request.getContextPath();  
  78. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  79. %>  
  80. <html>  
  81.   <head>  
  82.   <body>  
  83.       
  84.         struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />  
  85.         <a href="<%=basePath%>index.jsp">index.jsp</a>  
  86.         <br />  
  87.         虽然可以用redirect方式解决,但redirect方式并非必要。  
  88.         <br />  
  89.         解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)  
  90.         <br />  
  91.         或者使用myeclipse经常用的,指定basePath  
  92.   </body>  
  93. </html>  
  94.   
  95.   
  96. </pre><br>  
  97. <pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  98. <html>  
  99.   <head>  
  100.   </head>  
  101.     
  102.   <body>  
  103.     <a href="path/path.action">路径问题说明</a>  
  104.   </body>  
  105. </html>  
  106. </pre><pre name="code" class="html"><%  
  107. String path = request.getContextPath();  
  108. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  109. %>  
  110.   
  111. </pre>String path = request.getContextPath();     webapplication  就是项目名称<br>  
  112. String basePath = request.getScheme()    http<br>  
  113. <p>+"://"+</p>  
  114. <p>request.getServerName()                           localhost <br>  
  115. </p>  
  116. <p>+":"+</p>  
  117. <p>request.getServerPort()                             8080<br>  
  118. </p>  
  119. <p>+path                                                           就是上面的项目名称<br>  
  120. </p>  
  121. <p>+"/";<br>  
  122. </p>  
  123. <p>相当于  http://localhost:8080/Struts2_4_Introduction/<br>  
  124. </p>  
  125. <p>即绝对路径</p>  
  126. <p><br>  
  127. </p>  
  128. <pre name="code" class="java">package com.demo;  
  129.   
  130. import com.opensymphony.xwork2.ActionSupport;  
  131.   
  132. public class UserAction extends ActionSupport {  
  133.       
  134.     public String add() {  
  135.         return SUCCESS ;  
  136.     }  
  137. }  
  138. </pre>  
  139. <p><br>  
  140. </p>  
  141. <pre name="code" class="html"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  142. <% String context = request.getContextPath(); %>  
  143. <html>  
  144.   <head>  
  145.   </head>  
  146.     
  147.   <body>  
  148.             Action执行的时候并不一定要执行execute方法<br />  
  149.         可以在配置文件中配置Action的时候用method=来指定执行哪个方法  
  150.         也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />  
  151.         <a href="<%=context %>/user/userAdd">添加用户</a>  
  152.         <br />  
  153.         <a href="<%=context %>/user/user!add">添加用户</a>  
  154.         <br />  
  155.         前者会产生太多的action,所以不推荐使用  
  156.   </body>  
  157. </html>  
  158. </pre><br>  
  159. <pre></pre>  
  160. <p></p>  
  161. <p></p>  
  162. <pre name="code" class="html"><?xml version="1.0" encoding="UTF-8" ?>  
  163. <!DOCTYPE struts PUBLIC  
  164.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  165.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  166.   
  167. <struts>  
  168.     <constant name="struts.devMode" value="true"/>       
  169.       
  170.     <package name="front" extends="struts-default" namespace="/user">  
  171.         <action name="userAdd" class="com.demo.UserAction" method="add">  
  172.             <result>   
  173.                 /user_add.success.jsp  
  174.             </result>  
  175.         </action>  
  176.           
  177.              <action name="user" class="com.demo.UserAction">  
  178.             <result>   
  179.                 /user_add_success.jsp  
  180.             </result>  
  181.         </action>  
  182.     </package>  
  183.   
  184. </struts>  
  185. </pre>开发中最常用以下这种<br>  
  186. <p></p>  
  187. <p></p>  
  188. <pre name="code" class="html"></action>  
  189.           
  190.              <action name="user" class="com.demo.UserAction">  
  191.             <result>   
  192.                 /user_add_success.jsp  
  193.             </result>  
  194.         </action></pre>  
  195. <p></p>  
  196. <p>通配符<br>  
  197. </p>  
  198. <p>使用通配符,将配置降到最低 <br>  
  199. <a href="/Struts2_6_Introduction/actions/Studentadd">添加学生</a> <a href="/Struts2_6_Introduction/actions/Studentdelete">  
  200. 删除学生</a> <br>  
  201. 不过,一定要遵守“约定优于配置”的原则 <br>  
  202. <a href="/Struts2_6_Introduction/actions/Teacher_add">添加老师</a> <a href="/Struts2_6_Introduction/actions/Teacher_delete">  
  203. 删除老师</a> <a href="/Struts2_6_Introduction/actions/Course_add">添加课程</a> <a href="/Struts2_6_Introduction/actions/Course_delete">  
  204. 删除课程</a> </p>  
  205. <p></p>  
  206. <pre name="code" class="java">package com.demo;  
  207.   
  208. import com.opensymphony.xwork2.ActionSupport;  
  209.   
  210. public class StudentAction extends ActionSupport {  
  211.     public String add() {  
  212.         return SUCCESS;  
  213.     }  
  214.     public String delete() {  
  215.         return SUCCESS;  
  216.     }  
  217. }  
  218. </pre><br>  
  219. <pre name="code" class="java">package com.demo;  
  220.   
  221. import com.opensymphony.xwork2.ActionSupport;  
  222.   
  223. public class TeacherAction extends ActionSupport{  
  224.     public String add() {  
  225.         return SUCCESS;  
  226.     }  
  227.     public String delete() {  
  228.         return SUCCESS;  
  229.     }  
  230. }  
  231. </pre><br>  
  232. <pre name="code" class="java"><%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  233. <%  
  234. String path = request.getContextPath();  
  235. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  236. %>  
  237.   
  238. <html>  
  239.   <head>  
  240.   </head>  
  241.   <body>  
  242. 使用通配符,将配置降到最低 <br/>  
  243. <a href="<%=path%>/actions/Studentadd">添加学生</a>  
  244. <a href="<%=path%>/actions/Studentdelete">删除学生</a> <br/>  
  245.   
  246.  不过,一定要遵守“约定优于配置”的原则 <br/>  
  247.  <a href="<%=path %>/actions/Teacher_add">添加老师</a>  
  248.  <a href="<%=path %>/actions/Teacher_delete">删除老师</a>  
  249.  <a href="<%=path %>/actions/Course_add">添加课程</a>  
  250.  <a href="<%=path %>/actions/Course_delete">删除课程</a>  
  251.   </body>  
  252. </html>  
  253. </pre>  
  254. <p></p>  
  255. <p></p>  
  256. <pre name="code" class="html"><?xml version="1.0" encoding="UTF-8" ?>  
  257. <!DOCTYPE struts PUBLIC  
  258.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  259.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  260.   
  261. <struts>  
  262.     <constant name="struts.devMode" value="true"/>       
  263.       
  264.     <package name="front" extends="struts-default" namespace="/actions">  
  265.         <action name="Student*" class="com.demo.StudentAction" method="{1}">  
  266.             <result>   
  267.                 /Student{1}_success.jsp  
  268.             </result>  
  269.         </action>  
  270.           
  271.              <action name="*_*" class="com.demo.{1}Action" method="{2}">  
  272.             <result>   
  273.                 /{1}_{2}_success.jsp  
  274.             </result>  
  275.         </action>  
  276.     </package>  
  277. </struts>  
  278. </pre>  
  279. <p></p>  
  280. <p> <action name="Student*" class="com.demo.StudentAction" method="{1}">    ===> {1}  代表第一个* 号 </p>  
  281. <p>首先匹配最精确、前后顺序</p>  
  282. <p>action 传参数</p>  
  283. <p></p>  
  284. <pre name="code" class="java">package com.demo;  
  285.   
  286. import com.opensymphony.xwork2.ActionSupport;  
  287.   
  288. public class UserAction extends ActionSupport {  
  289.     private String name;  
  290.     private int age;  
  291.       
  292.       
  293.     public String add() {  
  294.         System.out.println("name= " + name);  
  295.         System.out.println("age= " + age);  
  296.         return SUCCESS;  
  297.     }  
  298.   
  299.     public String getName() {  
  300.         return name;  
  301.     }  
  302.     public void setName(String name) {  
  303.         this.name = name;  
  304.     }  
  305.     public int getAge() {  
  306.         return age;  
  307.     }  
  308.     public void setAge(int age) {  
  309.         this.age = age;  
  310.     }  
  311.       
  312. }  
  313. </pre><br>  
  314. <pre name="code" class="html"><body>  
  315.         使用action 属性接收参数 <a href="user/user!add?name=a&age=9">添加用户</a>  
  316.   </body></pre><pre name="code" class="html"><constant name="struts.devMode" value="true"/>       
  317.       
  318.     <package name="front" extends="struts-default" namespace="/user">  
  319.         <action name="user" class="com.demo.UserAction">  
  320.             <result>   
  321.                 /user_add_success.jsp  
  322.             </result>  
  323.         </action>  
  324.     </package></pre>  
  325. <p><br>  
  326. </p>  
  327. <p>DTO</p>  
  328. <p></p>  
  329. <pre name="code" class="java">package com.demo.action;  
  330.   
  331. import com.demo.dto.UserDTO;  
  332. import com.demo.model.User;  
  333. import com.opensymphony.xwork2.ActionSupport;  
  334.   
  335. public class UserAction extends ActionSupport {  
  336.     private User user;  
  337.     //private UserDTO userDTO;  
  338.     public String add() {  
  339.         System.out.println("name= " + user.getName());  
  340.         System.out.println("age= " + user.getAge());  
  341.         return SUCCESS;  
  342.     }  
  343.     public User getUser() {  
  344.         return user;  
  345.     }  
  346.   
  347.     public void setUser(User user) {  
  348.         this.user = user;  
  349.     }  
  350.       
  351. }  
  352. </pre><br>  
  353. <pre name="code" class="java">  使用Dmain Model 属性接收参数 <a href="user/user!add?user.name=a&user.age=9">添加用户(最常用接收参数的方法)</a></pre>  
  354. <p></p>  
  355. <p>user.属性接收参数 <br>  
  356. </p>  
  357. <p></p>  
  358. <pre name="code" class="java">package com.demo.dto;  
  359.   
  360. public class UserDTO {  
  361.     private String name;  
  362.     private String password;  
  363.     private String confirmingPassword;  
  364. }</pre><img src="http://hi.csdn.net/attachment/201111/11/0_13210413271S61.gif" alt="">  
  365. <p></p>  
  366. <br>  
  367. <p>ModelDrivenParamInput</p>  
  368. <p></p>  
  369. <pre name="code" class="java">package com.demo.action;  
  370.   
  371. import com.demo.model.User;  
  372. import com.opensymphony.xwork2.ActionSupport;  
  373. import com.opensymphony.xwork2.ModelDriven;  
  374.   
  375. public class UserAction extends ActionSupport implements ModelDriven<User> {  
  376.     private User user = new User();  
  377.     public String add() {  
  378.         System.out.println("name= " + user.getName());  
  379.         System.out.println("age= " + user.getAge());  
  380.         return SUCCESS;  
  381.     }  
  382.     public User getModel() {  
  383.         return user;  
  384.     }  
  385. }  
  386.   
  387. package com.demo.model;  
  388.   
  389. public class User {  
  390.     private String name;  
  391.     private int age;  
  392.     public String getName() {  
  393.         return name;  
  394.     }  
  395.     public void setName(String name) {  
  396.         this.name = name;  
  397.     }  
  398.     public int getAge() {  
  399.         return age;  
  400.     }  
  401.     public void setAge(int age) {  
  402.         this.age = age;  
  403.     }  
  404.       
  405. }  
  406.   
  407. index.jsp    使用Dmain Model 属性接收参数 <a href="user/user!add?name=a&age=9">添加用户</a>   
  408. </pre>  
  409. <p></p>  
  410. <p><img src="http://hi.csdn.net/attachment/201111/11/0_13210416523vW5.gif" alt=""></p>  
  411. <p></p>  
  412. <pre></pre>  
  413. <pre></pre>  
  414. <pre></pre>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值