初识struts2.0

先按照文档,做一次:

1,建立WEB.XML:

代码
  1.   
  2. xml version="1.0" encoding="UTF-8"?>  
  3. <web-app>  
  4.   
  5.     <display-name>Struts Blankdisplay-name>  
  6.   
  7.     <filter>  
  8.         <filter-name>struts2filter-name>  
  9.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcherfilter-class>  
  10.     filter>  
  11.   
  12.     <filter-mapping>  
  13.         <filter-name>struts2filter-name>  
  14.         <url-pattern>/*url-pattern>  
  15.     filter-mapping>  
  16.   
  17.     <listener>  
  18.         <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
  19.     listener>  
  20.   
  21.     <welcome-file-list>  
  22.         <welcome-file>index.htmlwelcome-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. >  
  3.   
  4. <beans default-autowire="autodetect">  
  5.       
  6. beans>  

 

3.建struts配置文件:

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

 

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

"-//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.jspresult>  
  7.         action>  
  8.   
  9.         <action name="Login!*" method="{1}" class="example.Login">  
  10.             <result name="input">/example/Login.jspresult>  
  11.             <result type="redirect-action">Menuresult>  
  12.         action>  
  13.   
  14.         <action name="*" class="example.ExampleSupport">  
  15.             <result>/example/{1}.jspresult>  
  16.         action>  
  17.   
  18.           
  19.     package>  
  20. struts>  

 

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

代码
  1.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  2.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  3.   
  4. <validators>  
  5.     <field name="username">  
  6.         <field-validator type="requiredstring">  
  7.             <message key="requiredstring"/>  
  8.         field-validator>  
  9.     field>  
  10.     <field name="password">  
  11.         <field-validator type="requiredstring">  
  12.             <message key="requiredstring"/>  
  13.         field-validator>  
  14.     field>  
  15. 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>Languagesh3>  
  12. <ul>  
  13.     <li>  
  14.         <s:url id="url" action="HelloWorld">  
  15.             <s:param name="request_locale">ens:param>  
  16.         s:url>  
  17.         <s:a href="%{url}">Englishs:a>  
  18.     li>  
  19.     <li>  
  20.         <s:url id="url" action="HelloWorld">  
  21.             <s:param name="request_locale">ess:param>  
  22.         s:url>  
  23.         <s:a href="%{url}">Espanols: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 Ontitle>  
  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>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值