`

struts2.0 学习笔记

阅读更多
struts2.0 学习笔记

先按照文档,做一次:

1,建立WEB.XML:

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

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

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

代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beansdefault-autowire="autodetect">
  4. <!--addyourspringbeanshere-->
  5. </beans>

3.建struts配置文件:

代码
  1. <!DOCTYPEstrutsPUBLIC
  2. "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
  3. "http://struts.apache.org/dtds/struts-2.0.dtd">
  4. <struts>
  5. <includefile="example.xml"/>
  6. <!--Addpackageshere-->
  7. </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. <packagename="example"namespace="/example"extends="struts-default">
  3. <actionname="HelloWorld"class="example.HelloWorld">
  4. <result>/example/HelloWorld.jsp</result>
  5. </action>
  6. <actionname="Login!*"method="{1}"class="example.Login">
  7. <resultname="input">/example/Login.jsp</result>
  8. <resulttype="redirect-action">Menu</result>
  9. </action>
  10. <actionname="*"class="example.ExampleSupport">
  11. <result>/example/{1}.jsp</result>
  12. </action>
  13. <!--Addactionshere-->
  14. </package>
  15. </struts>

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

代码
  1. <!DOCTYPEvalidatorsPUBLIC
  2. "-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
  3. "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  4. <validators>
  5. <fieldname="username">
  6. <field-validatortype="requiredstring">
  7. <messagekey="requiredstring"/>
  8. </field-validator>
  9. </field>
  10. <fieldname="password">
  11. <field-validatortype="requiredstring">
  12. <messagekey="requiredstring"/>
  13. </field-validator>
  14. </field>
  15. </validators>

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

代码
  1. HelloWorld.message=Strutsisupandrunning...
  2. requiredstring=${getText(fieldName)}isrequired.
  3. password=Password
  4. username=UserName
  5. Missing.message=Thisfeatureisunderconstruction.Pleasetryagaininthenextinteration.

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

代码
  1. packageexample;
  2. publicclassLoginextendsExampleSupport{
  3. publicStringexecute()throwsException{
  4. if(isInvalid(getUsername()))returnINPUT;
  5. if(isInvalid(getPassword()))returnINPUT;
  6. returnSUCCESS;
  7. }
  8. privatebooleanisInvalid(Stringvalue){
  9. return(value==null||value.length()==0);
  10. }
  11. privateStringusername;
  12. publicStringgetUsername(){
  13. returnusername;
  14. }
  15. publicvoidsetUsername(Stringusername){
  16. this.username=username;
  17. }
  18. privateStringpassword;
  19. publicStringgetPassword(){
  20. returnpassword;
  21. }
  22. publicvoidsetPassword(Stringpassword){
  23. this.password=password;
  24. }
  25. }

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

代码
  1. packageexample;
  2. /**
  3. *<code>Setwelcomemessage.</code>
  4. */
  5. publicclassHelloWorldextendsExampleSupport{
  6. publicStringexecute()throwsException{
  7. setMessage(getText(MESSAGE));
  8. returnSUCCESS;
  9. }
  10. /**
  11. *ProvidedefaultvaluieforMessageproperty.
  12. */
  13. publicstaticfinalStringMESSAGE="HelloWorld.message";
  14. /**
  15. *FieldforMessageproperty.
  16. */
  17. privateStringmessage;
  18. /**
  19. *ReturnMessageproperty.
  20. *
  21. *@returnMessageproperty
  22. */
  23. publicStringgetMessage(){
  24. returnmessage;
  25. }
  26. /**
  27. *SetMessageproperty.
  28. *
  29. *@parammessageTexttodisplayonHelloWorldpage.
  30. */
  31. publicvoidsetMessage(Stringmessage){
  32. this.message=message;
  33. }
  34. }

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

ExampleSupport.java

代码
  1. packageexample;
  2. importcom.opensymphony.xwork2.ActionSupport;
  3. /**
  4. *BaseActionclassfortheTutorialpackage.
  5. */
  6. publicclassExampleSupportextendsActionSupport{
  7. }

9。可以测试一下了:

代码
  1. packageexample;
  2. importcom.opensymphony.xwork2.ActionSupport;
  3. importcom.opensymphony.xwork2.config.entities.ActionConfig;
  4. importjava.util.Map;
  5. importjava.util.Collection;
  6. importjava.util.List;
  7. publicclassLoginTestextendsConfigTest{
  8. publicvoidFIXME_testLoginConfig()throwsException{
  9. ActionConfigconfig=assertClass("example","Login!input","example.Login");
  10. assertResult(config,ActionSupport.SUCCESS,"Menu");
  11. assertResult(config,ActionSupport.INPUT,"/example/Login.jsp");
  12. }
  13. publicvoidtestLoginSubmit()throwsException{
  14. Loginlogin=newLogin();
  15. login.setUsername("username");
  16. login.setPassword("password");
  17. Stringresult=login.execute();
  18. assertSuccess(result);
  19. }
  20. //Needsaccesstoanenvinronmentthatincludesvalidators
  21. publicvoidFIXME_testLoginSubmitInput()throwsException{
  22. Loginlogin=newLogin();
  23. Stringresult=login.execute();
  24. assertInput(result);
  25. Maperrors=assertFieldErrors(login);
  26. assertFieldError(errors,"username","Usernameisrequired.");
  27. assertFieldError(errors,"password","Passwordisrequired.");
  28. }
  29. }

代码
  1. packageexample;
  2. importcom.opensymphony.xwork2.ActionSupport;
  3. importjunit.framework.TestCase;
  4. publicclassHelloWorldTestextendsTestCase{
  5. publicvoidtestHelloWorld()throwsException{
  6. HelloWorldhello_world=newHelloWorld();
  7. Stringresult=hello_world.execute();
  8. assertTrue("Expectedasuccessresult!",
  9. ActionSupport.SUCCESS.equals(result));
  10. assertTrue("Expectedthedefaultmessage!",
  11. hello_world.getText(HelloWorld.MESSAGE).equals(hello_world.getMessage()));
  12. }
  13. }
代码
  1. packageexample;
  2. importcom.opensymphony.xwork2.ActionSupport;
  3. importcom.opensymphony.xwork2.config.RuntimeConfiguration;
  4. importcom.opensymphony.xwork2.config.entities.ActionConfig;
  5. importcom.opensymphony.xwork2.config.entities.ResultConfig;
  6. importcom.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
  7. importjava.util.Map;
  8. importjava.util.List;
  9. importorg.apache.struts2.StrutsTestCase;
  10. publicclassConfigTestextendsStrutsTestCase{
  11. protectedvoidassertSuccess(Stringresult)throwsException{
  12. assertTrue("Expectedasuccessresult!",
  13. ActionSupport.SUCCESS.equals(result));
  14. }
  15. protectedvoidassertInput(Stringresult)throwsException{
  16. assertTrue("Expectedaninputresult!",
  17. ActionSupport.INPUT.equals(result));
  18. }
  19. protectedMapassertFieldErrors(ActionSupportaction)throwsException{
  20. assertTrue(action.hasFieldErrors());
  21. returnaction.getFieldErrors();
  22. }
  23. protectedvoidassertFieldError(Mapfield_errors,Stringfield_name,Stringerror_message){
  24. Listerrors=(List)field_errors.get(field_name);
  25. assertNotNull("Expectederrorsfor"+field_name,errors);
  26. assertTrue("Expectederrorsfor"+field_name,errors.size()>0);
  27. //TODO:Shouldbealoop
  28. assertEquals(error_message,errors.get(0));
  29. }
  30. protectedvoidsetUp()throwsException{
  31. super.setUp();
  32. XmlConfigurationProviderc=newXmlConfigurationProvider("struts.xml");
  33. configurationManager.addConfigurationProvider(c);
  34. configurationManager.reload();
  35. }
  36. protectedActionConfigassertClass(Stringnamespace,Stringaction_name,Stringclass_name){
  37. RuntimeConfigurationconfiguration=configurationManager.getConfiguration().getRuntimeConfiguration();
  38. ActionConfigconfig=configuration.getActionConfig(namespace,action_name);
  39. assertNotNull("Mssingaction",config);
  40. assertTrue("Wrongclassname:["+config.getClassName()+"]",
  41. class_name.equals(config.getClassName()));
  42. returnconfig;
  43. }
  44. protectedActionConfigassertClass(Stringaction_name,Stringclass_name){
  45. returnassertClass("",action_name,class_name);
  46. }
  47. protectedvoidassertResult(ActionConfigconfig,Stringresult_name,Stringresult_value){
  48. Mapresults=config.getResults();
  49. ResultConfigresult=(ResultConfig)results.get(result_name);
  50. Mapparams=result.getParams();
  51. Stringvalue=(String)params.get("actionName");
  52. if(value==null)
  53. value=(String)params.get("location");
  54. assertTrue("Wrongresultvalue:["+value+"]",
  55. result_value.equals(value));
  56. }
  57. publicvoidtestConfig()throwsException{
  58. assertNotNull(configurationManager);
  59. }
  60. }

哦,测试通过!

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

代码
  1. <%@pagecontentType="text/html;charset=UTF-8"%>
  2. <%@taglibprefix="s"uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:textname="HelloWorld.message"/></title>
  6. </head>
  7. <body>
  8. <h2><s:propertyvalue="message"/></h2>
  9. <h3>Languages</h3>
  10. <ul>
  11. <li>
  12. <s:urlid="url"action="HelloWorld">
  13. <s:paramname="request_locale">en</s:param>
  14. </s:url>
  15. <s:ahref="%{url}">English</s:a>
  16. </li>
  17. <li>
  18. <s:urlid="url"action="HelloWorld">
  19. <s:paramname="request_locale">es</s:param>
  20. </s:url>
  21. <s:ahref="%{url}">Espanol</s:a>
  22. </li>
  23. </ul>
  24. </body>
  25. </html>

Login.jsp

代码
  1. <%@pagecontentType="text/html;charset=UTF-8"%>
  2. <%@taglibprefix="s"uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title>SignOn</title>
  6. </head>
  7. <body>
  8. <s:formaction="Login">
  9. <s:textfieldlabel="%{getText('username')}"name="username"/>
  10. <s:passwordlabel="%{getText('password')}"name="password"/>
  11. <s:submit/>
  12. </s:form>
  13. </body>
  14. </html>
分享到:
评论

相关推荐

    struts2.0学习笔记1

    struts2.0学习笔记1 自己动手做的还算可以的 ]struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的

    struts2.0学习笔记

    本篇学习笔记将深入探讨Struts2.0的核心概念和配置,帮助你理解和掌握这个框架。 **一、Struts2的作用** Struts2的主要目标是提供一种结构化的开发方式,它整合了请求处理、视图展示和业务逻辑的交互。通过使用...

    struts2.0学习笔记,代码整理

    本学习笔记主要涵盖了Struts2.0的基础概念、核心组件、配置方法以及实际代码示例,旨在帮助开发者更好地理解和运用这个框架。 一、Struts2.0基础 Struts2.0是Apache软件基金会的开源项目,它是Struts1.x的升级版本...

    Struts2.0学习笔记.doc

    Struts2.0是一个流行的Java Web开发框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。在Struts2中,类型转换是自动进行的,旨在帮助开发者处理请求参数与Action类属性之间的类型匹配问题。文档中的内容主要...

    Struts2.0培训笔记

    本培训笔记将深入探讨Struts2.0的核心概念、特性以及如何在实际项目中有效应用。 一、Struts2.0框架基础 Struts2.0是Apache软件基金会的项目,它是Struts1.x的升级版,提供了更强大的功能和更好的性能。该框架通过...

    struts2.0笔记(1)

    Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的开源项目,主要用于构建MVC...通过学习Struts2.0,开发者可以构建出结构清晰、易于维护的Web应用,同时也能提升对Java Web开发的整体理解。

    strust2.0学习笔记

    ### Struts2.0 学习笔记 #### 引言 Struts2 是一款非常流行的 Java Web 开发框架,它基于 Struts1 进行了重大的改进与优化,不仅继承了 Struts1 的优秀特性,还在此基础上进行了扩展,支持更加丰富的功能,如拦截...

    struts2.0实例源码

    struts2.0实例源码(struts2是我写的struts2Deom是我下的资源项目一起给大家) 包括strust2.0的所有知识面,每个点我都写了详细注释 网上是很难找到这样的资料的,这是我个人学习笔记拿出来希望跟大家一起学习...

    struts2.0相关学习资料

    通过阅读Struts2.0中文手册和学习笔记,以及动手实践教程中的示例,可以全面掌握Struts2.0的用法和精髓。在实际项目中,熟练运用Struts2.0能提高开发效率,降低维护成本。同时,了解并熟悉相关的社区资源和最佳实践...

    struts2.0(希望可以帮助大家)

    这个压缩包包含的资源是作者学习Struts2.0过程中的笔记和示例,分为两个文档:struts2.0文档1-2.doc和struts2.0文档3-4-5.doc,涵盖了从基础到进阶的内容。 在"struts2.0文档1-2.doc"中,可能包括了以下知识点: 1...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    Spring2.0学习笔记

    【Spring2.0学习笔记】 在深入探讨Spring2.0的知识点之前,首先理解几个核心概念至关重要。Spring框架的核心设计理念是控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。IoC意味着...

    STRUTS2学习系列

    &lt;display-name&gt;Struts2.0HelloWorld &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher &lt;filter-name&gt;struts2 &lt;url-pattern&gt;/* &lt;!-- 其他配置 --&gt; ``` 这段代码...

    struts2学习笔记

    ### Struts2学习笔记知识点详解 #### 一、准备工作及实例 **1. 解压struts-2.1.6-all.zip** - **Apps目录**:包含struts2自带的例子程序,供用户学习和参考。 - **Docs目录**:提供官方文档,包括API文档、指南等...

Global site tag (gtag.js) - Google Analytics