基于xml和注解搭建SpringMvc项目

Java应用主要以企业级Web应用为主,其中使用最广泛的Web框架主要有Struts2、Springmvc,Webflux等,当前市场主要以Springmvc为主,搭建一个Springmvc项目对于一个后端Java程序员来说是一门必须课;搭建Springmvc应用主要有两种方式,基于xml和注解,其中注解的方式是Servlet 3.0之后推荐使用的方式,对spring的版本最低要求为4.2,由于公司一直使用springboot构建web项目,最近在整理Springmvc相关知识的时候,发现自己已经快忘了如何使用最原始的springmvc,特此记录一下,两种方式的搭建流程,以便实时回顾。

一、xml方式

  (1) 使用maven搭建一个pom工程作为父工程,对子模块做一个依赖管理

(2)创建子模块工程

使用maven构建好工程之后,此时还缺少源码,配置文件,测试代码目录,这些我们可以手动建立,然后对文件夹进行标记,建立对应的包目录结构,java->Sources,resources->Resources,test->Tests

(3)添加springmvc所需的相关依赖

<dependencies>
        <!--Servlet dependenices-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <--springmvc dependencies-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <--Junit Test dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

(4)添加Springmvc支持,如果没有出现spring相关的选项,可能项目中已经添加了spring相关的支持,可通过Project struct->Facets中进行移除再重新添加,此处因为我在项目的pom工程中已经引入了springmvc相关的依赖,直接选择Use library选择自己导入的即可

(5)配置springmvc,主要是对web.xml和dispatcher-servlet.xml进行配置,项目初始化时在配置文件中写入一些默认值,我们需要进行自定义修改

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--welcome pages-->
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置springmvc DispatcherServlet-->
    <servlet>
      <servlet-name>springMVC</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
        <!--配置dispatcher.xml作为mvc的配置文件-->
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
      <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
      <servlet-name>springMVC</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--把applicationContext.xml加入到配置文件中-->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

dispatcher-servlet.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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--此文件负责整个mvc中的配置-->

    <!--启用spring的一些annotation -->
    <context:annotation-config/>

    <!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
    <mvc:annotation-driven/>

    <!--静态资源映射-->
    <!--本项目把静态资源放在了webapp的statics目录下,资源映射如下-->
    <mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>
    <mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>
    <mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>

    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀,使用JSP-->
    <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/views/"/><!--设置JSP文件的目录位置-->
        <property name="suffix" value=".jsp"/>
        <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>

    <!-- 自动扫描装配 -->
    <context:component-scan base-package="example.controller"/>
</beans>

(6)将项目部署到Tomcat进行测试,如果在启动tomcat时控制台中文出现了乱码,需要到tomcat 的 /conf目录下修改logging.properties文件中,将java.util.logging.ConsoleHandler.encoding = UTF-8 编码改为GBK

至此,基于xml的springmvc搭建完成,后续编码时还可以根据自己需求,对相关配置进行自定义调整

二、注解方式

核心注解@EnableWebMvc,该注解主要用户开启mvc的java配置,@ComponentScan 用户指定bean的扫描路径,加载controller等bean,自定义类继承AbstractAnnotationConfigDispatcherServletInitializer,实现DispatcherServlet的初始化

自定义springmvc配置类,实现WebMvcConfigurer接口,可添加自定义mvc相关组件,如内容协商,消息转换,拦截器等组件,也可以java编码的形式配置之前在dispatcher-servlet.xml配置的相关配置

@EnableWebMvc
@Configuration
@ComponentScan(value = "com.twp.spring")
public class SpringServletConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        //设置视图路径前缀
        viewResolver.setPrefix("/WEB-INF/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setExposeContextBeansAsAttributes(true);
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }
}

初始化DispatcherServlet

public class DispatchServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        //根容器
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        //springmvc容器
        return new Class[]{SpringServletConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        //指定映射路径,从"/"开始
        return new String[]{"/"};
    }
}

在根目录下创建资源文件目录

编写Controller接口

@RestController
public class CustomerController {

    @GetMapping("/enable")
    public ResponseEntity<String> enable(){
        
        return ResponseEntity.ok().body("Hello EnableWebMvc");
    }
}

项目以war包形式打包,部署到Tomcat中,访问接口测试

项目pom文件

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

<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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.twp.spring</groupId>
  <artifactId>springweb-annotation</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>springweb-annotation</name>
  <packaging>war</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <java.version>1.8</java.version>
    <tomcat-maven-plugin.version>2.1</tomcat-maven-plugin.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Servlet Dependencies -->

    <dependency>
      <artifactId>jstl</artifactId>
      <groupId>javax.servlet</groupId>
    </dependency>

    <dependency>
      <scope>provided</scope>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
    </dependency>

    <!-- Webmvc Dependencies -->

    <dependency>
      <artifactId>spring-webmvc</artifactId>
      <groupId>org.springframework</groupId>
    </dependency>

    <!-- Spring Framework Dependencies -->

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <executions>
          <execution>
            <id>tomcat-run</id>
            <configuration>
              <path>/</path>
            </configuration>
            <phase>package</phase>
            <goals>
              <goal>exec-war-only</goal>
            </goals>
          </execution>
        </executions>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>${tomcat-maven-plugin.version}</version>
      </plugin>

    </plugins>
  </build>
</project>

总结:虽然搭建一个工程项目看似简单,但由于平时都是在前辈们已经搭建好的项目下进行代码填充,很少有机会从头搭建项目初始环境,平时学习时多练习一下项目的搭建,也加深一下自己对mvc的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值