eclipse手动pom本地包_Spring MVC系列教程—01—MVC概要与环境配置(IDea与Eclipse)

关注我,本系列将持续更新

目录

  • 一、MVC概要
  • 二、Spring MVC介绍
  • 三、第一个Spring MVC 项目:Hello World(Eclipse版)
    • 3.1、通过Maven新建一个Web项目
    • 3.2、添加依赖的jar包
    • 3.3、修改web.xml注册中心控制器DispatcherServlet
    • 3.4、添加Spring MVC配置文件
    • 3.5、创建HelloWorld控制器
    • 3.6、创建视图
    • 3.7、测试运行
  • 四、第一个Spring MVC 项目:Hello World(IDEA)
    • 4.1、在IDEA中使用Maven根据WebApp骨架创建一个项目
    • 4.2、添加依赖的jar包
    • 4.3、修改web.xml注册中心控制器DispatcherServlet
    • 4.4、添加Spring MVC配置文件
    • 4.5、创建HelloWorld控制器
    • 4.6、创建视图
    • 4.7、配置TomCat部署项目
    • 4.8、测试运行
  • 五、设置引导页
    • 5.1、方法一
    • 5.2、方法二
  • 六、示例下载
  • 七、视频
  • 八、作业

一、MVC概要

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。

e68c09b642eb64c3f503098fefdfcb15.png

在web早期的开发中,通常采用的都是Model1。Model1中,如图所示主要分为两层,视图层和模型层。Model2把一个项目分成三部分,包括视图、控制、模型。这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。Model2消除了Model1的缺点。

915ab74a608e630461bc68410a26edc5.png

Model1

3a9ea309c0107bd571f23edb44a03e17.png

Model1 的时序图

be7150dfc694c3819727ba52b3d07b16.png

Model2

ba5a0feff4ff5184bc5c6ea4a8483cf5.png

Model2的时序图

1、Model1适合小型项目开发,结构简单,开发迅速。但是JSP页面相对复杂,不利于维护。

2、Model2适合大型项目开发,职责明确,而且适应变动的需求,目的是可复用、可扩展、可维护。

3、从模型上和时序图上很容易看出,Model2是在Model1的基础上,分离了控制,将业务逻辑处理分离出来。这样Model2相对来说便于维护。

常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM。

二、Spring MVC介绍

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。Spring MVC的特点:
1、轻量
2、高效
3、与Spring兼容性好
4、功能强大
RESTful、数据验证、格式化、绑定机制、本地化、主题等
5、简洁灵活

a1adfcee7e3e34e7b2c2c1382c44c07d.png

Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。官网上说Spring的web模块提供了大量独特的功能,包括:清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象来实现。

强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。

可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。

可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。

可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。

简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。

JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。

Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。

三、第一个Spring MVC 项目:Hello World(Eclipse版)

3.1、通过Maven新建一个Web项目

在Eclipse中新建Maven项目,选择“Create a simple project”,创建一个简单项目,不选择模板。

76f5406d62246d231b75aa9e36e17017.png

修改层面信息,更加详细的内容请参考前面写过的文章:

260a43f22335acbd8c53c883a9878662.png

将webcontent中的所有内容复制到webapp目录下,并删除webContent目录,删除后的结果如下:

f620f0e7718f059a540c2e6cbf699415.png

修改项目的部署信息,删除测试文件夹,添加webapp为项目根目录:

ecb392b45fd5bb2890e53c2788b27752.png

如果不打算在pom.xml中添加对Server runtime的依赖,则这里必须手动添加依赖,如下图所示:

9eaf8be498e76fdce4dc20ba53ee19ff.png

另外如果pom.xml报错,修改任意位置保存。

3.2、添加依赖的jar包

1、修改pom.xml文件、添加jar包的依赖,主要有:Spring框架核心库、Spring MVC、JSTL等,具体信息如下:

4.0.0com.zhangguo    SpringMVC01    0.0.1warUTF-84.3.0.RELEASEorg.springframework            spring-context            ${spring.version}org.springframework            spring-webmvc            ${spring.version}javax.servlet            jstl            1.2

当依赖成功时,会加载的jar包如下:

dd64ea60391815c75fff8c00f194fbf3.png

3.3、修改web.xml注册中心控制器DispatcherServlet

Spring MVC框架像许多其他MVC框架一样, 请求驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。如下图所示当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

6ab311e3f057d849e221b3a3a0e9a341.png
da36286c44f10afe7da279b6b9a2f2fd.png

修改web.xml文件注册该Servlet,修改后的web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>springmvcorg.springframework.web.servlet.DispatcherServlet1contextConfigLocationclasspath*:springmvc-servlet.xmlspringmvc/ 

3.4、添加Spring MVC配置文件

在src/main/java源代码目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>

在视图解析中我们把所有的视图都存放在/WEB-INF/目录下,这样是为了视图安全,因为这个目录客户端不能直接访问。

mvc:annotation-driven:

在spring中一般采用@RequestMapping注解来完成映射关系,要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例,这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入。

3.5、创建HelloWorld控制器

在src/main/java源代码目录下创建包com.zhangguo.springmvc01.controller,在包下创建一个普通的类:HelloWorld,具体代码如下:

package com.zhangguo.springmvc01.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/Hello")public class HelloWorld {    @RequestMapping("/Sayhi")    public String SayHi(Model model) {        model.addAttribute("message", "Hello Spring MVC!");        return "sayhi";    }}

注解为@Controller是为了让Spring IOC容器初始化时自动扫描到;@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/Hello/Sayhi;方法中声明Model类型的参数是为了把Action中的数据带到视图中;方法返回的结果是视图的名称sayhi。

3.6、创建视图

在WEB-INF/view目录中创建视图,视图将从Action中带回的信息展示,具体内容如下:

Hello Spring MVC!

${message}

3.7、测试运行

启动Tomcat运行项目,请注意查看启动信息,如果有异常应该先解决异常信息,运行成功后的结果如下所示:

e2e08e1f09d8ec020782c3da204a8485.png

四、第一个Spring MVC 项目:Hello World(IDEA)

4.1、在IDEA中使用Maven根据WebApp骨架创建一个项目

在Idea中新建Maven项目,选择“org.apache.maven.archetypes:maven-archetype-webapp”骨架(模板),创建一个Web项目:

b2e10c29ebe7af2e5de007c822468bd7.png

输入项目的坐标:

9409a47153919e0533c8be4c74ccd8cd.png

选择仓库位置与配置信息,建议使用默认设置(先使用IDEA的默认设置将Maven配置好)

1bc8e5c8412b3b1109642d0534a69632.png

设置项目位置,完成即可

9a138cb1fe4d3f5917c0074595793614.png

初始化的项目如下:

fdf98c40594161ac37aeb65cca238b11.png

根据Maven规范,需要创建源代码、资源与测试目录:

a1f873ec5bc3301a790c9222cb73c521.png

在main上右键创建java目录、resources目录,创建与main平级的test测试目录:

f700222400e48cda6802f90f7d273b82.png

设置目录的特殊属性:

eb1e772e1bdbcab0c70103c180edff2b.png

设置完成后的结果:

85e1444facfefb7ea7973180c99ab2da.png

4.2、添加依赖的jar包

1、修改pom.xml文件、添加jar包的依赖,主要有:Spring框架核心库、Spring MVC、JSTL等,具体信息如下:

<?xml version="1.0" encoding="UTF-8"?>4.0.0com.zhangguo.springmvc01  SpringMVC01  1.0-SNAPSHOTwarSpringMVC01 Maven Webapphttp://www.example.comUTF-81.71.74.3.0.RELEASEjunit      junit      4.11testorg.springframework      spring-context      ${spring.version}org.springframework      spring-webmvc      ${spring.version}javax.servlet      javax.servlet-api      3.0.1providedjavax.servlet      jstl      1.2SpringMVC01          maven-clean-plugin          3.0.0          maven-resources-plugin          3.0.2          maven-compiler-plugin          3.7.0          maven-surefire-plugin          2.20.1          maven-war-plugin          3.2.0          maven-install-plugin          2.5.2          maven-deploy-plugin          2.8.2

当依赖成功时,会加载的jar包如下:

3f393475d668b14566032d861b08c4d1.png

4.3、修改web.xml注册中心控制器DispatcherServlet

Spring MVC框架像许多其他MVC框架一样, 请求驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。如下图所示当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

6ab311e3f057d849e221b3a3a0e9a341.png
da36286c44f10afe7da279b6b9a2f2fd.png

Spring MVC中心控制器的源码如下:

e6078628509d51453f896ace7fc9b9e5.gif

View Code

继承与依赖关系如下:

df03b67ce7294bea679c301ff7fd0455.png

修改web.xml文件注册该Servlet,修改后的web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>springmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath*:springmvc-servlet.xml1springmvc/

4.4、添加Spring MVC配置文件

在resource目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>

在视图解析中我们把所有的视图都存放在/WEB-INF/目录下,这样是为了视图安全,因为这个目录客户端不能直接访问。

4.5、创建HelloWorld控制器

在src/main/java源代码目录下创建包com.zhangguo.springmvc01.controller,在包下创建一个普通的类:HelloWorld,具体代码如下:

package com.zhangguo.springmvc01.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/**控制器*/@Controller@RequestMapping("/hello")public class HelloController {    /**动作,action*/    @RequestMapping("/hi")    public String hi(Model model){        //向模型中添加属性msg与值,将与页面模板渲染后输出        model.addAttribute("msg","Hello Spring MVC!");        return "hi";    }}

注解为@Controller是为了让Spring IOC容器初始化时自动扫描到;@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/hello/hi;方法中声明Model类型的参数是为了把Action中的数据带到视图中;方法返回的结果是视图的名称hi,加上配置文件中的前后缀变成WEB-INF/view/hi.jsp。

4.6、创建视图

在WEB-INF/view目录中创建视图,hi.jsp视图将从Action中带回的信息展示,具体内容如下:

    ${msg}

${msg}

4.7、配置TomCat部署项目

点击右上角的Edit Configurations添加对tomcat的配置:

650d1dc9a7ea0a544a85a5c96684dd29.png

添加对tomcat的配置,设置名称,添加Deployment

1f90b4af8892cd73509e0731d124343c.png

可以设置context也可以没有,类似虚拟目录

ed2b9c6f551bd39e0b897205284ab07d.png

4.8、测试运行

启动Tomcat运行项目,请注意查看启动信息,如果有异常应该先解决异常信息,运行成功后的结果如下所示:

17d04a8200e6ec079ae605bc8743decf.png

五、设置引导页

使用了spring mvc如果想直接访问控制器下的某个action为引导页,可以通过如下方式实现:

5.1、方法一

删除index.jsp默认引导文件

定义一下Home控制器,如下所示:

package com.zhangguo.springmvc01.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/**控制器*/@Controller@RequestMapping("/")public class HomeController {    /**动作,action*/    @RequestMapping("")    public String index(Model model){        //向模型中添加属性msg与值,将与页面模板渲染后输出        model.addAttribute("msg","Welcome my website!");        return "hi";    }}

结果:

b3844f8b5e183b71777d2700239b8e32.png

5.2、方法二

修改Spring MVC配置文件,增加如下配置:

        

action如下:

package com.zhangguo.springmvc01.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/**控制器*/@Controller@RequestMapping("/hello")public class HelloController {    /**动作,action*/    @RequestMapping("/hi")    public String hi(Model model){        //向模型中添加属性msg与值,将与页面模板渲染后输出        model.addAttribute("msg","Hello Spring MVC!");        return "hi";    }    /**动作,action*/    @RequestMapping("")    public String index(Model model){        //向模型中添加属性msg与值,将与页面模板渲染后输出        model.addAttribute("msg","Index Page!");        return "hi";    }}

访问结果:

093f4c6ad52801f55f481a9f75a2aba0.png

注意这种方法是使用的重定向方式,需发起两次请求,尽量转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值