Struts1和struts2的区别_动力节点Java学院整理

Struts1和Struts2的区别

什么是Struts1和Struts2

  • Struts1是一个基于MVC模式的Web应用框架,由Apache组织开发和维护,是早期Web开发中使用较为广泛的框架之一。
  • Struts2,原名WebWork,是Struts1的升级版,也是一个基于MVC模式的Web应用框架,由Apache组织维护。

Struts1和Struts2的主要区别

  1. 架构设计

  2. Struts1的核心控制器是ActionServlet,每个请求对应一个Servlet线程,由于Servlet存在线程安全问题,因此需要通过单例模式来解决。Struts1的控制器和Model之间通过ActionForm进行数据传递。

  3. Struts2的核心控制器是FilterDispatcher,采用新的拦截器(Interceptor)机制代替了ActionForm,实现了与控制器分离,并且将Action和业务逻辑分离,使得代码复用更加方便。

  4. 请求处理

  5. Struts1的请求处理通过ActionServlet实现,而请求处理时需要每次新建一个线程处理请求,因此相对而言会消耗较多的系统资源。

  6. Struts2的请求处理通过拦截器(Interceptor)实现,可以采用多线程处理请求,处理效率较高。

  7. 标签库

  8. Struts1主要提供了适用于JSP页面的标签库,如html、bean、logic以及template等。这些标签库主要用于简化Java Servlet的编写,但缺点是可扩展性不是很好。

  9. Struts2采用OGNL(Object-Graph Navigation Language)技术,通过EL表达式来访问JavaBean,标签库丰富,功能强大,而且扩展性也很好。

  10. 编程风格和实现思路

  11. Struts1采用了命令模式(Command Pattern)和模板模式(Template Pattern)的编程风格。

  12. Struts2则采用了拦截器(Interceptor)的思想,并基于AOP(面向切面编程)实现。这使得代码的可读性和可维护性都得到了很大的提高。

示例一

// Struts1示例:一个简单的登录功能实现
public class LoginForm extends ActionForm{
    private String username;
    private String password;
    // getters and setters
}

public class LoginAction extends Action{
    public ActionForward execute(
        ActionMapping mapping,ActionForm form,
        HttpServletRequest request,HttpServletResponse response) 
        throws Exception {
        LoginForm loginForm = (LoginForm)form;
        String username = loginForm.getUsername();
        String password = loginForm.getPassword();
        if("admin".equals(username) && "admin".equals(password)){
            // 登录成功,转到欢迎页面
            return mapping.findForward("success");
        }else{
            // 登录失败,转到登录页面
            return mapping.findForward("failure");
        }
    }
}

// Struts2示例:一个简单的登录功能实现
public class LoginAction extends ActionSupport{
    private String username;
    private String password;
    // getters and setters
    public String execute(){
        if("admin".equals(username) && "admin".equals(password)){
            // 登录成功,转到欢迎页面
            return SUCCESS;
        }else{
            // 登录失败,转到登录页面
            return INPUT;
        }
    }
}

以上两个示例分别演示了Struts1和Struts2实现一个简单的登录功能所需的代码量和风格差异。可以看到,Struts2通过采用注解和拦截器机制,使得代码更加简洁易懂。

示例二

<!-- Struts1配置示例 -->
<action name="list" class="com.example.ListAction">
    <result name="success">/list.jsp</result>
</action>
<action name="show" class="com.example.ShowAction">
    <result name="success">/show.jsp</result>
</action>

<!-- Struts2配置示例 -->
<package name="example" extends="struts-default">
    <action name="list" class="com.example.ListAction">
        <result name="success">/list.jsp</result>
    </action>
    <action name="show" class="com.example.ShowAction">
        <result name="success">/show.jsp</result>
    </action>
</package>

以上两个示例分别演示了Struts1和Struts2配置Action所需的XML语法格式的差异。可以看到,Struts2通过采用Package的概念,使得配置更加清晰易懂。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts1和struts2的区别_动力节点Java学院整理 - Python技术站

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

相关文章

  • 简单了解Java删除字符replaceFirst原理及实例

    简单了解Java删除字符replaceFirst原理及实例 一、replaceFirst方法简介 replaceFirst() 方法是 Java 中类 String 提供的一个替换字符串的方法,它可以替换字符串的第一个匹配项,使用正则表达式指定需要替换的匹配项。 replaceFirst() 方法的定义如下: public String replaceFir…

    Java 2023年5月27日
    00
  • Java中的UnChecked异常有哪些?

    Java中的异常分为Checked异常和Unchecked异常。其中,Checked异常需要在代码中进行显式处理或在方法签名中声明,而Unchecked异常则不需要。 Java中常见的Unchecked异常有以下几种: NullPointerException (空指针异常) 当尝试调用一个空对象的方法或访问空对象的属性时,会抛出NullPointerExc…

    Java 2023年4月27日
    00
  • Java日期时间类(Date、DateFormat、Calendar)解析

    下面是Java日期时间类解析攻略: Java日期时间类(Date、DateFormat、Calendar)解析 1. Date类 java.util.Date类是Java中处理日期和时间的类,它表示一个特定的瞬间,精确到毫秒。可以使用其无参构造函数来获取当前系统时间。 1.1 Date类常用方法 Date类常用的方法如下: getTime():返回自 197…

    Java 2023年5月20日
    00
  • Java Document生成和解析XML操作

    首先,让我们来理解一下Java Document和XML的概念。 Java Document是一个可以修改或是读取XML文件的API,它提供了很多的方法用来增删查改XML文档的节点和属性。 XML是一种标记语言,可以用来存储和传输数据。它的格式在Internet中被广泛使用,尤其是在Web Service中用来传递数据。 接下来,我们来详细讲解一下Java …

    Java 2023年5月19日
    00
  • @RequestParam注解参数

    做业务的时候经常忘记@RequestParam注解参数,记录一下 首先,我们要清楚@RequestParam是干什么的@RequestParam:将请求参数绑定到你控制器的方法参数上,路径上有个参数+? @RequestParam注解参数: 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultV…

    Java 2023年5月8日
    00
  • SpringBoot @PostMapping接收HTTP请求的流数据问题

    要实现SpringBoot @PostMapping接收HTTP请求的流数据,需要遵循以下步骤: 在Controller中添加接口,使用@PostMapping注解,并使用@RequestBody注解请求参数; 创建一个封装流数据的Java对象,并使用@RequestBody注解接收请求参数; 在请求头中添加Content-Type字段,值为applicat…

    Java 2023年6月3日
    00
  • Java Web开发之图形验证码的生成与使用方法

    Java Web开发之图形验证码的生成与使用方法 在Java Web开发中,图形验证码是常用的用户验证工具。通过在表单中添加验证码,可以有效防止自动化机器人等非人类恶意行为的攻击。本文将详细介绍Java Web开发中,如何生成和使用图形验证码。 生成图形验证码 生成图形验证码需要使用Java提供的Graphics2D类。其中,需要注意以下几个关键点: 随机生…

    Java 2023年6月15日
    00
  • Java字符串定义及常用方法

    Java字符串定义及常用方法 字符串定义 Java字符串是一个对象,使用String类来创建和操作字符串。Java字符串的特点是不可改变性,即在创建字符串后,不能改变其值。 字符串创建 Java字符串可以通过字面量和构造函数来创建。 字面量方式 String str = "Java字符串"; 构造函数方式 String str2 = ne…

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