`
congpeixue
  • 浏览: 275547 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

浅析webwork

阅读更多
下面我们就用一段完整的代码来简单解析webwork的配置与使用

配置文件如下:
web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

    <display-name>Acme Corp</display-name>
    <!-- 
	<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> -->
    <!-- START SNIPPET: example 
    <filter>
        <filter-name>webwork</filter-name>
        <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>webwork</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    -->
	<!--  
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>-->
    
    
    <!-- END SNIPPET: example -->

    <!-- START SNIPPET: compatibility
    <servlet>
        <servlet-name>JspSupportServlet</servlet-name>
        <servlet-class>com.opensymphony.webwork.views.JspSupportServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    END SNIPPET: compatibility -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <!-- START SNIPPET: taglib -->
    <!--
        This typically isn't required, as the taglib is included in webwork.jar.
        If you really need a taglib configuration within web.xml, copy webwork/src/java/META-INF/taglib.tld
        to the WEB-INF directory as webwork.tld.
     -->
    <taglib>
        <taglib-uri>webwork</taglib-uri>
        <taglib-location>/WEB-INF/taglib.tld</taglib-location>
    </taglib>
</web-app>



xwork.xml

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" 
"http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">

<xwork>
    <include file="webwork-default.xml"/>
    <package name="default" extends="webwork-default">
       <!-- method灞炴€х敤鏉ヨ缃搴旂殑鏂规硶鍚?-->
       <action name="login" class="com.xxx.action.LoginAction" method="login">
        	<interceptor-ref name="params"></interceptor-ref>
        	<interceptor-ref name="validationWorkflowStack"></interceptor-ref>
            <result name="success" type="dispatcher">
            	<param name="location">/main.jsp</param>
            </result>
            <result name="loginfail" type="dispatcher">
            	<param name="location">/index.jsp</param>
            </result>
            <result name="input" type="dispatcher">
            	<param name="location">/index.jsp</param>
            </result>
        </action>
    </package>
</xwork>


validators.xml
<validators>
    <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
</validators>


Action

//此注释规范不规范,仅为讲解之用
//程序中对应的基本jar文件在图片中
package com.xxx.action;

import java.util.Map;

//import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ActionSupport;
//import com.opensymphony.xwork.ModelDriven;
import com.xxx.model.LoginInfo;

//如果不实现Model, Action接口,getModel()方法略去。(注:getMedel()负责了参数的
//接受和保留)。略去getModel()的同时,对应域(loginInfo)必须有get、set方法
/**
 * 继承ActionSupport,ActionSupport需要rife-continuations.jar的支持
 * @author cong-px
 */
public class LoginAction  extends ActionSupport {
	private static final String LOGIN_FAIL = "loginfail";
	LoginInfo loginInfo = null;
	
	//在实现Action接口时此处方法名为execute()
	//此处可以自定义方法名
	public String login () throws Exception {
		if("cong".equalsIgnoreCase(loginInfo.getUsername())&&
				"peixue".equalsIgnoreCase(loginInfo.getPassword())) {
			ActionContext ctx = ActionContext.getContext();
			Map<String, String> session = ctx.getSession();
			session.put("username", loginInfo.getUsername());
			
			loginInfo.getMessages().add("Message1");
			loginInfo.getMessages().add("Message2");
			loginInfo.getMessages().add("Message3");
			
			return SUCCESS;
		} else {
			loginInfo.setErrorMessage("UserName Error");
			return LOGIN_FAIL;
		}
	}
	/**
	 * 获得LoginInfo信息
	 * @return
	 */
	public LoginInfo getLoginInfo() {
		return loginInfo;
	}

	public void setLoginInfo(LoginInfo loginInfo) {
		this.loginInfo = loginInfo;
	}
}


对应的验证文件

<!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="loginInfo.username">
    <field-validator type="requiredstring">
      <message key="USERNAME_REQUIRED">username must'nt null!</message>
    </field-validator>
  </field>
</validators>


国际化
package_en_US.properties
USERNAME_REQUIRED=username is not null!!


package_zh_CN.properties
USERNAME_REQUIRED=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a.


此时为汉字对应的二进制编码.可由Eclipse的插件自动转化.(若谁不知道,可邮件给我:)


LoginInfo
package com.xxx.model;

import java.util.LinkedList;
import java.util.List;

public class LoginInfo {
	private String username;
	private String password;
	private String errorMessage;
	private List<String> messages = new LinkedList<String>();
	public String getUsername() {
		return username;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getErrorMessage() {
		return errorMessage;
	}
	
	public void setErrorMessage(String errorMessage) {
		this.errorMessage = errorMessage;
	}

	public List<String> getMessages() {
		return messages;
	}
	
	
}


程序结构如图所示:


如需要完整jar文件,我可转发给他.
  • 大小: 8.4 KB
分享到:
评论

相关推荐

    浅析Java企业开发.pdf

    "浅析Java企业开发" 本文将对Java企业开发的现状和发展趋势进行探讨,并对Struts、Hibernate、MyBatis和Spring这些开源框架进行分析。 首先, Java企业开发存在技术陈旧、保守,交付周期长,对新技术、新趋势的...

    javaweb开发JSP资料大全

    JSP安全编程实例浅析、JSP编程进度条设计实例、JSP的运行内幕、JSP和IIS的最佳解决方案实例分析、jsp内置对象--session对象和out对象、JSP中request属性的用法、用WebWork、JSP、Velocity建立注册页面、在JSP中使用...

    轻松入门之struts2

    它基于Webwork的设计思想,同时融合了Struts1的优点。Struts2的出现,让众多开发者和用户对其产生了浓厚的兴趣。Struts2教程系列旨在帮助读者快速入门并掌握Struts2框架的使用,特别适合那些希望在最短时间内了解...

    Struts2入门教程.pdf

    - **Struts2起源**:Struts2并非一个全新的Web框架,而是建立在WebWork框架设计理念之上,融合了Struts1的优点而形成的一个框架。可以说,它是Struts1与WebWork框架的结合体。 - **Struts2的吸引力**:由于其优秀的...

    struts2入门教程

    - **起源与发展**:Struts2并非一个全新的框架,而是基于Struts1和WebWork的优点结合而成的一个框架。它继承了Struts1的一些特性,同时吸收了WebWork的核心设计理念。 - **优势特点**:相比于Struts1,Struts2提供了...

    struts入门教程

    Struts2是一种基于MVC(Model-View-Controller)架构的开源Web应用框架,它以WebWork框架的设计理念为核心,同时融合了Struts1的优点,旨在提供一个更加灵活、高效且易于使用的Web开发解决方案。自其诞生以来,...

    struts2系列教程

    - **起源与发展**:Struts2并非新生事物,而是建立在Struts1和WebWork基础上的一个Web应用框架。它融合了两者的优势,提供了更为强大的功能支持。 - **设计理念**:以WebWork的设计思想为核心,继承Struts1的优点,...

    struts2的速成教程,充电的都来看了

    - **Struts2的由来**:Struts2是基于WebWork框架的思想,并吸收了Struts1的优点发展而来的一种Web应用框架。它既不是WebWork也不是Struts1的简单替代品,而是一种全新的框架,融合了两者的优势。 - **Struts2的特点*...

    struts2经典入门教程

    它最初由WebWork框架发展而来,并结合了Struts 1的优点,提供了更加优雅的MVC(模型-视图-控制器)实现。Struts2以其简便的配置、强大的功能和良好的扩展性而受到开发者的青睐。 在Struts2框架中,主要的技术概念...

    网络第一份struts2.0学习文档

    它是Struts1的一个重大升级版本,吸取了Struts1的优点并融合了WebWork框架的核心设计理念。 - **设计理念**: - **核心思想**:以WebWork的设计思想为基础,结合Struts1的优点。 - **目标**:提供更灵活、易用且...

    Struts2入门教程。包括jquery集成等。入门必看

    - **起源与发展**:Struts2并非新生事物,而是建立在Struts1和WebWork基础上的一个Web应用框架。它融合了两者的优势,提供了更为强大的功能支持。 - **设计理念**:采用MVC(Model-View-Controller)架构模式,将...

    struts2 详解

    它继承了Struts1的一些优点,并且吸收了WebWork框架的设计思想,形成了自己独特的优势。Struts2不仅支持传统的MVC架构,还引入了许多新的特性,如拦截器、OGNL表达式引擎、类型转换和数据验证等。 #### 二、Struts2...

Global site tag (gtag.js) - Google Analytics