浅谈WebWork--一个小白对webwork的认识

本文介绍了WebWork框架的核心概念,包括Action类、Results、拦截器(Interceptor)和XWork配置文件。通过一个简单的web应用流程示例,展示了如何在没有额外参数获取操作的情况下,利用值堆栈和表达式语言实现前端数据的获取。在execute方法执行前,set方法已经自动完成。更多详细内容敬请参阅相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

			*笔者白白萌新一枚,旨在了解和记录所遇到的知识,如有问题错误欢迎指出改正*
首先什么是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” %>

login 提交 `

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 之前就已经执行了)
具体详细内容请见如下连接:
添加链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值