美文网首页
基于注解的SpringMVC HelloWorld示例

基于注解的SpringMVC HelloWorld示例

作者: 吃不胖的茶叶蛋 | 来源:发表于2017-09-02 17:15 被阅读35次

系统环境:

  • Jdk 1.8
  • IntelliJ IDEA 2016.3.7
  • Maven 3.3.9

使用IDEA创建mvc-annotation-demo模块(点击+)

1.png

填写groupId,artifactId。接下来就是Next--Next,到这里 不需要在手动配置了

2.JPG

点击Finish,然后等待Maven编译好后,目录结构如图所示:

3.JPG
  1. 添加web-mvc依赖
 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.10.RELEASE</version>
 </dependency>

和 servlet-api依赖(AbstractAnnotationConfigDispatcherServletInitializer会依赖这个jar包)

<dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
</dependency>
  1. 添加plugins(和xml中的一样)
<build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.2</version>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.4</version>
          <configuration>
            <warSourceDirectory>src/main/webapp</warSourceDirectory>
            <warName>mvc-annotation</warName>
            <failOnMissingWebXml>false</failOnMissingWebXml>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <finalName>mvc-annotation</finalName>
 </build>

编写基于注解的配置文件

  1. com.twx.config.SpringWebInitializer.java
package com.twx.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * /**
 * 扩展了AbstractAnnotationConfigDispatcherServletInitializer的类会自动配置DispatcherServlet和Spring应用上下文
 * @author c00284934
 *
 */
public class SpringWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 返回带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean
     * ContextLoaderListener加载的bean通常是驱动应用后端的中间层和数据层组件
     *  对应于 xml 配置中的 applicationContext.xml
     */
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootConfig.class};
    }

    /**
     * 带有@Configuration注解的类会用来定义为DispatcherServlet应用上下文中的bean,
     * 对应于xml配置中的 dispacther-servlet.xml
     */
    protected Class<?>[] getServletConfigClasses() {
        /**
         * 当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件中所声明的bean
         */
        return new Class<?>[]{WebConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"}; //将DispatcherServlet映射到“/”
    }
}

注意:现在还没创建RootConfig.java 和 WebConfig.java。这两个文件的作用相当与xml配置中的 applicationContext.xml 和 dispacther-servlet.xml。而 SpringWebInitializerSpringWebInitializer.java则相当于 web.xml。
我在代码中的注解也有说明。

OK,接下来创建WebConfig.java(dispacther-servlet.xml)

  1. WebConfig.java
/**
 * 对应于xml配置中的 dispacther-servlet.xml
 */
@Configuration
@EnableWebMvc    //启用SpringMVC  <mvc:annotation-driven />
@ComponentScan(basePackages="com.twx")   //启用组件扫描  <context:component-scan base-package="com.twx"/>
public class WebConfig extends WebMvcConfigurerAdapter{

    /**
     * 对应于 <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
     * @return
     */
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置视图解析器
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
//        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    /**
     * 对应于 <mvc:default-servlet-handler/>
     * @param configurer
     */
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) { //配置静态资源的处理
        //我们要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,而不是使用DispatcherServlet本身来处理此类请求
        configurer.enable();
    }

}

注解已经写的很明白了。

  1. RootConfig.java
package com.twx.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

/**
 *  排除扫描  使用@EnableWebMvc 和 @Controller 注解的类
 */
@Configuration
@ComponentScan(basePackages={"com.twx"},
        excludeFilters={
                @ComponentScan.Filter(type= FilterType.ANNOTATION,value=EnableWebMvc.class),
                @ComponentScan.Filter(type= FilterType.ANNOTATION,value=Controller.class)})
public class RootConfig {

}

OK。到现在我们完成了全部的配置文件的创建(web.xml dispacther-servlet.xml applicationContext.xml)

接下来,创建真正的可访问的Controller

  1. com.twx.controller.HelloWorldController.java
package com.twx.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Created by twx on 2017/8/30.
 */
@Controller
@RequestMapping("/")
public class HelloWorldController {

    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        System.out.println("index");
        return "index";
    }

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

因为我们在WebConfig中配置的是/WEB-INF/views/ 和 .html
所以我们需要在 WEB-INF/views下创建index.html home.html

最后的目录结构如图所示:

4.JPG

部署运行

  1. 使用maven编译
5.JPG
  1. 删除 webapp/index.jsp文件

  2. 部署到tomcat

6.JPG 7.JPG 8.JPG 9.JPG

相关文章

网友评论

      本文标题:基于注解的SpringMVC HelloWorld示例

      本文链接:https://www.haomeiwen.com/subject/wksrjxtx.html