博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC入门笔记
阅读量:4700 次
发布时间:2019-06-09

本文共 5381 字,大约阅读时间需要 17 分钟。

SpringMVC入门笔记

1. 简介

Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架 ,是Spring系开源项目中的一个,和IoC配合使用。通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术。Spring分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让他们更容易进行定制。Spring MVC解决的问题如下:

  • 将web页面的请求传给服务器;
  • 根据不同的请求处理不同的逻辑单元;
  • 返回处理结果数据并跳转至响应页面;

通过下面这样图可以看到Spring MVC在Spring全家桶中的位置:

1354771-20180904111247426-670140015.png

2. Spring MVC实例

现在总结一下搭建一个完整SpringMVC的步骤,期间遇到了很多坑,404的问题坑了好久,先来记录一下成功的搭建步骤,后面附上源码。本文使用eclipse(Version: Photon Release (4.8.0))搭建SpringMVC。

2.1 新建maven工程

新建一个maven project。

1354771-20180904111300134-1726897735.png

1354771-20180904111309688-1813152709.png

1354771-20180904111324125-113858252.png

新建好的工程结构应该是这样的:

│  .classpath│  .project│  pom.xml│├─.settings│      .jsdtscope│      org.eclipse.jdt.core.prefs│      org.eclipse.m2e.core.prefs│      org.eclipse.wst.common.component│      org.eclipse.wst.common.project.facet.core.xml│      org.eclipse.wst.jsdt.ui.superType.container│      org.eclipse.wst.jsdt.ui.superType.name│      org.eclipse.wst.validation.prefs│├─src│  └─main│      ├─resources│      └─webapp│          │  index.jsp│          ││          └─WEB-INF│                  web.xml│└─target    ├─classes    ├─m2e-wtp    │  └─web-resources    │      └─META-INF    │          │  MANIFEST.MF    │          │    │          └─maven    │              └─com.wangjun    │                  └─learnSpringMVC    │                          pom.properties    │                          pom.xml    │    └─test-classes

2.2 添加pom依赖

既然是SpringMVC工程,肯定要添加SpringMVC的包,可以去http://mvnrepository.com/查找,除了SpringMVC还需要添加javax.servlet的包。搞不懂为什么网上很多教程都添加了spring的bean,aop,core这些基础包,这些基础包已经被springmvc依赖了,已经包含进来了,就不用再pom文件手动依赖了。

pom.xml

4.0.0
com.wangjun
spring1
war
0.0.1-SNAPSHOT
spring1 Maven Webapp
http://maven.apache.org
junit
junit
3.8.1
test
org.springframework
spring-webmvc
4.3.18.RELEASE
javax.servlet
javax.servlet-api
4.0.0-b01
provided
spring1

2.3 配置web.xml

在web.xml中需要添加使用的servlet和映射规则。

web.xml

Archetype Created Web Application
springmvc
org.springframework.web.servlet.DispatcherServlet
1
springmvc
/

2.4 新建springmvc-servlet.xml文件

在web.xml同级目录下新建springmvc-servlet.xml文件(就是在web.xml配置的servletName+servlet)。这里面负责配置映射类和视图适配器等。

springmvc-servlet.xml

2.5 新建页面jsp文件

在WEB-INF下新建jsp文件夹,然后在jsp下新建demo.jsp

demo.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%>
Insert title hereHello springMVC!

2.6 新建controller控制类

在main文件夹下新建java文件夹,在新建HelloController.java文件,包名为com.learnspringmvc.controllers。

package com.learnspringmvc.controllers;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;//控制器注解@Controller@RequestMapping("/hello")public class HelloController {    @RequestMapping("/showdemo")    public String getString() {                // 必须在配置的view路径下存在demo.jsp,否则返回404        return "demo";    }}

2.7 编译打包

进入到项目的根目录下(pom.xml存在的文件夹),打开doc,执行mvc install,出现BUILD SUCCESS表示打包成功,在target文件夹下生成learnSpringMVC.war,将此war包移动到tomcat的webapps下面,重启服务器,访问http://localhost:8080/learnSpringMVC/hello/showdemo:(注意:8080:后面紧跟的不是在web.xml中配置的servlet-name,而是在pom.xml中build的finalName属性)

1354771-20180904111337054-1952435795.png

2.8 关于404问题的坑

在搭建工程的时候,访问页面显示404,困扰了很久,也在网上搜了很多答案,这是一篇质量比较高的:https://blog.csdn.net/baidu_15275441/article/details/73930961。404问题很难排查,因为并没有报错和堆栈信息,只能一个一个的排查可能的问题,写这边博客的时候又发现了一个导致404的原因,就是上面2.7写到的:8080:后面紧跟的不是在web.xml中配置的servlet-name,而是在pom.xml中build的finalName属性。可见404问题无处不见,由于自己对SpringMVC框架只是个小白,只能搜索加尝试。希望后面能成为大神级别的。这种问题都是小case。

源码:https://github.com/WangJun-SCU/LearnSpringMVC

3. SSH个SSM两个框架的区别

SSH(Spring,Struts,Hibernate)和SSM(Spring,SpringMVC,MyBatis)的区别其实就是SpringMVC和Struts,Hibernate和MyBatis的区别。

3.1 SpringMVC和Struts的区别

  1. Struct和Spring-MVC都是负责取转发的,但是两者针对request的请求上面区别很大,Struct是针对一个Action类来进行请求的,即一个Action类对应于一个请求,所以类拦截,请求的数据类共享。而Spring-MVC则是针对于方法级别的请求的,也就是一个方法对应于一个请求,属于方法拦截,请求的数据方法不共享。
  2. Spring-MVC的配置文件相对来说较为少,容易上手,可以加快软件开发的速度。
  3. Spring-MVC的入口是Servlet级别的而Struct的级别是Filter级别的。

3.2 Hibernate和MyBatis的区别

  1. Hibernate是一种O/R关系型,即完成数据库表和持久化类之间的映射,而MyBitas是针对的SQL-Mapping,Hibernate把数据库给封装好以后,可以调用相应的数据库操作语句SQL,而MyBitas则是用的原始的数据库操作语句。基于此原因,Hibernate优化起来相对MyBitas较难。
  2. MyBitas入门较快,而Hibernate掌握起来相对较难。
  3. 针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。
  4. Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

3.3 总结:

SSH很笨重,现在除了一些老系统,很少有人使用SSH了,SSM则是现在的主流,当前还有SpringBoot,SpringCloud微服务这些。

参考:

https://www.cnblogs.com/ysocean/p/7375405.html

https://blog.csdn.net/horero/article/details/54236833

SpringMVC映射的前端后台数据交互总结:https://blog.csdn.net/xiansky2015/article/details/79050772

基于注解的入门实例:https://www.cnblogs.com/ysocean/p/7400987.html

转载于:https://www.cnblogs.com/scuwangjun/p/9583339.html

你可能感兴趣的文章
找工作的一些感悟——前端小菜的成长
查看>>
C#委托和事件的应用Observer模式实例
查看>>
Microsoft Dynamics 365 之 味全食品 项目分享和Customer Engagement新特性分享
查看>>
php重定向http请求
查看>>
codevs1018 单词接龙(DFS)
查看>>
内容分发系统MediaEW:助新闻媒体转投HTML5
查看>>
HTML5 Canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
查看>>
Stanford Local Programming Contest 2011
查看>>
Sql server锁,独占锁,共享锁,更新锁,乐观锁,悲观锁
查看>>
关于javascript dom扩展:Selector API
查看>>
多线程中,NSOperationQueue和GCD的区别
查看>>
python生成.exe文件
查看>>
STM32,你了解多少?(转载)
查看>>
用anaconda保证64位和32位的python共存
查看>>
cPanel设置自定义404错误页
查看>>
16.垃圾最小化
查看>>
ROS time stamp and sync
查看>>
将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程
查看>>
遍历聚合对象中的元素——迭代器模式(四)
查看>>
Ehab and subtraction(思维题)
查看>>