zoukankan      html  css  js  c++  java
  • 如何用Java类配置Spring MVC(不通过web.xml和XML方式)

    DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servlet 3规范和Spring 3.1的功能增强, 可以采用一种全新的,更简洁的方式配置Spring MVC了. 下面按这种方式一个Hello World的MVC配置.

    Step 1:先用eclipse创建一个Maven的WEB工程. pom.xml文件如下:

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     2   <modelVersion>4.0.0</modelVersion>
     3   <groupId>ocr</groupId>
     4   <artifactId>ocr</artifactId>
     5   <version>0.0.1-SNAPSHOT</version>
     6   <packaging>war</packaging>
     7 
     8     <properties>
     9         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    10         <javaee-api.version>7.0</javaee-api.version>
    11         <spring.version>4.2.0.RELEASE</spring.version>
    12         <junit.version>4.12</junit.version>
    13     </properties>
    14 
    15     <dependencies>
    16          <dependency>
    17               <groupId>javax</groupId>
    18               <artifactId>javaee-api</artifactId>
    19               <version>${javaee-api.version}</version>
    20         </dependency>
    21         <dependency>
    22                 <groupId>junit</groupId>
    23                 <artifactId>junit</artifactId>
    24                 <version>${junit.version}</version>
    25         </dependency>
    26         <dependency>
    27             <groupId>org.springframework</groupId>
    28             <artifactId>spring-context</artifactId>
    29             <version>${spring.version}</version>
    30         </dependency>
    31         <dependency>
    32             <groupId>org.springframework</groupId>
    33             <artifactId>spring-aop</artifactId>
    34             <version>${spring.version}</version>
    35         </dependency>
    36         <dependency>
    37             <groupId>org.springframework</groupId>
    38             <artifactId>spring-webmvc</artifactId>
    39             <version>${spring.version}</version>
    40         </dependency>
    41         <dependency>
    42             <groupId>org.springframework</groupId>
    43             <artifactId>spring-web</artifactId>
    44             <version>${spring.version}</version>
    45         </dependency>
    46 
    47         <dependency>
    48             <groupId>javax.servlet</groupId>
    49             <artifactId>jstl</artifactId>
    50             <version>1.2</version>
    51         </dependency>
    52 
    53         <dependency>
    54             <groupId>commons-logging</groupId>
    55             <artifactId>commons-logging</artifactId>
    56             <version>1.1.3</version>
    57         </dependency>
    58     </dependencies>
    59 
    60 
    61     <build>
    62         <plugins>
    63             <plugin>
    64                 <artifactId>maven-compiler-plugin</artifactId>
    65                 <version>3.3</version>
    66                 <configuration>
    67                     <source>1.7</source>
    68                     <target>1.7</target>
    69                 </configuration>
    70             </plugin>
    71             <plugin>
    72                 <artifactId>maven-war-plugin</artifactId>
    73                 <version>2.6</version>
    74                 <configuration>
    75                     <warSourceDirectory>WebContent</warSourceDirectory>
    76                     <failOnMissingWebXml>false</failOnMissingWebXml>
    77                 </configuration>
    78             </plugin>
    79         </plugins>
    80     </build>
    81 </project>

    Step 2: 配置DispatcherServlet. 需要创建一个Web初始化类OcrWebAppInitializer, 继承自AbstractAnnotationConfigDispatcherServletInitializer

     1 package com.chry.ocr.config;
     2 
     3 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
     4 
     5 public class OcrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
     6 
     7     @Override
     8     protected Class<?>[] getRootConfigClasses() {
     9         return new Class<?>[] { RootConfig.class };
    10     }
    11 
    12     @Override
    13     protected Class<?>[] getServletConfigClasses() {
    14         return new Class<?>[] { WebConfig.class };        //ָ指定Web配置类
    15     }
    16 
    17     @Override
    18     protected String[] getServletMappings() {    //将DispatcherServlet映射到"/"
    19         return new String[] { "/" };
    20     }
    21 
    22 }

    Step 3: 配置Spring MVC视图解析WebConfig.java, 需要要创建一个类继承自WebMvcConfigurerAdapter

     1 package com.chry.ocr.config;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.web.servlet.ViewResolver;
     7 import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
     8 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
     9 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    10 import org.springframework.web.servlet.view.InternalResourceViewResolver;
    11 
    12 @Configuration
    13 @EnableWebMvc                                //启动SpringMVC
    14 @ComponentScan("com.chry.ocr.controller")            //启动组件扫描
    15 public class WebConfig extends WebMvcConfigurerAdapter {
    16 
    17     //配置JSP视图解析器
    18     @Bean
    19     public ViewResolver viewResolver() {
    20         InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    21         resolver.setPrefix("/WEB-INF/views/");
    22         resolver.setSuffix(".jsp");
    23         resolver.setExposeContextBeansAsAttributes(true);
    24         return resolver;
    25     }
    26     
    27     //配置静态资源的处理
    28     @Override
    29     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    30         configurer.enable();        //对静态资源的请求转发到容器缺省的servlet,而不使用DispatcherServlet
    31     }
    32     
    33 }

    Step 4: 配置RootConfig.java

     1 package com.chry.ocr.config;
     2 
     3 import org.springframework.context.annotation.ComponentScan;
     4 import org.springframework.context.annotation.ComponentScan.Filter;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.context.annotation.FilterType;
     7 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
     8 
     9 @Configuration
    10 @ComponentScan( basePackages={"com.chry.ocr"}, 
    11                 excludeFilters = { @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)}
    12               )
    13 
    14 public class RootConfig {
    15 
    16 }

    至此, 传统方式中需要通过web.xml进行配置的东西就已将全部完成有上面三个java类(OcrWebAppInitializer, RootConfig, WebConfig)完成. 可以开始写Controller和页面代码了

    Step 5: 编写一个HomeController.java, 它将输出"hello World from Spring MVC"到home.jsp页面

     1 package com.chry.ocr.controller;
     2 
     3 import static org.springframework.web.bind.annotation.RequestMethod.*;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RequestMethod;
     7 import org.springframework.web.servlet.ModelAndView;
     8 
     9 @Controller
    10 public class HomeController {
    11     @RequestMapping(value = "/", method=GET)
    12     public ModelAndView home() {
    13         String message = "Hello world from Spring MVC";
    14         return new ModelAndView("home", "message", message);
    15     }
    16 }

    Step 6: 编写一个jsp页面, 按照我们在视图解析器和Controller里面的配置,放在WEB-INF/views/home.jsp中

     1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     3 <html>
     4 <head>
     5 <title>Spring MVC Tutorial chry</title>
     6 <style type="text/css">
     7 </style>
     8 </head>
     9 <body>
    10     <br>
    11     <div style='text-align:center;'>
    12         ${message}
    13     </div>
    14 </body>

    Step 7: 至此所有工作完成, 使用maven的"clean install"选项进行编译打包后,在执行,访问http://localhost:8080即可. 页面效果和工程结构如下,工程里面没有web.xml

  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/chry/p/6239510.html
Copyright © 2011-2022 走看看