打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
struts2.01学习笔记! dhj1
struts2.01学习笔记!

先按照文档,做一次:

1,建立WEB.XML:

代码
  1. <!-- 段洪杰 -->  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <web-app>  
  4.   
  5.     <display-name>Struts Blank</display-name>  
  6.   
  7.     <filter>  
  8.         <filter-name>struts2</filter-name>  
  9.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  10.     </filter>  
  11.   
  12.     <filter-mapping>  
  13.         <filter-name>struts2</filter-name>  
  14.         <url-pattern>/*</url-pattern>  
  15.     </filter-mapping>  
  16.   
  17.     <listener>  
  18.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  19.     </listener>  
  20.   
  21.     <welcome-file-list>  
  22.         <welcome-file>index.html</welcome-file>  
  23.     </welcome-file-list>  
  24. </web-app>  

 

文档中有一个org.apache.struts2.dispatcher.FilterDispatcher的filter
还有org.springframework.web.context.ContextLoaderListener

2.建SPRING的BEAN配置文件:applicationContext.xml

代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3.   
  4. <beans default-autowire="autodetect">  
  5.     <!-- add your spring beans here -->  
  6. </beans>  

 

3.建struts配置文件:

代码
  1. <!DOCTYPE struts PUBLIC   
  2.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  3.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  4.   
  5. <struts>  
  6.   
  7.     <include file="example.xml"/>  
  8.   
  9.     <!-- Add packages here -->  
  10.   
  11. </struts>  

 

演示了一下配置文件分块的方法,下面这个才起作用:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

代码
  1. <struts>  
  2.   
  3.     <package name="example" namespace="/example" extends="struts-default">  
  4.   
  5.         <action name="HelloWorld" class="example.HelloWorld">  
  6.             <result>/example/HelloWorld.jsp</result>  
  7.         </action>  
  8.   
  9.         <action name="Login!*" method="{1}" class="example.Login">  
  10.             <result name="input">/example/Login.jsp</result>  
  11.             <result type="redirect-action">Menu</result>  
  12.         </action>  
  13.   
  14.         <action name="*" class="example.ExampleSupport">  
  15.             <result>/example/{1}.jsp</result>  
  16.         </action>  
  17.   
  18.         <!-- Add actions here -->  
  19.     </package>  
  20. </struts>  

 

4,录入验证:Login-validation.xml
这个很象struts1.x

代码
  1. <!DOCTYPE validators PUBLIC   
  2.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  3.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  4.   
  5. <validators>  
  6.     <field name="username">  
  7.         <field-validator type="requiredstring">  
  8.             <message key="requiredstring"/>  
  9.         </field-validator>  
  10.     </field>  
  11.     <field name="password">  
  12.         <field-validator type="requiredstring">  
  13.             <message key="requiredstring"/>  
  14.         </field-validator>  
  15.     </field>  
  16. </validators>  

 

5.建立资源文件package.properties,这个也很象struts1.x

代码
  1. HelloWorld.message= Struts is up and running ...   
  2. requiredstring = ${getText(fieldName)} is required.   
  3. password = Password   
  4. username = User Name   
  5. Missing.message =  This feature is under construction. Please try again in the next interation.  

 

6.搞个action类,和WW2一模一样:

代码
  1. package example;   
  2.   
  3. public class Login extends ExampleSupport {   
  4.   
  5.     public String execute() throws Exception {   
  6.   
  7.         if (isInvalid(getUsername())) return INPUT;   
  8.   
  9.         if (isInvalid(getPassword())) return INPUT;   
  10.   
  11.         return SUCCESS;   
  12.     }   
  13.   
  14.     private boolean isInvalid(String value) {   
  15.         return (value == null || value.length() == 0);   
  16.     }   
  17.   
  18.     private String username;   
  19.   
  20.     public String getUsername() {   
  21.         return username;   
  22.     }   
  23.   
  24.     public void setUsername(String username) {   
  25.         this.username = username;   
  26.     }   
  27.   
  28.     private String password;   
  29.   
  30.     public String getPassword() {   
  31.         return password;   
  32.     }   
  33.   
  34.     public void setPassword(String password) {   
  35.         this.password = password;   
  36.     }   
  37.   
  38. }  

 

7.搞个helloworld类,也和WW2一样:
这里调用了资源文件中的 message, 这里比struts1.X类似功能要直接,会好用一些

代码
  1. package example;   
  2.   
  3. /**   
  4.  * <code>Set welcome message.</code>  
  5.  */   
  6. public class HelloWorld extends ExampleSupport {   
  7.   
  8.     public String execute() throws Exception {   
  9.         setMessage(getText(MESSAGE));   
  10.         return SUCCESS;   
  11.     }   
  12.   
  13.     /**   
  14.      * Provide default valuie for Message property.   
  15.      */   
  16.     public static final String MESSAGE = "HelloWorld.message";   
  17.   
  18.     /**   
  19.      * Field for Message property.   
  20.      */   
  21.     private String message;   
  22.   
  23.     /**   
  24.      * Return Message property.   
  25.      *   
  26.      * @return Message property   
  27.      */   
  28.     public String getMessage() {   
  29.         return message;   
  30.     }   
  31.   
  32.     /**   
  33.      * Set Message property.   
  34.      *   
  35.      * @param message Text to display on HelloWorld page.   
  36.      */   
  37.     public void setMessage(String message) {   
  38.         this.message = message;   
  39.     }   
  40. }  

 

8。搞个父类出来,这里只是演示用,所以空的

ExampleSupport.java

代码
  1. package example;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4.   
  5. /**  
  6.  * Base Action class for the Tutorial package.  
  7.  */  
  8. public class ExampleSupport extends ActionSupport {   
  9. }  

 

9。可以测试一下了:

代码
  1. package example;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import com.opensymphony.xwork2.config.entities.ActionConfig;   
  5.   
  6. import java.util.Map;   
  7. import java.util.Collection;   
  8. import java.util.List;   
  9.   
  10. public class LoginTest extends ConfigTest {   
  11.   
  12.     public void FIXME_testLoginConfig() throws Exception {   
  13.         ActionConfig config = assertClass("example""Login!input""example.Login");   
  14.         assertResult(config, ActionSupport.SUCCESS, "Menu");   
  15.         assertResult(config, ActionSupport.INPUT, "/example/Login.jsp");   
  16.     }   
  17.   
  18.     public void testLoginSubmit() throws Exception {   
  19.         Login login = new Login();   
  20.         login.setUsername("username");   
  21.         login.setPassword("password");   
  22.         String result = login.execute();   
  23.         assertSuccess(result);   
  24.     }   
  25.   
  26.     // Needs access to an envinronment that includes validators   
  27.     public void FIXME_testLoginSubmitInput() throws Exception {   
  28.         Login login = new Login();   
  29.         String result = login.execute();   
  30.         assertInput(result);   
  31.         Map errors = assertFieldErrors(login);   
  32.         assertFieldError(errors,"username","Username is required.");   
  33.         assertFieldError(errors,"password","Password is required.");   
  34.     }   
  35.   
  36. }  

代码
  1. package example;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import junit.framework.TestCase;   
  5.   
  6. public class HelloWorldTest extends TestCase {   
  7.   
  8.     public void testHelloWorld() throws Exception {   
  9.         HelloWorld hello_world = new HelloWorld();   
  10.         String result = hello_world.execute();   
  11.         assertTrue("Expected a success result!",   
  12.                 ActionSupport.SUCCESS.equals(result));   
  13.         assertTrue("Expected the default message!",   
  14.                 hello_world.getText(HelloWorld.MESSAGE).equals(hello_world.getMessage()));   
  15.     }   
  16. }  

 

代码
  1. package example;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. import com.opensymphony.xwork2.config.RuntimeConfiguration;   
  5. import com.opensymphony.xwork2.config.entities.ActionConfig;   
  6. import com.opensymphony.xwork2.config.entities.ResultConfig;   
  7. import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;   
  8.   
  9. import java.util.Map;   
  10. import java.util.List;   
  11.   
  12. import org.apache.struts2.StrutsTestCase;   
  13.   
  14. public class ConfigTest extends StrutsTestCase {   
  15.   
  16.     protected void assertSuccess(String result) throws Exception {   
  17.         assertTrue("Expected a success result!",   
  18.                 ActionSupport.SUCCESS.equals(result));   
  19.     }   
  20.   
  21.     protected void assertInput(String result) throws Exception {   
  22.         assertTrue("Expected an input result!",   
  23.                 ActionSupport.INPUT.equals(result));   
  24.     }   
  25.   
  26.     protected Map assertFieldErrors(ActionSupport action) throws Exception {   
  27.         assertTrue(action.hasFieldErrors());   
  28.         return action.getFieldErrors();   
  29.     }   
  30.   
  31.     protected void assertFieldError(Map field_errors, String field_name, String error_message) {   
  32.   
  33.         List errors = (List) field_errors.get(field_name);   
  34.         assertNotNull("Expected errors for " + field_name, errors);   
  35.         assertTrue("Expected errors for " + field_name, errors.size()>0);   
  36.         // TODO: Should be a loop   
  37.         assertEquals(error_message,errors.get(0));   
  38.   
  39.     }   
  40.   
  41.     protected void setUp() throws Exception {   
  42.         super.setUp();   
  43.         XmlConfigurationProvider c = new XmlConfigurationProvider("struts.xml");   
  44.         configurationManager.addConfigurationProvider(c);   
  45.         configurationManager.reload();   
  46.     }   
  47.   
  48.     protected ActionConfig assertClass(String namespace, String action_name, String class_name) {   
  49.         RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration();   
  50.         ActionConfig config = configuration.getActionConfig(namespace, action_name);   
  51.         assertNotNull("Mssing action", config);   
  52.         assertTrue("Wrong class name: [" + config.getClassName() + "]",   
  53.                 class_name.equals(config.getClassName()));   
  54.         return config;   
  55.     }   
  56.   
  57.     protected ActionConfig assertClass(String action_name, String class_name) {   
  58.         return assertClass("", action_name, class_name);   
  59.     }   
  60.   
  61.     protected void assertResult(ActionConfig config, String result_name, String result_value) {   
  62.         Map results = config.getResults();   
  63.         ResultConfig result = (ResultConfig) results.get(result_name);   
  64.         Map params = result.getParams();   
  65.         String value = (String) params.get("actionName");   
  66.         if (value == null)   
  67.             value = (String) params.get("location");   
  68.         assertTrue("Wrong result value: [" + value + "]",   
  69.                 result_value.equals(value));   
  70.     }   
  71.   
  72.     public void testConfig() throws Exception {   
  73.         assertNotNull(configurationManager);   
  74.     }   
  75.   
  76. }  

 

哦,测试通过!

10。看看表示层是如何用的?
HelloWorld.jsp

代码
  1. <%@ page contentType="text/html; charset=UTF-8" %>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <html>  
  4. <head>  
  5.     <title><s:text name="HelloWorld.message"/></title>  
  6. </head>  
  7.   
  8. <body>  
  9. <h2><s:property value="message"/></h2>  
  10.   
  11. <h3>Languages</h3>  
  12. <ul>  
  13.     <li>  
  14.         <s:url id="url" action="HelloWorld">  
  15.             <s:param name="request_locale">en</s:param>  
  16.         </s:url>  
  17.         <s:a href="%{url}">English</s:a>  
  18.     </li>  
  19.     <li>  
  20.         <s:url id="url" action="HelloWorld">  
  21.             <s:param name="request_locale">es</s:param>  
  22.         </s:url>  
  23.         <s:a href="%{url}">Espanol</s:a>  
  24.     </li>  
  25. </ul>  
  26.   
  27. </body>  
  28. </html>  

 

Login.jsp

代码
  1. <%@ page contentType="text/html; charset=UTF-8" %>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <html>  
  4. <head>  
  5.     <title>Sign On</title>  
  6. </head>  
  7.   
  8. <body>  
  9. <s:form action="Login">  
  10.     <s:textfield label="%{getText(‘username‘)}" name="username"/>  
  11.     <s:password label="%{getText(‘password‘)}" name="password" />  
  12.     <s:submit/>  
  13. </s:form>  
  14. </body>  
  15. </html>  

 

恭喜你! 现在您现在已经可以用STRUTS2进行开发了!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Struts 2.0的Action讲解
Struts2入门教程-Hello World
struts2------Convention Plugin
关于Action接受参数的四种方法
Struts2教程
WebWork初体验
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服