SpringMVC和Struts2的区别

SpringMVC与Struts2区别

对比项目

SrpingMVC

Struts2

优势

国内市场情况

有大量用户,一般新项目启动都会选用springmvc

有部分老用户,老项目组,由于习惯了,一直在使用。

国内情况,springmvc的使用率已经超过Struts2

框架入口

基于servlet

基于filter

本质上没太大优势之分,只是配置方式不一样

框架设计思想

控制器基于方法级别的拦截,处理器设计为单实例

控制器基于类级别的拦截, 处理器设计为多实例

由于设计本身原因,造成了Struts2,通常来讲只能设计为多实例模式,相比于springmvc设计为单实例模式,Struts2会消耗更多的服务器内存。

参数传递

参数通过方法入参传递

参数通过类的成员变量传递

Struts2通过成员变量传递参数,导致了参数线程不安全,有可能引发并发的问题。

与spring整合

与spring同一家公司,可以与spring无缝整合

需要整合包

Springmvc可以更轻松与spring整合

SpringMVC有三大组件:处理器映射器、处理器适配器、视图解析器

SpringMVC的架构

demo代码结构如下

productList.jsp

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <html>
  5. <head>
  6. <title>商品列表</title>
  7. </head>
  8. <body>
  9. <h1>商品列表</h1>
  10. <table width="100%" border="1">
  11. <tr>
  12. <td>商品名称</td>
  13. <td>商品价格</td>
  14. <td>生产日期</td>
  15. <td>商品描述</td>
  16. <td>操作</td>
  17. </tr>
  18. <c:forEach items="${productList}" var="product">
  19. <tr>
  20. <td>${product.name}</td>
  21. <td>${product.price}</td>
  22. <td><fmt:formatDate value="${product.createTime}" pattern="yyyy-MM-da HH:mm:ss"/></td>
  23. <td>${product.detail}</td>
  24. <td><a href="${pageContext.request.contextPath}/productEdit.form?id=${product.id}">修改</a></td>
  25. </tr>
  26. </c:forEach>
  27. </table>
  28. </body>
  29. </html>

dispatcher-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  6. <!--配置controller扫描包-->
  7. <context:component-scan base-package="com.jinke.springmvc"/>
  8. <!--视图解析器的配置-->
  9. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  10. <property name="prefix" value="/WEB-INF/jsp/"/>
  11. <property name="suffix" value=".jsp"/>
  12. </bean>
  13. </beans>

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--加载核心配置文件-->
  7. <context-param>
  8. <param-name>contextConfigLocation</param-name>
  9. <param-value>/WEB-INF/applicationContext.xml</param-value>
  10. </context-param>
  11. <listener>
  12. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  13. </listener>
  14. <!--核心控制器的配置-->
  15. <servlet>
  16. <servlet-name>dispatcher</servlet-name>
  17. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  18. <load-on-startup>1</load-on-startup>
  19. </servlet>
  20. <servlet-mapping>
  21. <servlet-name>dispatcher</servlet-name>
  22. <url-pattern>*.form</url-pattern>
  23. </servlet-mapping>
  24. </web-app>

java类

  1. import java.util.Date;
  2.  
  3. public class Product {
  4. private int id;
  5. private String name;
  6. private double price;
  7. private Date createTime;
  8. private String detail;
  9.  
  10. public Product() {
  11. }
  12.  
  13. public Product(int id, String name, double price, Date createTime, String detail) {
  14. this.id = id;
  15. this.name = name;
  16. this.price = price;
  17. this.createTime = createTime;
  18. this.detail = detail;
  19. }
  20.  
  21. public int getId() {
  22. return id;
  23. }
  24.  
  25. public void setId(int id) {
  26. this.id = id;
  27. }
  28.  
  29. public String getName() {
  30. return name;
  31. }
  32.  
  33. public void setName(String name) {
  34. this.name = name;
  35. }
  36.  
  37. public double getPrice() {
  38. return price;
  39. }
  40.  
  41. public void setPrice(double price) {
  42. this.price = price;
  43. }
  44.  
  45. public Date getCreateTime() {
  46. return createTime;
  47. }
  48.  
  49. public void setCreateTime(Date createTime) {
  50. this.createTime = createTime;
  51. }
  52.  
  53. public String getDetail() {
  54. return detail;
  55. }
  56.  
  57. public void setDetail(String detail) {
  58. this.detail = detail;
  59. }
  60. }
  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.servlet.ModelAndView;
  4.  
  5. import java.util.Arrays;
  6. import java.util.Date;
  7. import java.util.List;
  8.  
  9. @Controller
  10. public class ProductControll {
  11.  
  12. @RequestMapping("productList")
  13. public ModelAndView productList() {
  14. ModelAndView mav = new ModelAndView();
  15. List<Product> products = Arrays.asList(new Product(1, "1", 1111, new Date(), "1111")
  16. , new Product(2, "2", 2222, new Date(), "2222")
  17. , new Product(3, "3", 3333, new Date(), "3333")
  18. , new Product(4, "4", 4444, new Date(), "4444"));
  19. mav.addObject("productList", products);
  20. mav.setViewName("productList");
  21. return mav;
  22. }
  23. }

结果

欢迎关注我的微信公众号:安卓圈

SpringMVC基本的更多相关文章

  1. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  2. Springmvc数据校验

    步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  3. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  4. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程

    本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...

  5. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  6. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  7. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  8. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  9. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  10. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

随机推荐

  1. MySQL 8.0 的xtrabackup备份

    xtrabackup 备份语句: fname=`date +%F_%H-%M-%S` mkdir -p /mnt/dbbak/db_$fname xtrabackup --defaults-file= ...

  2. libimobiledevice的安装与使用

    说明:libimobiledevice相当于安卓的adb,可以使用命令对ios应用进行安装卸载等操作. 在MacOS下安装libimobiledevice: $ brew uninstall idev ...

  3. 实时查看mysql当前连接数

    如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist 2.只查看当前连接数(Thread ...

  4. js的类型系统--js基于原型的基石是所有对象最终都能够类型自证

    一.动态类型 变量能够类型自证的类型即为动态类型 二.基础与内置类型 三.对象与类型的关系 1.对象本身能够自证为基本类型: 2.元原型可能为一个空的集合: 3.复合对象的成员能够自证为基本类型: 4 ...

  5. extern与头文件(*.h)的区别和联系

    原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/ 个人认为有一些道理:所以转过来学习了. 用#include ...

  6. 编程语言的类型修饰符modifiers

    编程语言修饰符,代表语言要素与常规表达不同的语义: 这些语义的不同需要编译器和运行时作出不同的解释: 作用域.访问: 生命周期: 同步异步: 多态: 纯函数: 注解: 懒加载: 编译器合成:

  7. ES6学习笔记--Object.is()

    ES5比较两个值是否相等, 相等运算符(==)和恒等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. javascript缺乏一种运算,在所有环境中, ...

  8. Boggle Game

    Description Given a board which is a 2D matrix includes a-z and dictionary dict, find the largest co ...

  9. 通过100张图一步步理解CNN

    https://blog.csdn.net/v_july_v/article/details/79434745 Youtube上迄今为止最好的卷积神经网络快速入门教程 https://www.bili ...

  10. Linux(Contos7)下使用SSH远程安装MySQL 8.0.17 完整笔记

    1. 使用putty 配置远程服务器连接,登录服务器. 由于没有指定下载包 使用 yum install mysql-server  提示 未指定包,如: 2. 因为甲骨文的收购了Mysql并且对My ...