`
soardragon
  • 浏览: 316490 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

初识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. <!---->
  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.     <!---->  
  10.   
  11. 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. <!---->
  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>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>  
分享到:
评论

相关推荐

    初识[Struts2.0]并[使用Struts2.0]进行SSH集成

    在"初识[Struts2.0]并[使用Struts2.0]进行SSH集成"的学习过程中,"userLogin"可能是一个示例应用,涉及用户登录功能。用户登录通常包括用户输入验证、数据库查询等操作,这些可以通过Struts2.0的Action实现,而...

    Struts教程大全

    "struts2.0中文帮助手册.chm"是Struts 2的中文版帮助文档,对于中文使用者来说,这是一个非常实用的资源,因为它能帮助理解复杂的框架概念和用法,避免语言障碍。 "精通Struts技术.doc"和"Struts架构指导.doc"可能...

    strus2.0的使用

    Struts2.0是Java Web开发中的一个框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化和可扩展的方式来构建应用程序。在本手册中,我们将深入探讨Struts2.0的核心概念和使用方法。 **1. ...

    JAVA程序开发大全---上半部分

    12.1.2 Struts 2.0与Struts 1.x框架的区别 215 12.2 MyEclipse创建基于Struts 2.0框架的项目 215 12.2.1 下载Struts 2.0开发包 216 12.2.2 创建Struts 2.0项目 216 12.2.3 配置Struts 2.0项目 217 12.2.4 创建Struts...

    java web 整合开发源代码(第四章)

    在本章中,我们将深入探讨Java Web整合开发的第四章——"初识Java EE展示层组件JSP2.0"。这一章节主要关注如何利用JavaServer Pages(JSP)技术来构建动态网页,同时结合Struts和Hibernate这两个关键框架,为Java ...

    《精通Java+Web整合开发》刘斌

    第08章“初识Java EE经典MVC框架Struts”带领读者进入模型-视图-控制器(Model-View-Controller,MVC)设计模式的世界。Struts是Java Web开发中广泛应用的一个开源框架,用于构建基于JSP和Servlet的应用。在这一章,...

    精通JSP-Web开发技术与典型应用 光盘代码

    \ch01\* 第1章 初识JSP所有例程代码 \ch02\* 第2章 HTTP和Servlet基础 所有例程代码 \ch03\* 第3章 JSP基本语法所有例程代码 \ch04\* 第4章 JSP内置对象所有例程代码 \ch05\* 第5章 JavaBean在JSP中的应用所有...

Global site tag (gtag.js) - Google Analytics