浅析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文件,我可转发给他.

你可能感兴趣的:(java,jsp,xml,Web,Webwork)