struts2.01学习笔记!

    技术2022-05-11  59

    先按照文档,做一次:

    1,建立WEB.XML:

    代码 <!-- 段洪杰 -->  <?xml version="1.0" encoding="UTF-8"?>  <web-app>        <display-name>Struts Blank</display-name>        <filter>          <filter-name>struts2</filter-name>          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>      </filter>        <filter-mapping>          <filter-name>struts2</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>        <listener>          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>      </listener>        <welcome-file-list>          <welcome-file>index.html</welcome-file>      </welcome-file-list>  </web-app>   <script type="text/javascript">render_code();</script>

     

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

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

     

    代码 <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">    <beans default-autowire="autodetect">      <!-- add your spring beans here -->  </beans>   <script type="text/javascript">render_code();</script>

     

    3.建struts配置文件:

    代码 <!DOCTYPE struts PUBLIC           "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"           "http://struts.apache.org/dtds/struts-2.0.dtd">    <struts>        <include file="example.xml"/>        <!-- Add packages here -->    </struts>   <script type="text/javascript">render_code();</script>

     

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

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

     

    代码 <struts>        <package name="example" namespace="/example" extends="struts-default">            <action name="HelloWorld" class="example.HelloWorld">              <result>/example/HelloWorld.jsp</result>          </action>            <action name="Login!*" method="{1}" class="example.Login">              <result name="input">/example/Login.jsp</result>              <result type="redirect-action">Menu</result>          </action>            <action name="*" class="example.ExampleSupport">              <result>/example/{1}.jsp</result>          </action>            <!-- Add actions here -->      </package>  </struts>   <script type="text/javascript">render_code();</script>

     

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

    代码 <!DOCTYPE validators PUBLIC           "-//OpenSymphony Group//XWork Validator 1.0.2//EN"           "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">    <validators>      <field name="username">          <field-validator type="requiredstring">              <message key="requiredstring"/>          </field-validator>      </field>      <field name="password">          <field-validator type="requiredstring">              <message key="requiredstring"/>          </field-validator>      </field>  </validators>   <script type="text/javascript">render_code();</script>

     

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

     

    代码 HelloWorld.message= Struts is up and running ...   requiredstring = ${getText(fieldName)} is required.   password = Password   username = User Name   Missing.message =  This feature is under construction. Please try again in the next interation.   <script type="text/javascript">render_code();</script>

     

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

     

    代码 package example;     public class Login extends ExampleSupport {         public String execute() throws Exception {             if (isInvalid(getUsername())) return INPUT;             if (isInvalid(getPassword())) return INPUT;             return SUCCESS;       }         private boolean isInvalid(String value) {           return (value == null || value.length() == 0);       }         private String username;         public String getUsername() {           return username;       }         public void setUsername(String username) {           this.username = username;       }         private String password;         public String getPassword() {           return password;       }         public void setPassword(String password) {           this.password = password;       }     }   <script type="text/javascript">render_code();</script>

     

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

     

    代码 package example;     /**    * <code>Set welcome message.</code>   */   public class HelloWorld extends ExampleSupport {         public String execute() throws Exception {           setMessage(getText(MESSAGE));           return SUCCESS;       }         /**        * Provide default valuie for Message property.        */       public static final String MESSAGE = "HelloWorld.message";         /**        * Field for Message property.        */       private String message;         /**        * Return Message property.        *        * @return Message property        */       public String getMessage() {           return message;       }         /**        * Set Message property.        *        * @param message Text to display on HelloWorld page.        */       public void setMessage(String message) {           this.message = message;       }   }   <script type="text/javascript">render_code();</script>

     

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

    ExampleSupport.java

    代码 package example;     import com.opensymphony.xwork2.ActionSupport;     /**   * Base Action class for the Tutorial package.   */  public class ExampleSupport extends ActionSupport {   }   <script type="text/javascript">render_code();</script>

     

    9。可以测试一下了:

     

    代码 package example;     import com.opensymphony.xwork2.ActionSupport;   import com.opensymphony.xwork2.config.entities.ActionConfig;     import java.util.Map;   import java.util.Collection;   import java.util.List;     public class LoginTest extends ConfigTest {         public void FIXME_testLoginConfig() throws Exception {           ActionConfig config = assertClass("example""Login!input""example.Login");           assertResult(config, ActionSupport.SUCCESS, "Menu");           assertResult(config, ActionSupport.INPUT, "/example/Login.jsp");       }         public void testLoginSubmit() throws Exception {           Login login = new Login();           login.setUsername("username");           login.setPassword("password");           String result = login.execute();           assertSuccess(result);       }         // Needs access to an envinronment that includes validators       public void FIXME_testLoginSubmitInput() throws Exception {           Login login = new Login();           String result = login.execute();           assertInput(result);           Map errors = assertFieldErrors(login);           assertFieldError(errors,"username","Username is required.");           assertFieldError(errors,"password","Password is required.");       }     }   <script type="text/javascript">render_code();</script> 代码 package example;     import com.opensymphony.xwork2.ActionSupport;   import junit.framework.TestCase;     public class HelloWorldTest extends TestCase {         public void testHelloWorld() throws Exception {           HelloWorld hello_world = new HelloWorld();           String result = hello_world.execute();           assertTrue("Expected a success result!",                   ActionSupport.SUCCESS.equals(result));           assertTrue("Expected the default message!",                   hello_world.getText(HelloWorld.MESSAGE).equals(hello_world.getMessage()));       }   }   <script type="text/javascript">render_code();</script>

     

     

    代码 package example;     import com.opensymphony.xwork2.ActionSupport;   import com.opensymphony.xwork2.config.RuntimeConfiguration;   import com.opensymphony.xwork2.config.entities.ActionConfig;   import com.opensymphony.xwork2.config.entities.ResultConfig;   import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;     import java.util.Map;   import java.util.List;     import org.apache.struts2.StrutsTestCase;     public class ConfigTest extends StrutsTestCase {         protected void assertSuccess(String result) throws Exception {           assertTrue("Expected a success result!",                   ActionSupport.SUCCESS.equals(result));       }         protected void assertInput(String result) throws Exception {           assertTrue("Expected an input result!",                   ActionSupport.INPUT.equals(result));       }         protected Map assertFieldErrors(ActionSupport action) throws Exception {           assertTrue(action.hasFieldErrors());           return action.getFieldErrors();       }         protected void assertFieldError(Map field_errors, String field_name, String error_message) {             List errors = (List) field_errors.get(field_name);           assertNotNull("Expected errors for " + field_name, errors);           assertTrue("Expected errors for " + field_name, errors.size()>0);           // TODO: Should be a loop           assertEquals(error_message,errors.get(0));         }         protected void setUp() throws Exception {           super.setUp();           XmlConfigurationProvider c = new XmlConfigurationProvider("struts.xml");           configurationManager.addConfigurationProvider(c);           configurationManager.reload();       }         protected ActionConfig assertClass(String namespace, String action_name, String class_name) {           RuntimeConfiguration configuration = configurationManager.getConfiguration().getRuntimeConfiguration();           ActionConfig config = configuration.getActionConfig(namespace, action_name);           assertNotNull("Mssing action", config);           assertTrue("Wrong class name: [" + config.getClassName() + "]",                   class_name.equals(config.getClassName()));           return config;       }         protected ActionConfig assertClass(String action_name, String class_name) {           return assertClass("", action_name, class_name);       }         protected void assertResult(ActionConfig config, String result_name, String result_value) {           Map results = config.getResults();           ResultConfig result = (ResultConfig) results.get(result_name);           Map params = result.getParams();           String value = (String) params.get("actionName");           if (value == null)               value = (String) params.get("location");           assertTrue("Wrong result value: [" + value + "]",                   result_value.equals(value));       }         public void testConfig() throws Exception {           assertNotNull(configurationManager);       }     }   <script type="text/javascript">render_code();</script>

     

    哦,测试通过!

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

    代码 <%@ page contentType="text/html; charset=UTF-8" %>  <%@ taglib prefix="s" uri="/struts-tags" %>  <html>  <head>      <title><s:text name="HelloWorld.message"/></title>  </head>    <body>  <h2><s:property value="message"/></h2>    <h3>Languages</h3>  <ul>      <li>          <s:url id="url" action="HelloWorld">              <s:param name="request_locale">en</s:param>          </s:url>          <s:a href="%{url}">English</s:a>      </li>      <li>          <s:url id="url" action="HelloWorld">              <s:param name="request_locale">es</s:param>          </s:url>          <s:a href="%{url}">Espanol</s:a>      </li>  </ul>    </body>  </html>   <script type="text/javascript">render_code();</script>

     

    Login.jsp

     

    代码 <%@ page contentType="text/html; charset=UTF-8" %>  <%@ taglib prefix="s" uri="/struts-tags" %>  <html>  <head>      <title>Sign On</title>  </head>    <body>  <s:form action="Login">      <s:textfield label="%{getText('username')}" name="username"/>      <s:password label="%{getText('password')}" name="password" />      <s:submit/>  </s:form>  </body>  </html>   <script type="text/javascript">render_code();</script>

     

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

     

    最新回复(0)