*笔者白白萌新一枚,旨在了解和记录所遇到的知识,如有问题错误欢迎指出改正*
首先什么是webwork:
1、WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架(可以说是众多web框架的老前辈之一了)
2、目前的WebWork已经被拆分成了Xwork1和WebWork2两个部分
webwork处理流程:
既然webwork为web框架的先行者,并在当时占据一席之地肯定有过人之处
而其中有以下几个自认为是webwork的标志性核心功能概念:
1、Action类:
在webwork中一般Action的类需要实现Action接口,或者直接继承基础类ActionSupport,他们会其中一般而言,一个action对应着一次请求,
它们会实现默认的execute方法,并返回一个字符串结果Result
2、Results:
Action类的返回值或者说是一个结果页面的定义。其中Result Type表示如何以及用哪种视图技术展现结果。(WebWork支持多种视图技术 jsp、FreeMark等)
3、拦截器(interceptor)
实现Interceptor接口的拦截器,代码部分在intercept方法中实现。
实际上一个拦截器就是在xwork.xml文件中定义的一个无状态Java类
它至少要实现XWork的**com.opensymphony.xwork.interceptor.Intercepto**r接口
**补充:**:
有无状态指的是是否有数据存储功能。
有状态的类,就是类有实例变量的对象 ,可以保存数据,
因此也是非线程安全的。在不同方法调用间不保留任何状态。
而无状态的类对象就是一次性操作,不能保存数据。
因为其没有实例变量的对象 .不能保存数据,是不变类也是线程安全的。
在intercept方法中,可以直接返回一个Result字符串,这样整个执行直接“短路”(很少使用)
所以,一般都会在这个方法里调用参数对象invocation的invoke方法,并返回这个方法执行的结果。这样会持续执行后面的拦截器方法以及Action的execute方法等。
4、xwork配置文件
改类文件的作用:
xwork.xml是webwork的核心配置文件的所在,与web.xml类似在web服务器启动的时候调用
*补充:
web服务器启动的时候会调用的一个配置文件,
我们通过在配置文件告诉web服务器,在启动的时候,
还需要加载启动哪些东西*
其主要的功能是在遇到某个的请求时,将其分配到哪个指定的类下去处理
,并对处理结果的页面也在此处进行分配
例:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
"http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<!-- default文件是webwork提供的,
它描述了webwork在工作过程中用到的各个Servlet的返回值类型、
各拦截器的名称及其相对应的类 -->
<include file = "webwork-default.xml" />
<!--namespace 简单而言就是多了一层访问路径 -->
<!-- 其主要的作用是在项目较为庞大,对action进行管理和区分-->
<package name = "default" extends = "webwork-default" namespace="login">
<!--此时定义了具体的访问路径问 login/loginer.action-->
<!--并在此处指定了LoginAction这个类进行处理-->
<action name = "login" class = "com.ggg.action.LoginAction" >
<!--result为定义结果页,此处定义访问的成功界面为loginResult.jsp-->
<result name = "success" >
<param name="location">/loginResult.jsp</param>
</result >
<!--result为定义结果页,此处定义访问的失败界面为error.jsp-->
<result name = "error" >
<param name="location">/error.jsp</param>
</result >
<interceptor-ref name = "params" />
</action >
</package>
</xwork>
web应用-流程(例)
那么接下来我将用一个非常简单的例子来演示
运行结果:
index.jsp:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
xwork.xml:如上
Login.action:
```java
package com.ggg.action;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ModelDriven;
public class LoginAction implements Action, ModelDriven {
private String loginer;
private String loginResult;
@Override
public String execute() throws Exception {
if(loginer.equals("admin")){
loginResult = loginer+"登录成功!";
return SUCCESS;
}else{
return ERROR;
}
}
@Override
public Object getModel() {
return null;
}
public String getLoginer() {
return loginer;
}
public void setLoginer(String loginer) {
this.loginer = loginer;
}
public String getLoginResult() {
return loginResult;
}
public void setLoginResult(String loginResult) {
this.loginResult = loginResult;
}
}
success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--在结果页面中使用了 WebWork 标签库。
我们用到的是 property 标签,
可以通过此标签可以返回action中对应的属性-->
<%@ taglib prefix = "ww" uri = "/webwork" %>
<html>
<head>
<title>SUCCESS</title>
</head>
<body>
<h3><ww:property value="%{loginResult}"/></h3>
</body>
</html>
在上述的案例中,我们可以看到我们并没有什么多余的获取参数的操作,就可以获取到前端输入的数据,他是如何实现的呢,实际上它是通过值堆栈和表达式语言来实现的,当一个action携带者登录信息loginer请求时,相应的表达式就会对其进行解析,并执行对应的setLoginer()方法(值得一提的是,set方法在execute 之前就已经执行了)
具体详细内容请见如下连接:
添加链接描述