欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts和Spring MVC的比较(非原创)

程序员文章站 2022-03-20 10:35:26
文章大纲 一、Spring MVC项目例子二、Struts项目例子三、Struts和Spring MVC对比四、参考文章 一、Spring MVC项目例子 https://www.jianshu.com/p/c5a45803718e 二、Struts项目例子 1. 代码解剖 1.1 创建名为Hell ......

文章大纲

一、spring mvc项目例子
二、struts项目例子
三、struts和spring mvc对比
四、参考文章

 
Struts和Spring MVC的比较(非原创)

一、spring mvc项目例子

二、struts项目例子

1. 代码解剖

1.1 创建名为hellowordmodule项目

 
Struts和Spring MVC的比较(非原创)

所需要的jar包为:

 
Struts和Spring MVC的比较(非原创)

1.2 配置struts2
在web.xml文件中配置如下:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
           xsi:schemalocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
<display-name>struts2_helloworld</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>  
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

1.3 创建控制类helloworld

package com.yyq.action;
import com.opensymphony.xwork2.actionsupport;
public class helloworld extends actionsupport {
    private string message;
    @override
    public string execute() throws exception {
        message = "hello world,struts2";
        return success;
    }
    public string getmessage(){
        return message;
    }
}

1.4 创建index.jsp

<%@ page contenttype="text/html;charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <head>
    <title><s:property value="message"/></title>
  </head>
  <body>
        <s:property value="message"/>
  </body>
</html>

1.5 配置helloworld访问

<?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="action" namespace="/" extends="struts-default">
        <action name="hwaction" class="com.yyq.action.helloworld">
            <result>/index.jsp</result>
        </action>
    </package>
</struts>

1.6 启动项目并访问

 
Struts和Spring MVC的比较(非原创)

2. 一个简单的用户登录示例

2.1 创建用户pojo类文件

package com.yyq.pojo;
public class user {
    private string username;
    private string password;
    public user() {
    }
    public string getusername() {
        return username;
    }
    public void setusername(string username) {
        this.username = username;
    }
    public string getpassword() {
        return password;
    }
    public void setpassword(string password) {
        this.password = password;
    }
}

2.2 创建action类文件

package com.yyq.action;
import com.opensymphony.xwork2.actionsupport;
import com.yyq.pojo.user;
public class login extends actionsupport {
    private user user;
    public user getuser() {
        return user;
    }
    public void setuser(user user) {
        this.user = user;
    }
    //执行登录的方法
    public string execute(){
        return success;
    }
}

2.3 创建登陆页面index.jsp

<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>登录实例</title>
</head>
<body>
请输入用户名和密码:
<br/>
<form action="login.action" method="post">
    <p>
        用户名:<input type="text" name="user.username"/>
    </p>
    <p>
        密码:<input type="text" name="user.password"/>
    </p>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

2.4 创建登陆成功页面welcome.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>登陆成功</title>
</head>
<body>
    <p>
        您的用户名为:<s:property value="user.username"/>
    </p>
    <p>
        您的密码为:<s:property value="user.password"/>
    </p>
</body>
</html>

2.5 配置web.xml文件

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
           xsi:schemalocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
    <display-name>struts2_helloworld</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

2.6 配置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="action" namespace="/" extends="struts-default">
        <action name="login" class="com.yyq.action.login">
            <result>/welcome.jsp</result>
        </action>
    </package>
</struts>

2.7 项目结构图

 
Struts和Spring MVC的比较(非原创)

2.8 项目启动与访问

 
Struts和Spring MVC的比较(非原创)
 
Struts和Spring MVC的比较(非原创)

三、struts和spring mvc对比

1. 拦截机制的不同

  struts2是类级别的拦截,每次请求就会创建一个action,和spring整合时struts2的actionbean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。struts2中,一个action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。struts2中action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。
  springmvc是方法级别的拦截,一个方法对应一个request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过modemap返回给框架。在spring整合时,springmvc的controller bean默认单例模式singleton,所以默认对所有的请求,只会创建一个controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@scope注解修改。
  struts2有自己的拦截interceptor机制,springmvc这是用的是独立的aop方式,这样导致struts2的配置文件量还是比springmvc大。

2. 底层框架的不同

struts2采用filter(strutsprepareandexecutefilter)实现,springmvc(dispatcherservlet)则采用servlet实现。filter在容器启动之后即初始化;服务停止以后坠毁,晚于servlet。servlet在是在调用时初始化,先于filter调用,服务停止后销毁。

3. 性能方面

struts2是类级别的拦截,每次请求对应实例一个新的action,需要加载所有的属性值注入,springmvc实现了零配置,由于springmvc基于方法的拦截,有加载一次单例模式bean注入。所以,springmvc开发效率和性能高于struts2。

4. 配置方面

spring mvc和spring是无缝的。从这个项目的管理和安全上也比struts2高。

四、参考文章

    1. https://www.cnblogs.com/yangyquin/p/5434364.html
    2. https://www.cnblogs.com/xu-cceed3w/p/9238137.html
    3. https://www.cnblogs.com/huajiezh/p/6415444.html