先按照文档,做一次:
1,建立WEB.XML:
代码
-
-
<?xmlversion="1.0"encoding="UTF-8"?>
-
<web-app>
-
-
<display-name>StrutsBlank</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>
文档中有一个org.apache.struts2.dispatcher.FilterDispatcher的filter 还有org.springframework.web.context.ContextLoaderListener
2.建SPRING的BEAN配置文件:applicationContext.xml
代码
-
<?xmlversion="1.0"encoding="UTF-8"?>
-
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
-
-
<beansdefault-autowire="autodetect">
-
-
</beans>
3.建struts配置文件:
代码
-
<!DOCTYPEstrutsPUBLIC
-
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
-
"http://struts.apache.org/dtds/struts-2.0.dtd">
-
-
<struts>
-
-
<includefile="example.xml"/>
-
-
-
-
</struts>
演示了一下配置文件分块的方法,下面这个才起作用:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
代码
-
<struts>
-
-
<packagename="example"namespace="/example"extends="struts-default">
-
-
<actionname="HelloWorld"class="example.HelloWorld">
-
<result>/example/HelloWorld.jsp</result>
-
</action>
-
-
<actionname="Login!*"method="{1}"class="example.Login">
-
<resultname="input">/example/Login.jsp</result>
-
<resulttype="redirect-action">Menu</result>
-
</action>
-
-
<actionname="*"class="example.ExampleSupport">
-
<result>/example/{1}.jsp</result>
-
</action>
-
-
-
</package>
-
</struts>
4,录入验证:Login-validation.xml 这个很象struts1.x
代码
-
<!DOCTYPEvalidatorsPUBLIC
-
"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
-
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-
<validators>
-
<fieldname="username">
-
<field-validatortype="requiredstring">
-
<messagekey="requiredstring"/>
-
</field-validator>
-
</field>
-
<fieldname="password">
-
<field-validatortype="requiredstring">
-
<messagekey="requiredstring"/>
-
</field-validator>
-
</field>
-
</validators>
5.建立资源文件package.properties,这个也很象struts1.x
代码
-
HelloWorld.message=Strutsisupandrunning...
-
requiredstring=${getText(fieldName)}isrequired.
-
password=Password
-
username=UserName
-
Missing.message=Thisfeatureisunderconstruction.Pleasetryagaininthenextinteration.
6.搞个action类,和WW2一模一样:
代码
-
packageexample;
-
-
publicclassLoginextendsExampleSupport{
-
-
publicStringexecute()throwsException{
-
-
if(isInvalid(getUsername()))returnINPUT;
-
-
if(isInvalid(getPassword()))returnINPUT;
-
-
returnSUCCESS;
-
}
-
-
privatebooleanisInvalid(Stringvalue){
-
return(value==null||value.length()==0);
-
}
-
-
privateStringusername;
-
-
publicStringgetUsername(){
-
returnusername;
-
}
-
-
publicvoidsetUsername(Stringusername){
-
this.username=username;
-
}
-
-
privateStringpassword;
-
-
publicStringgetPassword(){
-
returnpassword;
-
}
-
-
publicvoidsetPassword(Stringpassword){
-
this.password=password;
-
}
-
-
}
7.搞个helloworld类,也和WW2一样: 这里调用了资源文件中的 message, 这里比struts1.X类似功能要直接,会好用一些
代码
-
packageexample;
-
-
/**
-
*<code>Setwelcomemessage.</code>
-
*/
-
publicclassHelloWorldextendsExampleSupport{
-
-
publicStringexecute()throwsException{
-
setMessage(getText(MESSAGE));
-
returnSUCCESS;
-
}
-
-
/**
-
*ProvidedefaultvaluieforMessageproperty.
-
*/
-
publicstaticfinalStringMESSAGE="HelloWorld.message";
-
-
/**
-
*FieldforMessageproperty.
-
*/
-
privateStringmessage;
-
-
/**
-
*ReturnMessageproperty.
-
*
-
*@returnMessageproperty
-
*/
-
publicStringgetMessage(){
-
returnmessage;
-
}
-
-
/**
-
*SetMessageproperty.
-
*
-
*@parammessageTexttodisplayonHelloWorldpage.
-
*/
-
publicvoidsetMessage(Stringmessage){
-
this.message=message;
-
}
-
}
8。搞个父类出来,这里只是演示用,所以空的
ExampleSupport.java
代码
-
packageexample;
-
-
importcom.opensymphony.xwork2.ActionSupport;
-
-
-
-
-
publicclassExampleSupportextendsActionSupport{
-
}
9。可以测试一下了:
代码
-
packageexample;
-
-
importcom.opensymphony.xwork2.ActionSupport;
-
importcom.opensymphony.xwork2.config.entities.ActionConfig;
-
-
importjava.util.Map;
-
importjava.util.Collection;
-
importjava.util.List;
-
-
publicclassLoginTestextendsConfigTest{
-
-
publicvoidFIXME_testLoginConfig()throwsException{
-
ActionConfigconfig=assertClass("example","Login!input","example.Login");
-
assertResult(config,ActionSupport.SUCCESS,"Menu");
-
assertResult(config,ActionSupport.INPUT,"/example/Login.jsp");
-
}
-
-
publicvoidtestLoginSubmit()throwsException{
-
Loginlogin=newLogin();
-
login.setUsername("username");
-
login.setPassword("password");
-
Stringresult=login.execute();
-
assertSuccess(result);
-
}
-
-
-
publicvoidFIXME_testLoginSubmitInput()throwsException{
-
Loginlogin=newLogin();
-
Stringresult=login.execute();
-
assertInput(result);
-
Maperrors=assertFieldErrors(login);
-
assertFieldError(errors,"username","Usernameisrequired.");
-
assertFieldError(errors,"password","Passwordisrequired.");
-
}
-
-
}
代码
-
packageexample;
-
-
importcom.opensymphony.xwork2.ActionSupport;
-
importjunit.framework.TestCase;
-
-
publicclassHelloWorldTestextendsTestCase{
-
-
publicvoidtestHelloWorld()throwsException{
-
HelloWorldhello_world=newHelloWorld();
-
Stringresult=hello_world.execute();
-
assertTrue("Expectedasuccessresult!",
-
ActionSupport.SUCCESS.equals(result));
-
assertTrue("Expectedthedefaultmessage!",
-
hello_world.getText(HelloWorld.MESSAGE).equals(hello_world.getMessage()));
-
}
-
}
代码
-
packageexample;
-
-
importcom.opensymphony.xwork2.ActionSupport;
-
importcom.opensymphony.xwork2.config.RuntimeConfiguration;
-
importcom.opensymphony.xwork2.config.entities.ActionConfig;
-
importcom.opensymphony.xwork2.config.entities.ResultConfig;
-
importcom.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
-
-
importjava.util.Map;
-
importjava.util.List;
-
-
importorg.apache.struts2.StrutsTestCase;
-
-
publicclassConfigTestextendsStrutsTestCase{
-
-
protectedvoidassertSuccess(Stringresult)throwsException{
-
assertTrue("Expectedasuccessresult!",
-
ActionSupport.SUCCESS.equals(result));
-
}
-
-
protectedvoidassertInput(Stringresult)throwsException{
-
assertTrue("Expectedaninputresult!",
-
ActionSupport.INPUT.equals(result));
-
}
-
-
protectedMapassertFieldErrors(ActionSupportaction)throwsException{
-
assertTrue(action.hasFieldErrors());
-
returnaction.getFieldErrors();
-
}
-
-
protectedvoidassertFieldError(Mapfield_errors,Stringfield_name,Stringerror_message){
-
-
Listerrors=(List)field_errors.get(field_name);
-
assertNotNull("Expectederrorsfor"+field_name,errors);
-
assertTrue("Expectederrorsfor"+field_name,errors.size()>0);
-
-
assertEquals(error_message,errors.get(0));
-
-
}
-
-
protectedvoidsetUp()throwsException{
-
super.setUp();
-
XmlConfigurationProviderc=newXmlConfigurationProvider("struts.xml");
-
configurationManager.addConfigurationProvider(c);
-
configurationManager.reload();
-
}
-
-
protectedActionConfigassertClass(Stringnamespace,Stringaction_name,Stringclass_name){
-
RuntimeConfigurationconfiguration=configurationManager.getConfiguration().getRuntimeConfiguration();
-
ActionConfigconfig=configuration.getActionConfig(namespace,action_name);
-
assertNotNull("Mssingaction",config);
-
assertTrue("Wrongclassname:["+config.getClassName()+"]",
-
class_name.equals(config.getClassName()));
-
returnconfig;
-
}
-
-
protectedActionConfigassertClass(Stringaction_name,Stringclass_name){
-
returnassertClass("",action_name,class_name);
-
}
-
-
protectedvoidassertResult(ActionConfigconfig,Stringresult_name,Stringresult_value){
-
Mapresults=config.getResults();
-
ResultConfigresult=(ResultConfig)results.get(result_name);
-
Mapparams=result.getParams();
-
Stringvalue=(String)params.get("actionName");
-
if(value==null)
-
value=(String)params.get("location");
-
assertTrue("Wrongresultvalue:["+value+"]",
-
result_value.equals(value));
-
}
-
-
publicvoidtestConfig()throwsException{
-
assertNotNull(configurationManager);
-
}
-
-
}
哦,测试通过!
10。看看表示层是如何用的? HelloWorld.jsp
代码
-
<%@pagecontentType="text/html;charset=UTF-8"%>
-
<%@taglibprefix="s"uri="/struts-tags"%>
-
<html>
-
<head>
-
<title><s:textname="HelloWorld.message"/></title>
-
</head>
-
-
<body>
-
<h2><s:propertyvalue="message"/></h2>
-
-
<h3>Languages</h3>
-
<ul>
-
<li>
-
<s:urlid="url"action="HelloWorld">
-
<s:paramname="request_locale">en</s:param>
-
</s:url>
-
<s:ahref="%{url}">English</s:a>
-
</li>
-
<li>
-
<s:urlid="url"action="HelloWorld">
-
<s:paramname="request_locale">es</s:param>
-
</s:url>
-
<s:ahref="%{url}">Espanol</s:a>
-
</li>
-
</ul>
-
-
</body>
-
</html>
Login.jsp
代码
-
<%@pagecontentType="text/html;charset=UTF-8"%>
-
<%@taglibprefix="s"uri="/struts-tags"%>
-
<html>
-
<head>
-
<title>SignOn</title>
-
</head>
-
-
<body>
-
<s:formaction="Login">
-
<s:textfieldlabel="%{getText('username')}"name="username"/>
-
<s:passwordlabel="%{getText('password')}"name="password"/>
-
<s:submit/>
-
</s:form>
-
</body>
-
</html>
|
相关推荐
struts2.0学习笔记1 自己动手做的还算可以的 ]struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的
本篇学习笔记将深入探讨Struts2.0的核心概念和配置,帮助你理解和掌握这个框架。 **一、Struts2的作用** Struts2的主要目标是提供一种结构化的开发方式,它整合了请求处理、视图展示和业务逻辑的交互。通过使用...
本学习笔记主要涵盖了Struts2.0的基础概念、核心组件、配置方法以及实际代码示例,旨在帮助开发者更好地理解和运用这个框架。 一、Struts2.0基础 Struts2.0是Apache软件基金会的开源项目,它是Struts1.x的升级版本...
Struts2.0是一个流行的Java Web开发框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。在Struts2中,类型转换是自动进行的,旨在帮助开发者处理请求参数与Action类属性之间的类型匹配问题。文档中的内容主要...
本培训笔记将深入探讨Struts2.0的核心概念、特性以及如何在实际项目中有效应用。 一、Struts2.0框架基础 Struts2.0是Apache软件基金会的项目,它是Struts1.x的升级版,提供了更强大的功能和更好的性能。该框架通过...
Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的开源项目,主要用于构建MVC...通过学习Struts2.0,开发者可以构建出结构清晰、易于维护的Web应用,同时也能提升对Java Web开发的整体理解。
### Struts2.0 学习笔记 #### 引言 Struts2 是一款非常流行的 Java Web 开发框架,它基于 Struts1 进行了重大的改进与优化,不仅继承了 Struts1 的优秀特性,还在此基础上进行了扩展,支持更加丰富的功能,如拦截...
struts2.0实例源码(struts2是我写的struts2Deom是我下的资源项目一起给大家) 包括strust2.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学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
【Spring2.0学习笔记】 在深入探讨Spring2.0的知识点之前,首先理解几个核心概念至关重要。Spring框架的核心设计理念是控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)。IoC意味着...
<display-name>Struts2.0HelloWorld <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher <filter-name>struts2 <url-pattern>/* <!-- 其他配置 --> ``` 这段代码...
### Struts2学习笔记知识点详解 #### 一、准备工作及实例 **1. 解压struts-2.1.6-all.zip** - **Apps目录**:包含struts2自带的例子程序,供用户学习和参考。 - **Docs目录**:提供官方文档,包括API文档、指南等...