Struts2工作原理及代码

一、Struts2工作原理

  1. 客户端请求(HTTP Request)
    • 客户端(如浏览器)发送一个HTTP请求到Web服务器。这个请求包含了请求的URL、参数等信息。例如,用户在浏览器中输入一个Struts2应用相关的网址,如http://example.com/myStruts2Action.action
  2. FilterDispatcher(核心过滤器)
    • 在Struts2框架中,FilterDispatcher是一个核心的Servlet过滤器。它负责拦截所有的请求。
    • 它的主要工作包括:
      • 解析请求的URL,确定请求对应的Action(业务逻辑处理类)。例如,如果请求的URL是/user/login.action,它会根据配置找到对应的UserLoginAction类。
      • 加载Struts2的配置文件(通常是struts.xml),该配置文件包含了关于Action的映射、拦截器等重要信息。
  3. ValueStack(值栈)的创建与准备
    • 在处理请求的过程中,Struts2会创建一个ValueStack对象。ValueStack是一个类似于数据存储容器的结构。
    • 它会将请求相关的数据(如请求参数等)放入ValueStack中。例如,如果请求中有usernamepassword两个参数,这些参数会被设置到ValueStack相应的属性上。
  4. Interceptors(拦截器)处理
    • 拦截器是Struts2中一个重要的概念。在执行Action之前,会按照配置顺序依次执行一系列的拦截器。
    • 拦截器可以完成诸如参数验证、日志记录、权限检查等功能。例如,一个参数验证拦截器可以检查请求中的参数是否符合要求,如果不符合则可以直接返回错误信息,而不会执行后续的Action。
    • 每个拦截器都有intercept方法,在这个方法中可以对请求进行处理,并且可以决定是否继续调用下一个拦截器或者直接调用Action。
  5. Action Execution(Action执行)
    • 经过拦截器链后,最终会执行对应的Action类中的方法。
    • Action类是用户编写的业务逻辑处理类,它包含了处理具体业务逻辑的方法。例如,一个UserLoginAction类可能有一个login方法,用于验证用户登录信息是否正确。
    • Action可以与模型(Model)进行交互,例如访问数据库、调用业务逻辑层的方法等,然后将处理结果返回。
  6. Result Processing(结果处理)
    • Action执行完成后会返回一个结果码(如successerror等)。
    • 根据这个结果码,Struts2会在配置文件(struts.xml)中查找对应的结果视图(View)配置。例如,如果结果码是success,可能会跳转到一个success.jsp页面,这个页面的配置是在struts.xml中通过<result>标签来定义的。
  7. View Rendering(视图渲染)
    • 找到对应的视图(如JSP页面)后,Struts2会将ValueStack中的数据传递给视图。
    • 在视图中可以使用Struts2的标签库(如<s:property>标签)来获取和显示ValueStack中的数据。例如,在success.jsp页面中,可以使用<s:property value = "username"/>来显示从ValueStack中获取的username值。
  8. HTTP Response(响应返回客户端)
    • 视图渲染完成后,会生成一个HTTP响应,然后将这个响应发送回客户端(浏览器)。这个响应包含了页面的HTML内容或者其他格式的数据(如JSON等,如果是用于AJAX请求的响应)。

二、Struts2代码示例

  1. 创建Action类
    • 首先创建一个简单的Action类,例如HelloAction
import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
    private String message;

    public String execute() {
        message = "Hello, Struts2!";
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
  • 这里HelloAction继承自ActionSupportActionSupport提供了一些默认的方法和常量(如SUCCESS)。execute方法是Action类中的主要业务逻辑处理方法,在这里我们设置了一个message属性的值,并返回SUCCESS结果码。
  1. 配置struts.xml文件
<?xml version="1.0" encoding="UTF - 8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts - 2.0.dtd">
<struts>
    <package name="default" extends="struts - default">
        <action name="hello" class="HelloAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>
  • struts.xml中,我们定义了一个名为default的包,并且在这个包中定义了一个名为hello的Action,它对应的类是HelloAction。当这个Action执行成功(返回SUCCESS)后,会跳转到/hello.jsp页面。
  1. 创建视图页面(hello.jsp
<%@ page contentType="text/html;charset=UTF - 8" language="java" %>
<%@ taglib prefix="s" uri="/struts - tags" %>
<html>
<head>
    <title>Hello Struts2</title>
</head>
<body>
<s:property value="message"/>
</body>
</html>
  • hello.jsp页面中,我们使用了Struts2的标签库(<s:property>)来显示从Action中传递过来的message属性的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值