SpringMVC基本
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
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>商品列表</title>
- </head>
- <body>
- <h1>商品列表</h1>
- <table width="100%" border="1">
- <tr>
- <td>商品名称</td>
- <td>商品价格</td>
- <td>生产日期</td>
- <td>商品描述</td>
- <td>操作</td>
- </tr>
- <c:forEach items="${productList}" var="product">
- <tr>
- <td>${product.name}</td>
- <td>${product.price}</td>
- <td><fmt:formatDate value="${product.createTime}" pattern="yyyy-MM-da HH:mm:ss"/></td>
- <td>${product.detail}</td>
- <td><a href="${pageContext.request.contextPath}/productEdit.form?id=${product.id}">修改</a></td>
- </tr>
- </c:forEach>
- </table>
- </body>
- </html>
dispatcher-servlet.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- 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">
- <!--配置controller扫描包-->
- <context:component-scan base-package="com.jinke.springmvc"/>
- <!--视图解析器的配置-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- </beans>
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
- <!--加载核心配置文件-->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!--核心控制器的配置-->
- <servlet>
- <servlet-name>dispatcher</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <url-pattern>*.form</url-pattern>
- </servlet-mapping>
- </web-app>
java类
- import java.util.Date;
- public class Product {
- private int id;
- private String name;
- private double price;
- private Date createTime;
- private String detail;
- public Product() {
- }
- public Product(int id, String name, double price, Date createTime, String detail) {
- this.id = id;
- this.name = name;
- this.price = price;
- this.createTime = createTime;
- this.detail = detail;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public double getPrice() {
- return price;
- }
- public void setPrice(double price) {
- this.price = price;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public String getDetail() {
- return detail;
- }
- public void setDetail(String detail) {
- this.detail = detail;
- }
- }
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- @Controller
- public class ProductControll {
- @RequestMapping("productList")
- public ModelAndView productList() {
- ModelAndView mav = new ModelAndView();
- List<Product> products = Arrays.asList(new Product(1, "1", 1111, new Date(), "1111")
- , new Product(2, "2", 2222, new Date(), "2222")
- , new Product(3, "3", 3333, new Date(), "3333")
- , new Product(4, "4", 4444, new Date(), "4444"));
- mav.addObject("productList", products);
- mav.setViewName("productList");
- return mav;
- }
- }
结果
欢迎关注我的微信公众号:安卓圈
SpringMVC基本的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Springmvc数据校验
步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
- redis集成到Springmvc中及使用实例
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...
- 流程开发Activiti 与SpringMVC整合实例
流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
随机推荐
- MySQL 8.0 的xtrabackup备份
xtrabackup 备份语句: fname=`date +%F_%H-%M-%S` mkdir -p /mnt/dbbak/db_$fname xtrabackup --defaults-file= ...
- libimobiledevice的安装与使用
说明:libimobiledevice相当于安卓的adb,可以使用命令对ios应用进行安装卸载等操作. 在MacOS下安装libimobiledevice: $ brew uninstall idev ...
- 实时查看mysql当前连接数
如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist 2.只查看当前连接数(Thread ...
- js的类型系统--js基于原型的基石是所有对象最终都能够类型自证
一.动态类型 变量能够类型自证的类型即为动态类型 二.基础与内置类型 三.对象与类型的关系 1.对象本身能够自证为基本类型: 2.元原型可能为一个空的集合: 3.复合对象的成员能够自证为基本类型: 4 ...
- extern与头文件(*.h)的区别和联系
原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/ 个人认为有一些道理:所以转过来学习了. 用#include ...
- 编程语言的类型修饰符modifiers
编程语言修饰符,代表语言要素与常规表达不同的语义: 这些语义的不同需要编译器和运行时作出不同的解释: 作用域.访问: 生命周期: 同步异步: 多态: 纯函数: 注解: 懒加载: 编译器合成:
- ES6学习笔记--Object.is()
ES5比较两个值是否相等, 相等运算符(==)和恒等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. javascript缺乏一种运算,在所有环境中, ...
- Boggle Game
Description Given a board which is a 2D matrix includes a-z and dictionary dict, find the largest co ...
- 通过100张图一步步理解CNN
https://blog.csdn.net/v_july_v/article/details/79434745 Youtube上迄今为止最好的卷积神经网络快速入门教程 https://www.bili ...
- Linux(Contos7)下使用SSH远程安装MySQL 8.0.17 完整笔记
1. 使用putty 配置远程服务器连接,登录服务器. 由于没有指定下载包 使用 yum install mysql-server 提示 未指定包,如: 2. 因为甲骨文的收购了Mysql并且对My ...