ï»??xml version="1.0" encoding="utf-8" standalone="yes"?> ˜q™ä¼šæŠ›å‡ºä¸€ä¸ªä¸€å¼‚常,å› äØ“åœ¨params.get("username")˜q”回的是一个嗽W¦ä¸²æ•°ç»„,所以ä¸èƒ½è¿™æ ¯‚{æ?ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
String username = (String) params.get("username");
æ£ç¡®çš„åšæ³•是:
String username = ((String[])params.get("username"))[0];
----------------------------------------------------------------------------
web.xml<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>/*</url-pattern>
</filter-mapping>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
˜q™é‡Œä½¿ç”¨äº†ä¸€ä¸ªFilteræ¥å¯¹æ‰€æœ‰çš„url˜q›è¡Œ˜q‡æ×o,è€Œåªæœ‰åœ¨webwork.propertiesä¸çš„讑֮šçš„webwork.action.extensionä½œäØ“æ‰©å±•åæ‰ä¼šè¢«è§£æ‚‰ä¸ÞZ¸€ä¸ªaction.
而定义了一个监å¬å™¨ä¸»è¦æ˜¯ç”¨Spring的监å¬Web容器里的å˜åŒ–,˜q™é‡Œä¸»è¦æ˜¯ç”¨äºŽSpringä½œäØ“WebWorkçš„IoC.如果惌™®©Spring有多个contexté…置文äšg,那就å¯åР入䏋é¢çš„代ç :<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
˜q™é‡Œå¦‚果惛_®šä¹‰ä¸€ä¸ªWebWork tag,那么ž®±å¯åŠ å…¥ä»¥ä¸‹çš„ä»£ç ?<taglib>
    <taglib-uri>webwork</taglib-uri>
    <taglib-location>/WEB-INF/lib/webworkxx.jar</taglib-location>
</taglib>
--------------------------------------------------------------------------------
在说xwork.xml之å‰,我们先了解webwork-default.xmlæ–‡äšg,˜q™ä¸ªæ–‡äšg是由webwork.jaræ–‡äšg里有çš?å˜æ”¾åœ¨classpathä¸?所以我们ä¸ç”¨åˆ›å»ø™¿™ä¸ªæ–‡ä»?å› äØ“æ¯æ¬¡˜q行webwork应用æ—?webwork都会自动去classpath查找˜q™ä¸ªæ–‡äšg.˜q™ä¸ªæ–‡äšg预先讄¡½®å¥½äº†ä¸€äº›é»˜è®¤çš„傿•°,比如result type, interceptors½{?å¯ä»¥è¯´æ˜¯æˆ‘们xwork.xmlä¸çš„默认å€?åŒæ—¶ä¹Ÿäؓ我们的xwork.xmlæä¾›å¥½äº†å¾ˆå¤šå·¥å…·,比如params拦截器就是最典型的一ä¸?
在编写xwork.xmlæ—?我们一般都è¦å¯¼å…¥è¿™ä¸ªwebwork-default.xmlæ–‡äšg,代ç 如下:<include file="webwork-default.xml"/>
具体的xwork.xmlé…ç½®,ç”׃»¥åŽçš„å¦ä¹ ä¸ç»™å‡?..(å‘?...我也˜q˜ä¸æ¸…楚,没有实践˜q‡å‘¢..)
xwork.xmlæ–‡äšg必须攑֜¨/WEB-INF/classes/ä¸?
--------------------------------------------------------------------------------
下é¢è¯´ä¸€ä¸‹webwork.propertiesæ–‡äšg,˜q™ä¸ªæ–‡äšg是酾|®webworkè¡ŒäØ“ç‰ÒŽ€§çš„æ–‡äšg,ä»–å¯ä»¥æ”¹å˜webwork的扩展å,以劾~–ç ½{?˜q™ä¸ªæ–‡äšg的详¾l†è¯´æ˜Žå¯ä»¥å‚考官方的文档:### Webwork default properties
###(can be overridden by a webwork.properties file in the root of the classpath)
###
### Specifies the Configuration used to configure webwork
### one could extend com.opensymphony.webwork.config.Configuration
### to build one's customize way of getting the configurations parameters into webwork
#Â webwork.configuration=com.opensymphony.webwork.config.DefaultConfiguration
### This can be used to set your default locale and encoding scheme
#Â webwork.locale=en_US
webwork.i18n.encoding=UTF-8
### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork.ObjectFactory subclass name here
# webwork.objectFactory = spring
### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
webwork.objectFactory.spring.autoWire = name
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
#Â webwork.multipart.parser=cos
#Â webwork.multipart.parser=pell
webwork.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
webwork.multipart.saveDir=
webwork.multipart.maxSize=2097152
### Load custom property files (does not override webwork.properties!)
#Â webwork.custom.properties=application,com/webwork/extension/custom
### How request URLs are mapped to and from actions
webwork.mapper.class=com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper
### Used by the DefaultActionMapper
webwork.action.extension=action
### use alternative syntax that requires %{} in most places
### to evaluate expressions for String attributes for tags
webwork.tag.altSyntax=true
### when set to true, WebWork will act much more friendly for developers. This
###Â includes:
### - webwork.i18n.reload = true
### - webwork.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
###   For example: normally a request to foo.action?someUnknownField=true should
###                be ignored (given that any value can come from the web and it
###                should not be trusted). However, during development, it may be
###                useful to know when these errors are happening and be told of
###                them right away.
webwork.devMode = false
### when set to true, resource bundles will be reloaded on _every_ request.
### this is good during development, but should never be used in production
webwork.i18n.reload=false
### Standard UI theme
### Change this to reflect which path should be used for JSP control tag templates by default
webwork.ui.theme=xhtml
webwork.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
webwork.ui.templateSuffix=ftl
### Configuration reloading
### This will cause the configuration to reload xwork.xml when it is changed
webwork.configuration.xml.reload=false
### Location of velocity.properties file.  defaults to velocity.properties
# webwork.velocity.configfile = velocity.properties
### Comma separated list of VelocityContext classnames to chain to the WebWorkVelocityContext
# webwork.velocity.contexts =
### used to build URLs, such as the UrlTag
webwork.url.http.port = 80
webwork.url.https.port = 443
### Load custom default resource bundles
#Â webwork.custom.i18n.resources=testmessages,testmessages2
### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
### often used for WebLogic, Orion, and OC4J
webwork.dispatcher.parametersWorkaround = false
### configure the Freemarker Manager class to be used
### Allows user to plug-in customised Freemarker Manager if necessary
### MUST extends off com.opensymphony.webwork.views.freemarker.FreemarkerManager
#webwork.freemarker.manager.classname=com.opensymphony.webwork.views.freemarker.FreemarkerManager
### See the WebWorkBeanWrapper javadocs for more information
webwork.freemarker.wrapper.altMap=true
å¥?大至上已¾l清楚了˜q™äº›æ–‡äšg的大至用é€?下一æ?弄清xwork的酾|?
WebWork2.2å’ŒWebWork2.1在酾|®ä¸Šæœ‰ä¸€äº›åŒºåˆ«ï¼ŒçŽ°åœ¨æŠŠWebWork2.2的一些酾|®æ”¾˜q›æ¥ã€?br />
web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eeÂ
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <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>/*</url-pattern>
    </filter-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>
xwork.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
"http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
    <!-- Include webwork defaults (from WebWork JAR). -->
    <include file="webwork-default.xml" />
    <!-- Configuration for the default package. -->
   <package name="default" extends="webwork-default">
     <!-- Include webwork defaults (from WebWork JAR). -->
     <default-interceptor-ref name="completeStack"/>
      <action name="helloWorld"
         class="org.javadream.webwork.ch01.HelloWorld">
         <result name="success">hello.jsp</result>
      </action>
   </package>
</xwork>
webwork.propertieswebwork.locale=zh_CN
webwork.i18n.encoding=GB2312
webwork.objectFactory=spring
˜q™é‡Œä¸æ–‡æœ‰é—®é¢˜ï¼Œå¿…é¡»è¦åœ¨webwork.propertiesä¸è¿›å…¥è®¾¾|?webwork.objectFactory=spring是用springä½œäØ“é»˜è®¤çš„IoC容器ã€?br />
¾~–写一个Action:package org.javadream.webwork.ch01;
import com.opensymphony.xwork.Action;
import java.text.DateFormat;
import java.util.*;
public class HelloWorld implements ActionÂ
{
private String message;
 public String execute()Â
{
   message = "Hello, WebWorld!,ä½ å¥½,Web世界\n";
   message += "The time is:\n";
   message += DateFormat.getDateInstance().format(new Date());;
  Â
   //message = message.replaceAll("\n", "<br>");
   return SUCCESS;
 }
 public String getMessage()Â
{
   return message;
 }
}
¾~–写一个视图jspæ–‡äšg:<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
<%@ taglib prefix="ww" uri="/webwork"%>
<html>
    <head>
        <title>Hello Page</title>
    </head>
    <body>
        The message generated by my first action is:
        <br>
        <font color="red"><ww:property value="message" /></font>
    </body>
</html>
˜q™é‡Œè¦æ³¨æ„,<%@ taglib prefix="ww" uri="/webwork"%>å¿…é¡»è¦ç”¨uri="/webwork"åQŒå› 䏸™¦è®©ä»–在webwork.jar䏿Ÿ¥æ‰¾webwork.tldåQŒå› 为我们在web.xmlòq¶æ²¡æœ‰å®šä¹‰è¿™ä¸?webwork"˜q™ä¸ªuriã€?br />
Java Servletæ²¡æœ‰ä»Žæ ¹æœ¬ä¸Šæ”¯æŒ¾|‘络文äšgä¸Šä¼ ,˜q™æ˜¯ä¸€ä¸ªæžä¸å¥½çš„也æžä¸çˆ½çš„事情.
从而就延生了commonsUploadå’Œcos˜q™äº›ä¸œä¸œ¾cÕdº“,å‘?....˜q˜ç®—å¥?也好ç”?ä¸è¿‡æ²¡ä»”¾l†åŽ»ç ”ç©¶ä»–ä»¬çš„å®žçŽîC»£ç ?用è“væ¥æ€ÀL˜¯å¿ƒå¤§å¿ƒå°çš?
也æ£å› 䨓˜q™æ ·å¤šçš„½W¬ä¸‰æ–¹ç±»åº?大家的接å£éƒ½ä¸åŒ,从而也ž®±å‡ºçŽîCº†è®©Serviceå±‚æ— æ‰€é€‚ä»Žçš„æ„Ÿè§?å› äØ“ä¸è®ºæ˜¯ä»ŽStruts˜q˜æ˜¯ä»ŽWebWork或者从最½Ž€å•çš„cos˜q™äº›¾cÕdº“得到的接å£éƒ½æ˜¯ä¸€¿U具体实çŽ?没有¾lŸä¸€çš„æŽ¥å?如果Service层与æŸä¸€¿U具体实现相兌™”,则必然与˜q™ç§å…·ä½“实现的框架或者类库硬¾~–ç ¾l‘定,以厞®×ƒ¸å¥½ç”¨å…¶å®ƒ¾cÕdº“äº?˜q™æ˜¯ä¸å¥½çš„设è®?真的,一点絋zÕdº¦éƒ½æ²¡æœ?
能ä¸èƒ½è¿™æ ·å‘¢?在Service定义一个UploadFile接å£,所有Service层接å—çš„åªæ˜¯UploadFile的实现类的实ä¾?从而统一了所有Service的调ç”?而且也ä‹ÉServiceå¯ä»¥åœ¨å„¿UMVC或者第三方¾cÕdº“ä¸è¿¿U?
˜q™é‡Œç”¨åˆ°äº†ä¸€ä¸ªè®¾è®¡æ¨¡å¼?适é…器模å¼?
代ç 如下:
比如˜q™é‡Œæœ‰ä¸€ä¸ªå…·ä½“实çŽ?
ä½ ä¹Ÿå¯ä»¥å†™commonsupload或者cos的实çŽ?Service接å—çš„å‚æ•°æ˜¯UploadFile接å£çš?æ‰€ä»¥ä½ å¿…é¡»å®žçŽ°UploadFileæŽ¥å£æ‰èƒ½ä½¿ç”¨Service层的功能.
(åŽè¯:看æ¥å¦ä¹ 设计模弘q˜æ˜¯å¾ˆæœ‰ç”¨å¤„çš?
å½“ä¹Ÿè¦æŠ›å¼ƒé‚£äº›åŽŸæ¥php¾pÈ»Ÿé‡Œä¸å¥½çš„设计和方æ³?
æ–°çš„Java实现会用åˆîC»€ä¹ˆæŠ€æœ¯å‘¢?
Spring + Hibernate + WW + Ajax
开呿—¶é—?1òq?ä»?006òq?æœ?0å·å¼€å§?
注æ„的地æ–?
ä¸è¦æ€¥ç€å†™ä»£ç ?è¦å…ˆåšå¥½éœ€æ±‚分æžå’Œè®¾è®¡
æ³¨æ„æ‰©å±•性和对编½E‹æ¨¡å¼çš„æ›´å¥½åº”用.
打算开æºè¯¥™å¹ç›®.