spring学习程序员我爱编程

Spring学习手册(15)—— Hello Spring MV

2017-04-15  本文已影响256人  泽_渊

目前为止我们通过Sprint学习手册系列,学习了Spring核心框架技术: IOCAOP技术,同时我们学习了如何在Spring框架体系下整合mybatis数据持久框架和log4j2日志框架。通过这些学习和实践,我们已经可以使用Spring核心框架完成JAVA后台服务开发工作。本文我们学习Spring MVC框架的使用入门。

一、 创建Web项目

本文依然使用IDEA创建WEB项目,使用旗舰版(官网提供30天试用版)可以直接创建web项目,当然我们也可以使用社区版创建项目然后修改相应配置。若安装的为社区版,建议直接下载文末提供的工程示例,在此工程基础上进行编写自己的代码。
我们在HelloSpring一文中比较详细的介绍了IDEA创建Gradle工程的步骤,若有疑惑可在此查看此文。IDEA创建WEB项目需要注意的是我们需要勾选Web选项,如下图所示:

创建Web项目
这样完成项目创建后,IDEA会自动创建webapp目录并设置好build.gradle文件。

二、增加依赖jar包

我们的项目需要增加spring-mvcspring-webmvc两个jar包的依赖,增加完成,build.gradle文件内依赖关系配置如下:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'org.springframework:spring-webmvc:4.3.6.RELEASE'
    compile 'org.springframework:spring-web:4.3.6.RELEASE'
    compile 'org.springframework:spring-core:4.3.6.RELEASE'
}

项目工程目录下运行如下命令

gradle build

或等待IDEA自动下载并加载解析相关依赖jar包。

三、Spring MVC基础知识

Spring MVC(model-view-controller)框架围绕着DispatcherServlet进行设计,该Servlet将请求转发给相应的控制器,然后使用控制器处理后的模型进行视图渲染。像大多数MVC框架一样,它很好的将业务逻辑和视图解耦,除此之外,它还完美的支持Spring核心框架技术:IOC和AOP,在Spring MVC框架中你可以像简单的通过配置使用Spring的IOC和AOP技术。
Spring 3.0以后,提供了@Controller@RequestMapping等注解的方式来完成控制器的定义等工作,这使开发更加简便。

Servlet内部逻辑流转

四、Hello Spring MVC实战

配置DispatcherServlet(定义web.xml)

webapp/WEB-INF文件夹下(若不存在WEB-INF文件夹则创建)下创建web.xml文件,文件配置如下:

<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>Spring MVC Application</display-name>


    <servlet>
        <servlet-name>HelloWeb</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWeb</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

如上所示,我们使用<servlet>标签配置DispatcherServlet并且使用<servlet-name>标签为该servlet命名为HelloWeb。接下来我们使用<servlet-mapping>标签为该servlet配置映射关系,如上所示,所有路径以/开始的都会被名为HelloWeb的servlet进行处理。

定义HelloWeb-servlet.xml文件

我们在web.xml文件里定义了名为HelloWeb的servlet,Spring MVC框架启动是会初始化该Servlet,默认情况下框架使用[servlet-name]-servlet.xml的文件格式查找该servlet的配置信息。为简便起见,我们使用该约束方式创建HelloWeb-servlet.xml并配置,该文件内容如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.liangwei.learning" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

如上所示,该配置文件与以前学习到的Spring配置文件相同,这里值得一提的是,Spring 3.0 增加了@Controller等注解,使得我们可以直接使用注解的方式进行定义配置控制器,而Spring MVC也提供一种配置方式,使得Spring MVC在加载时自动扫描所有有@Controller@RequestMapping注解的类,并将其注册为控制器(bean)。我们使用该配置<context:component-scan base-package="com.liangwei.learning" />,并制定base-package,框架会自动在该包名下扫描并注册控制器。
除上述配置外,我们需要配置为该Servlet配置ViewResolver,这里我们使用InternalResourceViewResolver,并且配置前缀为/WEB-INF/jsp/,后缀为.jsp,这样当控制器返回一个hello的String类型实例时,框架会将其解析为/WEB-INF/jsp/hello.jsp,然后查找该视图文件并使用渲染器渲染视图。

定义控制器(HelloController)

前面我们定义了Servlet并且完成了其配置工作,接下来我们定义一个控制器:HelloController:

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping(method = RequestMethod.GET)
    public String printHello(ModelMap model) {
        model.addAttribute("message", "Hello Spring MVC Framework!");
        return "hello";
    }
}

如上所示,我们使用@Controller注解注解HelloController,由于我们前面已经配置了<context:component-scan>标签,框架会自动扫描并注册控制器。我们使用@RequestMapping注解并设置"/hello"值,这是的所有的请求路径为/hello的请求被分发到该控制器。这里我们将@RequestMapping路径设置在类上,当然我们也可以将该注解设置在具体方法上,我们会在后面的文章讲解它们之间的区别。我们的控制器类提供了printHello方法,该方法签名拥有一个ModelMap类型参数,并且返回String类型值。该方法使用@RequestMapping(method = RequestMethod.GET)设置只接受GET方法。这样的配置使得我们的控制器会接受/hello路径的GET请求。

定义视图文件hello.jsp

我们配置好了Servlet,且定义了控制器,接下来我们需要配置视图文件hello.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

该文件存储在/WEB-INF/jsp路径下,命名为hello.jsp:这跟我们前面的HelloWeb-servlet.xml的配置有关。该文件为简单的JSP视图文件,它会从模型中获取名为message的信息,并交给渲染器进行渲染。

以上我们就完成了Hello Spring MVC项目的开发和配置工作。接下来我们需要学习如何将它部署在Tomcat服务上并通过浏览器访问。

五、部署到Tomcat

安装配置Tomcat

本文非Tomcat学习文章,所以这里我们只简单介绍如何安装和配置Tomcat。我们可以直接访问官网查找下载相应版本。该项目我使用的是Tomcat9.0版,在该页面下下载Core下的.zip包,当然如果你是windows环境可下载相应版本。下载完成后我将其解压到~/Library/Tomcat9/目录下,然后将该路径设置到Path路径下:

export PATH=$HOME/Library/Tomcat9/bin:$PATH

作者使用的是zsh,因此该命令配置在~路径下的.zshrc文件内,如果读者使用不同的shell或使用windows平台需使用相应设置方式。
这样我们就完成了Tomcat的安装和简单配置。这个时候我们进入~/Library/Tomcat9/目录,使用如下命令可以看到tomcat启动信息。

startup.sh

我们可以使用shutdown.sh来关闭服务。

Tip :在Unix或Linux系统情况下,可能出现无法启动,此时需要使用如下命令修改文件权限
chmod 755 ~/Library/Tomcat9/bin/*.sh

IDEA 部署项目设置

选择Run/EditConfigurations打开配置页面:

打开配置项
将弹出如下图所示结果:
配置页面
点击+号,选择Tomcat Server/Local,将弹出如下配置页面:
配置Tomcat
我们首先为该配置命名为HelloSpringMVC,然后点击Configure设置Tomcat根目录。这个时候你会发现右下角有一个红色Fix按钮,点击它,选择将要部署的war包,页面会跳转到Deployment选项卡:
Deployment
在Application context配置上/HelloSpringMVC ,点击OK,完成配置。这样我们的项目根目录将为localhost:8080/HelloSpringMVC

启动项目

回到IDEA工程目录下,点击绿色按钮将启动项目并将项目war包部署到Tomcat,控制台会输出启动日志,稍等一会项目启动完成。


启动项目

访问项目

启动浏览器,将http://localhost:8080/HelloSpringMVC/hello输入到地址栏,我们将看到如下界面:

HelloSpringMVC访问结果

恭喜你,你已经完成了helloSpringMVC项目的开发和部署工作。

直接部署到Tomcat安装目录

除了上述部署方式外,我们可以直接将war包拷贝到~/Library/Tomcat9/webapps/目录下,然后启动Tomcat服务器,服务器会自动将war包解压。如HelloSpringMVC.war 包,会被解压~/Library/Tomcat9/webapps/HelloSpringMVC目录下,此时我们可以使用localhost:8080/HelloSpringMVC/hello来访问,其中HelloSpringMVC为解压后的名字。另外我们可以在工程build/libs目录下找到编译好的war包。

六、总结

本文我们学习了Spring MVC框架的实用,通过实战的方式定义Servlet、配置Servlet、定义Controller和定义视图文件完成HelloSpringMVC项目的开发,最后我们通过使用IDEA部署和直接Tomcat部署的方式完成项目的部署。这样我们就完成了一个最简单的Spring MVC项目,通过HelloSpringMVC项目我们踏入了Spring MVC框架的大门。

项目源码地址

上一篇下一篇

猜你喜欢

热点阅读