SpringMVC简例HelloWorld~

来源:互联网 发布:多益网络客服电话 编辑:程序博客网 时间:2024/06/10 10:47

  由于SpringMVC的内容太宽泛,太大了,所以这里就先写个小demo,可以讲一些简单的东西,不影响使用,又不用讲解的太过详细、深究过深。
  那么,就开始吧~
  这里只讲例子,不讲太深的原理,那些会在另一篇开讲。
  下面直接看一下这个小demo吧。

前期准备

  建立SpringMVC项目是需要一些准备的,不是一下子就可以完成的哦~
  首先我们先看一下如何创建一个web项目,因为SpringMVC是构建web项目的,所以我们需要一个像样的web模板。
  下面是在IDEA中操作:
  这里写图片描述
  后面就简单了,不说了,只要注意模板问题就行。
  
  之后项目结构图是这个样子的
  这里写图片描述

  然后,我们就可以准备大展手脚了,但是首先需要配置pom文件
  

<!-- Spring dependencies -->    <!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>4.1.4.RELEASE</version>    </dependency>    <!-- http://mvnrepository.com/artifact/org.springframework/spring-web -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>4.1.4.RELEASE</version>    </dependency>    <!-- http://mvnrepository.com/artifact/org.springframework/spring-webmvc -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>4.1.4.RELEASE</version>    </dependency>

  因为项目比较简单,所以只引用了几个jar包,这个需求随项目的扩展而扩展。
  
  为了项目可以运行我们需要配置web容器,这里就配置最常用的Tomcat了:
  
  这里写图片描述

这里写图片描述

这里写图片描述


开始撸代码

  然后看一下我的真正的项目结构图吧:
  这里写图片描述

  首先,这两个文件就是最愁人的配置文件,可能在以后的SpringMVC的学习中,最让你头痛的就是这些配置文件了,不过不要害怕,征服了它们,你就基本能够应付绝大多数SpringMVC的项目了。
  而这个项目结构基本就是一个标准的mavenWeb项目,可能少了一个test文件夹,不过对于我们不影响。
  还是老规矩,先贴代码,然后我再慢慢讲。
  
web.xml

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app>  <display-name>Archetype Created Web Application</display-name>  <servlet>    <servlet-name>springMVC</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:spring-mvc.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>springMVC</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping></web-app>

spring-mvc.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:p="http://www.springframework.org/schema/p"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context-4.1.xsd      http://www.springframework.org/schema/mvc      http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">    <context:component-scan base-package="Controller"/>    <mvc:annotation-driven/>    <mvc:default-servlet-handler/>    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix">            <value>/WEB-INF/jsp/</value>        </property>        <property name="suffix">            <value>.jsp</value>        </property>    </bean></beans>

  然后是Controller
  

package Controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * Created by yubotao on 2017/09/28. */@Controllerpublic class HelloController {    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String getHW(){        return "hello";    }}

最后是我们测试用的页面
hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>    <meta http-equiv="Content-Type" content="text/html; charset= UTF-8">    <title>Success!</title></head><body><h4>Success Page</h4></body></html>

运行后结果就是这样的:
这里写图片描述

简单讲解

  这里划重点了,这里的url是和我们Controller中的代码有对应关系的:
  @RequestMapping(value = "/hello",method = RequestMethod.GET)
  可以看到,这里url和我们的@RequestMapping的value值是相同的,而method里对应的是相关方法,至于是怎么回事,百度REST风格,了解REST你应该就会明白为什么这么写了,这里不展开。
  而return "hello";中,hello恰好就是我们jsp页面的名字,那Controller是如何通过相应的String找到对应的jsp的呢?
  关键点在我们的spring-mvc.xml配置文件中:
  

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

  这部分叫做视图解析器,它的具体原理这里简单的提一下,就是它将Controller中的String进行拼接,我们可以看到它配置了两个属性,分别是prefix前缀以及suffix后缀,Controller中的hello经过这个InternalResourceViewResolver类处理后,就变成了/WEB-INF/jsp/hello.jsp,这样我们的SpringMVC就找到对应的jsp页面啦~
   所以我们看到的内容就是hello.jsp中的内容。
  这样Controller中就只有一个@Controller注解了,这个就是标记,告诉SpringMVC我是Controller,然后就做它该做的事了,不然SpringMVC会限制它,如果我们没有Controller,我们的web项目是没有办法工作的。

  接下来就重点讲解这两个配置文件,先看之前已经讲过一部分的spring-mvc.xml,还剩一点内容:

    <context:component-scan base-package="Controller"/>    <mvc:annotation-driven/>    <mvc:default-servlet-handler/>

  文件头的内容我们跳过,只看着三个标签。
  第一个标签是开启自动扫描注解的作用,即我们所配置的包内所有注解都会在SpringMVC中进行注册,因为我们只有一个Controller包,且里面只有一个HelloController类,而它恰好有一个注解@Controller,所以这个标签的作用就是开启@Controller注解的。
  

第二个标签,相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。

  第三个标签是用来开启静态资源的,虽然我们项目中没有使用到,但是,这个是常用标签,所以我给加上了,和它有同等作用的还有这个标签<mvc:resources mapping="" location=""/>这个标签使用映射来使用静态资源,这里只讲用处,如果需要详细了解它们的工作原理,请百度。

  再看最后这个配置文件web.xml,这个是选完模板自带的,可以看出它的重要性了吧~
  首先提一点,在web.xml中我们可以配置拦截器,过滤器,监听器,taglib配置等,但是这里我不希望塞太多东西,所以只把最简单和最必要的拦截器配置放在里面了,其他类似监听器读取其余配置文件、过滤器解决乱码问题以及POST和DELETE方法无法使用等问题、自定义taglib配置这里不展开,感兴趣或者需要的朋友请自行百度。
  回到我们的配置,可以分成两块,先看第一块:

<servlet>    <servlet-name>springMVC</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:spring-mvc.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>

  最重要的Servlet配置就是它了,最关建的DispatcherServlet也在这里,请不明就里的朋友自行百度Servlet是干嘛的。
  

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置springMVC的第一步。

  感觉说的比较清楚了,就不解释了;而这里说的拦截匹配规则就是在这个属性中定义的:
  

    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:spring-mvc.xml</param-value>    </init-param>

  可以看到这里使用了我们的spring-mvc.xml配置文件;classpath代表resource文件夹下文件的路径。<load-on-startup>这个标签是定义优先级的,就是我们使用的Servlet的顺序,因为有可能不止使用一个DispatcherServlet就完事了,可能有多个Servlet,这时候就可以使用这个标签排序了。
  
  第二块:

  <servlet-mapping>    <servlet-name>springMVC</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>

  这块和第一块是有对应关系的,当你定义了一个<servlet>时,就要对应一个<servlet-mapping>,而且它们的<servlet-name>是相同的。最后的标签<url-pattern>是相应的url拦截规则,正如它的直译:url的模式;这里使用“/”代表了匹配所有规则,当然你可以有一些特定的匹配规则,但是现阶段你可能是用不到的,如果需要使用的时候,就到这里来找吧:点这里,不会怀孕

总结

  到这里,我们就把这个简单的demo讲完了,我们回顾一下这个SpringMVC的工作流程。当我们在网址栏处填写相应的url时,请求被转发到Controller接口中,我们通过“/hello”找到对应的接口方法:

    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String getHW(){        return "hello";    }

  然后执行方法中的代码,这里返回了一个String,”hello”,再通过InternalResourceViewResolver视图解析器拼接前后缀,然后就可以在WEB-INF的jsp文件夹下找到对应的jsp页面/WEB-INF/jsp/hello.jsp,最后通过SpringMVC的视图渲染返回给我们一个我们想要的页面。当然这些一系列动作都是在DispatcherServlet的配置完成的情况下才完成的,所以说它的配置是第一步。
  
  
  

最后感谢听我巴拉巴拉讲了这么多,可能这里面有一些不严谨的地方或者错误,请各位不吝赐教。

原创粉丝点击