⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第一章 webwork入门.txt

📁 webwork入门
💻 TXT
📖 第 1 页 / 共 2 页
字号:
WebWork.Jar包 com.opensymphony.webwork.default.properties文件。
webwork.jar   webwork-default.xml。
xwork.jar     xwork-default.xml。
xwork.jar     com.opensymphony.xwork.validator.validators.default.xml的规则

一、 webwork介绍
    WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.2.
    现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 
    WebWork2建立在Xwork之上,大量使用拦截器机制(interceptor),在方法前或后执行。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。 
    使用的版本是2.2。
二、WebWork架构图
    1. 表示一次Action请求所要经过的Servlet filters(Servlet 过滤器)。我们可以看到最后一个filter就是我们前面介绍的WebWork的前端控制器。
    2. 一次请求到了WebWork的前端控制器,它首先会根据请求的URL解析出对应的action 名称,然后去咨询ActionMapper这个action是否需要被执行。
    3. 如果ActionMapper决定这个action需要被执行,前端控制器就把工作委派给ActionProxy。接着她们会咨询WebWork的配置管理器,并读取在xwork.xml文件中定义的配置信息。接下来ActionProxy会创建ActionInvocation对象。
    4. ActionInvocation是Xwork原理的(Command模式)实现部分。它会调用这个Action已定义的拦截器(before方法),Action方法,Result方法。
    5. 最后,看上面流程的图的方向,它会再执行拦截器(after方法),再回到Servlet Filter部分
    6. 最后结束并传给用户一个结果响应。

    http请求-->一系列过滤器(FilterDispatcher)-->ActionMapper-->ActionProxy(读取xwork.xml)-->创建Action对象(command模式)-->方法前拦截器-->excute方法并定位返回的视图-->方法后拦截器-->响应视图

三、WebWork的三个关键组件
    1、  Action
    一般一个Action代表一次请求或调用,是基于Command模式的实现。在WebWork中,一般Action类需要实现Action接口,或者直接继承基础类ActionSupport。不要将业务逻辑放在Action中。
    2、  Result。
    它是一个结果页面的定义。它用来指示Action执行之后,如何显示执行的结果。Result Type表示如何以及用哪种视图技术展现结果。通过Result Type,WebWork可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。
    3、  Interceptor。
    WebWork的拦截器,WebWork截获Action请求,在Action执行之前或之后调用拦截器方法。这样,可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如:参数组装,验证,国际化,文件上传等等。
四、开发一个最简单的登陆的例子    
    1. 导入jar包,将常用的jar拷贝到lib目录下
    2. 注册webwork组件,修改web.xml,加上webwork的过滤器
	  <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>
    3. 写登陆页面 login.jsp         
        <%@ page contentType="text/html;charset=GBK" %>
	<body align="center">
	  <form name="form1" action="user.action" method="post">
	  <table align="center">
	    <tr><td>用户名:<input type="text" name="uid" /></td></tr>
	    <tr><td>密  码:<input type="password" name="pwd" /></td></tr>
	    <tr><td align="center"><input type="submit" value="提交" /><input type="reset" value="重置" /></td></tr>
	  </table>
	  </form>
	</body>  
        然后用webwork的标签改写:将调用user.setUid()与user.getUid()
	<%@ page contentType="text/html;charset=GBK" %>
	<%@ taglib uri="/webwork" prefix="ww" %>
	<body align="center">
	  <ww:form name="form1" action="user.action" method="post">
	  <table align="center">
	    <tr><td><ww:label value="用户名:"/><ww:textfield name="user.uid" /></td></tr>
	    <tr><td><ww:label value="密  码:"/><ww:password name="user.pwd" /></td></tr>
	    <tr><td align="center"><ww:submit value="提交" /><ww:reset value="重置" /></td></tr>
	  </table>
	  </ww:form>
	</body>

    4. 写LoginAction
       实现implements Action接口,再封装一个User类,也可不封装,将这个action同时作为javabean.在execute方法中调用代理处理验证,成功返回SUCCESS,失败返回到INPUT或通用错误页面error.
        package org.accp.webwork.action;
	import com.opensymphony.xwork.Action;
	public class LoginAction implements Action{
		private String uid;
		private String pwd;
		public String execute() throws Exception {
			if(uid.equals(pwd))
				return this.SUCCESS;
			return this.INPUT; 
		}
		public String getPwd() {return pwd;}
		public void setPwd(String pwd) {this.pwd = pwd;}
		public String getUid() {return uid;}
		public void setUid(String uid) {this.uid = uid;}
	}
    5. 在src下写配置文件webwork.properties
        webwork.ui.theme=simple
	webwork.i18n.encoding=gbk
	webwork.locale=zh_CN
	webwork.devMode = true
	webwork.i18n.reload=true
	webwork.configuration.xml.reload=true
      以下是常用的,并有解释
        如果在ClassPath中没有这个文件,WebWork会自动读取WebWork的Jar包里面的/com/opensymphony/webwork/default.properties文件。
        webwork.ui.theme=simple     //指定页面布局为简单的,不会缺省生成表单。default的template用xhtml
        webwork.i18n.encoding=gbk      //gbk后面加空格都不行,这是解决乱码问题
	webwork.locale=zh_CN
	webwork.devMode = true   //true为开发模式,提供更多的友好性,如自动加载i18n与xwork.xml文件等
	webwork.configuration.xml.reload=true  //xwork.xml改变后自动重新加载
	webwork.i18n.reload=true    //i18n改变后重新加载
	webwork.objectFactory = spring //设置WebWork对Spring的支持
	webwork.action.extension=action,do //将特定后缀请求映射到对应的Servlet	
        webwork.tag.altSyntax=true //altSyntax的default值为true。在以前如果要为标签的某一属性设置String类型的值,就必须给这个值加上单引号了,否则这个value将会被认为是存在于Value Stack的Object所对应的key。如果加上''又会有太多的双与单引号,于是,新的语法被提了出来:使用%{...}来指明某一个部分需要到Value Stack中取值,这样就可以将多余的单引号去掉了。为了使用新的语法,我们就必须将altSyntax设为true。

    6. 在src下写配置文件xwork.xml
       1) dtd可在xwork.jar包下的xwork-default下拷贝过来
       2) webwork-default.xml位于webwork.jar包下,包含了一些result-type与interceptors
       3)package, name可随便写,extends一定要写,表示webwork.jar/webwork-default.xml中的<package name="webwork-default">名字。
       4) default-interceptor-ref
          缺省的截获器在方法前调用,是basicStack,一组拦截器栈,同时包括多个拦截器 
	  <interceptor-stack name="defaultStack">
	    <interceptor-ref name="static-params"/>
	    <interceptor-ref name="params"/>
	    <interceptor-ref name="conversionError"/>
	  </interceptor-stack>
       5) action
          name属性对应页面的调用名称,class指定类名,可选属性"method"用来告诉WebWork调用action的那个方法.如果method属性为空,WebWork调用默认调用*execute*()方法.如果Action类中既没有execute()方法也没有在xml文件中指定其他方法,WebWork会抛出异常.
       6) result
	  name属性不写,默认是success。
	  <result>/main.jsp</result>
	
	<!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"></include>
	  <package name="aaa" extends="webwork-default">
	    <default-interceptor-ref name="basicStack"></default-interceptor-ref>
	    <action name="user" class="org.accp.webwork.action.LoginAction">
	      <result name="success">/succ.jsp</result>
	      <result name="input">/login.jsp</result>
	    </action>
	  </package>
	</xwork> 
	
    7. 添加succ.jsp页面

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -