Java Structs框架原理案例详解

yizhihongxing

Java Structs框架原理案例详解

什么是Struts框架

Struts框架是一种流行的Java Web应用程序框架,Struts采用MVC(Model-View-Controller)架构模式,将应用程序的数据(Model),用户界面(View)和控制逻辑(Controller)清晰地分离开,以便维护和扩展应用程序。

Struts框架包含许多重要的组件,包括Action、Interceptor、Result、ValueStack、Tag等。

Struts框架的核心原理

Struts框架的核心原理是拦截器(Interceptor)。拦截器是一种可扩展的机制,在处理请求之前或之后,将适当的代码注入到请求处理流程中。

Struts框架中的请求处理过程如下:

  1. 用户发送HTTP请求,其中包含一个Action名称或URL;
  2. Struts根据Action名称或URL查找适当的Action;
  3. Struts将该Action与配置文件中定义的Interceptors相关联,同时创建ActionContext和ValueStack对象;
  4. Struts调用Interceptors处理ActionContext和ValueStack对象,这一过程中可以添加、删除或修改Action的属性;
  5. Struts调用Action的方法,处理请求;
  6. Struts将Action的结果传递给Result;
  7. Struts调用Result,生成响应。

Struts框架的实例

下面是一个简单的Struts框架实例,包括一个Action、一个Interceptor、一个Result和一个配置文件。

Action

public class MyAction extends ActionSupport {
    private String message;

    @Override
    public String execute() throws Exception {
        setMessage("Hello, Struts!");
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

Interceptor

public class MyInterceptor implements Interceptor {
    public void init() {
        System.out.println("My Interceptor initialized.");
    }

    public void destroy() {
        System.out.println("My Interceptor destroyed.");
    }

    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("My Interceptor pre-processing.");
        String result = invocation.invoke();
        System.out.println("My Interceptor post-processing.");
        return result;
    }
}

Result

public class MyResult implements Result {
    private String resultValue;

    public String getResultValue() {
        return resultValue;
    }

    public void setResultValue(String resultValue) {
        this.resultValue = resultValue;
    }

    public void execute(ActionInvocation invocation) throws Exception {
        System.out.println("My Result executing.");
        String message = ((MyAction) invocation.getAction()).getMessage();
        setResultValue(message);
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(message);
    }

}

配置文件

<?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>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="myInterceptor" class="com.example.MyInterceptor"></interceptor>
        </interceptors>
        <default-interceptor-ref name="myInterceptor" />
        <action name="myAction" class="com.example.MyAction">
            <result type="com.example.MyResult"></result>
        </action>
    </package>
</struts>

在这个示例中,我们创建了一个名为"myAction"的Action,该Action会被映射到配置文件中的"/myAction" URL。Action中的execute()方法返回一个"SUCCESS"字符串,这意味着Struts应该将请求的处理交给一个Result对象。

MyResult对象是一个自定义的Result,它在Action执行成功后将数据写回HTTP响应中。MyInterceptor对象是一个自定义的Interceptor,它会在整个请求处理流程中注入一些逻辑。

另一个Struts框架的示例

下面是另一个Struts框架的示例,包括一个Action、一个Interceptor和一个配置文件。

Action

public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    @Override
    public String execute() throws Exception {
        if ("admin".equals(getUsername()) && "admin".equals(getPassword())) {
            return SUCCESS;
        } else {
            return ERROR;
        }
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

}

Interceptor

public class AuthenticationInterceptor implements Interceptor {
    public void init() {
        System.out.println("AuthenticationInterceptor initialized.");
    }

    public void destroy() {
        System.out.println("AuthenticationInterceptor destroyed.");
    }

    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext context = invocation.getInvocationContext();
        Map<String, Object> session = context.getSession();

        if (session.get("username") == null) {
            return "login";
        } else {
            return invocation.invoke();
        }
    }
}

配置文件

<?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>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="authenticationInterceptor" class="com.example.AuthenticationInterceptor"></interceptor>
        </interceptors>
        <default-interceptor-ref name="authenticationInterceptor" />
        <action name="login" class="com.example.LoginAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
            <result name="login">/login.jsp</result>
        </action>
    </package>
</struts>

在这个示例中,我们创建了一个名为"login"的Action,它将登录用户的用户名和密码存储在会话中。在配置文件中的AuthenticationInterceptor拦截器会验证用户是否已登录。如果用户已登录,则拦截器将传递请求到Action;否则,拦截器将重定向到"/login"视图。

以上就是Struts框架的核心原理及两个实例的详细介绍。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Structs框架原理案例详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新是指在不重启服务的情况下动态更新配置的能力。实现这个功能需要用到SpringCloud Config Server和SpringCloud Bus组件的支持。 具体实现过程如下: 配置SpringCloud Config Server 在配置文件中添加以下配置: spring.cloud.config.server.git.ur…

    Java 2023年6月15日
    00
  • Spring Boot深入排查 java.lang.ArrayStoreException异常

    Spring Boot深入排查 java.lang.ArrayStoreException异常攻略 异常说明 Java中的ArrayStoreException是一种运行时异常。它通常在向数组中存储了不兼容的对象类型时发生。当试图将一个对象赋值给一个数组的元素,而这个对象的类型与数组的声明类型不兼容时,就会出现该异常。 排查步骤 1.定位异常位置 当我们在S…

    Java 2023年6月2日
    00
  • JavaWeb利用struts实现文件下载时改变文件名称

    下面是Java Web利用Struts实现文件下载时改变文件名称的完整攻略: 文件下载功能的实现 在Struts框架中实现文件下载的功能需要: 在action中编写下载文件的方法。 在struts.xml配置文件中添加对应的action和result。 在前端页面中添加下载链接。 代码演示: 1. 在action中编写下载文件的方法 public class…

    Java 2023年5月20日
    00
  • spring整合struts2过程详解

    Spring整合Struts2过程详解 简介 Struts2是一款流行的Web框架,它提供了MVC开发模式的完整实现,通常用来开发Web应用程序。而Spring是一款轻量级的IOC容器和AOP框架,它提供了很多企业级应用开发的基础类库,可以协助我们快速地开发Web应用。本文将介绍如何将Spring与Struts2进行整合,以便可以更好的利用它们两者之大优势。…

    Java 2023年5月20日
    00
  • java实现贪吃蛇游戏代码(附完整源码)

    下面我将详细讲解“java实现贪吃蛇游戏代码(附完整源码)”的完整攻略。 1. 程序实现流程 在实现贪吃蛇游戏代码时,需要遵循以下流程: 初始化游戏界面,包括画布和游戏背景。 设置蛇和食物的初始状态,并在游戏界面中绘制它们。 监听用户的键盘事件,控制蛇的方向。 定义蛇的移动方式,包括蛇的身体结构以及移动的方向。 判断蛇是否会撞墙或者撞到自己,如果是,游戏结束…

    Java 2023年5月30日
    00
  • Eclipse中配置Maven build打包的方法步骤

    下面是详细的攻略过程。 Eclipse中配置Maven Build打包的方法步骤 1. 配置Maven环境变量 在Windows系统中,需要将Maven安装路径中的bin目录添加到系统的Path环境变量中。打开控制面板,搜索“环境变量”,点击“编辑系统环境变量”,找到“Path”变量,点击“编辑”,在弹出的窗口中添加Maven的bin目录路径。Mac和Lin…

    Java 2023年5月20日
    00
  • javascript动态改变img的src属性图片不显示的解决方法

    当使用JavaScript动态改变img标签的src属性时,由于图片加载的延迟时间或者其他网络问题,有可能会导致图片无法正常显示。下面是改善这种情况的方法: 1. 图片加载完再显示 可以在图片载入完成后再显示图片,通过监听图片的 load 事件确保图片已成功加载,代码如下: var img = document.getElementById(‘myImg’)…

    Java 2023年6月15日
    00
  • Springboot+SpringSecurity+JWT实现用户登录和权限认证示例

    让我为您详细讲解一下“Springboot+SpringSecurity+JWT实现用户登录和权限认证示例”的攻略。 首先,需要安装以下工具: Java开发环境 Maven构建工具 然后,我们需要按照以下步骤进行实现: 1.添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.spring…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部