Spring MVC工程入门

SpringMVC是一个MVC架构的具体实现,由于其良好的模块解耦和依赖注入等特性,近年来在各大企业运用非常广泛。SpringMVC是一个web框架,它常见的配置是采用xml文件配置,而到了Spring 4中,Spring为我们提供了全Java注解的方式配置,下面就这两种方式作一简介。

一、基于xml的配置,适用于所有Spring版本。

  基于xml配置的SpringMVC结构中,最重要的文件就是web.xml,它一般放置于web(webapp etc.)/WEB-INF目录下:

 1     <!-- 配置servlet,主要是dispatcherServlet和我们自定义的servlet -->
 2     <servlet>
 3         <!-- 配置dispatcherServlet -->
 4         <servlet-name>DispatcherServlet</servlet-name><!-- name可以随意取 -->
 5         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 6         <!-- dispatchServlet的配置文件位置,默认是/WEB-INF/<servletName>-servlet.xml -->
 7         <init-param>
 8             <param-name>contextConfigLocation</param-name><!-- 这里名称固定,大小写都不能改变 -->
 9             <param-value>classpath:spring/spring-mvc.xml</param-value><!-- SpringMVC配置文件位置 -->
10         </init-param>
11         <load-on-startup>1</load-on-startup><!-- 设置servlet加载顺序 -->
12     </servlet>
13 
14     <!-- 配置servlet映射路径 -->
15     <servlet-mapping>
16         <servlet-name>DispatcherServlet</servlet-name><!-- 此处servlet名称就是上面配置的servlet名称 -->
17         <url-pattern>/</url-pattern><!-- 映射路径,就是什么样的请求该它处理,/代表所有 -->
18     </servlet-mapping>

   接下来就是web.xml中提到的spring-mvc.xml配置文件,在本示例中它放在resources/spring目录下:

1     <!-- 自动配置相关的最新的处理器映射器和处理器适配器 -->
2     <mvc:annotation-driven/>
3     <!-- 配置组件扫描 -->
4     <context:component-scan base-package="controller, config"/>
5     <!-- 配置视图解析器,他就是一个普通的spring管理的bean -->
6     <bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
7         <property name="prefix" value="/WEB-INF/jsp/"/><!-- 配置视图前缀,就是前端页面的路径前面一部分 -->
8         <property name="suffix" value=".jsp"/><!-- 配置视图后缀,就是前端页面的后缀名,这里使用jsp页面 -->
9     </bean>

  xml基本配置完成,现在开始写controller:

 1 @Controller
 2 public class HomeController {
 3     @GetMapping({"/", "home"})
 4     public String home(Model model){
 5         //给model添加数据
 6         model.addAttribute("users", "JackCharles");
 7         //返回视图名称,如果视图解析器没有配置前缀和后缀
 8         //则要返回完整名称,如"/WEB-INF/jsp/home.jsp"
 9         return "home";
10     }
11 }

  现在只需要添加好相关前端展示页面,本例中为/web/WEB-INF/jsp/home.jsp,并配置好tomcat即可启动。在IDEA中需检查project-settings中是否有Web Model存在,并确认其web.xml文件路径和web source路径正确。

  最后非常重要的一点,如果你的项目是基于普通的maven工程而不是web工程,一定要在pom.xml头部添加<packaging>war</packaging>,它表示打包方式采用war,默认打包方式为jar,然后重新设置tomcat的Deployment中的artifact为IDEA自动生成的exploded版本(这个坑花费了我整整一天时间,各种404,连controller都进不去,后来才发现是打包方式错了)。

二、基于JAva注解的SpringMVC配置,适用于Spring4.0+版本。

  首先创建maven工程,pom中引入相关依赖,注意<packaging>war</packaging>设置打包方式,由于纯注解形式的web工程没有web.xml,因此我们还需要在pom中进行如下的构建配置:

 1    <build>
 2         <pluginManagement>
 3             <plugins>
 4                 <plugin>
 5                     <groupId>org.apache.maven.plugins</groupId>
 6                     <artifactId>maven-war-plugin</artifactId>
 7                     <version>2.4</version>
 8                     <configuration>
 9                         <warSourceDirectory>web</warSourceDirectory>
10                         <failOnMissingWebXml>false</failOnMissingWebXml>
11                         <warName>spring-mvc-demo</warName>
12                     </configuration>
13                 </plugin>
14             </plugins>
15         </pluginManagement>
16     </build>

  第一步需要实现WebApplicationInitializer接口或继承抽象类AbstractAnnotationConfigDispatcherServletInitializer,通常使用继承抽象类的方式(别看它名字长,但它很简单),并实现3个抽象方法,它就相当于web.xml:

 1 public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 2     @Override
 3     protected Class<?>[] getRootConfigClasses() {//app的根配置类,就是除SpringMVC以外的配置
 4         return new Class[]{AppConfig.class};
 5     }
 6 
 7     @Override
 8     protected Class<?>[] getServletConfigClasses() {//SpringMVC的配置类,也是DispatcherServlet的配置
 9         return new Class[]{SpringMvcConfig.class};
10     }
11 
12     @Override
13     protected String[] getServletMappings() {//DispatcherServlet的映射路径
14         return new String[]{"/"};
15     }
16 }

   第二步需要实现SpringMVC的配置类,它通常实现WebMvcConfigurer接口,这个接口中所有方法都有默认实现,我们根据需要重写其中的方法即可:

 1 @Configuration//声明为配置类
 2 @EnableWebMvc//启用WebMvc,相当于<mvc:annotation-driven/>
 3 @ComponentScan(basePackages = {"web"})//配置组件扫描
 4 public class SpringMvcConfig implements WebMvcConfigurer {
 5 
 6     //配置视图解析器,声明为Spring管理的bean
 7     @Bean
 8     public ViewResolver viewResolver(){
 9         InternalResourceViewResolver resolver = new InternalResourceViewResolver();
10         resolver.setPrefix("/WEB-INF/views/");
11         resolver.setSuffix(".jsp");
12         return resolver;
13     }
14 
15     //重写WebMvcConfigurer接口中的方法
16     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
17         configurer.enable();
18     }
19 }

  第三步实现除SpringMVC配置以外的配置类,当然如果没有什么需要配置的也可以省略该步骤。

  第四步实现控制器Controller,如xml配置中的controller一样。

  第五步写好前端页面,配置好项目模块和Tomcat,启动大吉。

  注意:基于JavaConfig的web项目没有web.xml,需在web Model中将wen.xml条目删除:

三、总结

  这只是一篇入门笔记,更多SpringMVC原理将在后面贴出。基于Java注解的Web项目显然比基于XML的项目更清爽,但在传统项目中基于xml的工程大量存在,因此我们在学习新方法时一定不要忽略xml的地位。在实际项目中,除了Spring之外还有很多用到xml配置的模块,比如hibernate、Mybatis配置等。学习新技术一定要勤于动手,不要纸上谈兵,很多奇奇怪怪的问题只有在实践中才能遇到,每一次问题的解决都是一次技术积累。实际开发中我们面对的问题远比理论知识多得多,比如工程目录结构、文件编码、模块配置、版本冲突、构建打包等,这些都是程序员需要熟练掌握的问题,因此我们在理论学习中一定不要忘记动手实践,实践中一定要勇于探索实验,并记录下每一个遇到的问题,无论大小,无论简单与复杂。

四、SpringMVC基本maven依赖:

 1  <dependencies>
 2         <dependency><!-- SpringMVC基础包:必需 -->
 3             <groupId>org.springframework</groupId>
 4             <artifactId>spring-webmvc</artifactId>
 5             <version>5.0.4.RELEASE</version>
 6         </dependency>
 7         <dependency><!-- Spring测试包:可选 -->
 8             <groupId>org.springframework</groupId>
 9             <artifactId>spring-test</artifactId>
10             <version>5.0.4.RELEASE</version>
11         </dependency>
12         <dependency><!-- Servlet基础包:必需 -->
13             <groupId>javax.servlet</groupId>
14             <artifactId>servlet-api</artifactId>
15             <version>RELEASE</version>
16         </dependency>
17         <dependency><!-- JSP基础包:使用JSP必需 -->
18             <groupId>javax.servlet.jsp</groupId>
19             <artifactId>javax.servlet.jsp-api</artifactId>
20             <version>2.3.1</version>
21         </dependency>
22         <dependency><!-- JSTL基础包:使用JSP必需 -->
23             <groupId>javax.servlet</groupId>
24             <artifactId>jstl</artifactId>
25             <version>1.2</version>
26         </dependency>
27 
28     <!-- 以下是需要使用数据库交互的包 -->
29         <dependency><!-- MySQL-JDBC包:使用MYSQL必需 -->
30             <groupId>mysql</groupId>
31             <artifactId>mysql-connector-java</artifactId>
32             <version>5.1.46</version>
33         </dependency>
34         <dependency><!-- 阿里Druid数据库连接池:可替代 -->
35             <groupId>com.alibaba</groupId>
36             <artifactId>druid</artifactId>
37             <version>1.1.8</version>
38         </dependency>
39         <dependency><!-- Mybatis包:使用Mybatis必需 -->
40             <groupId>org.mybatis</groupId>
41             <artifactId>mybatis</artifactId>
42             <version>3.4.6</version>
43         </dependency>
44 
45         <dependency><!-- JUnit包:单元测试必需 -->
46             <groupId>junit</groupId>
47             <artifactId>junit</artifactId>
48             <version>RELEASE</version>
49         </dependency>
50     
51     <!-- 还有log4j日志相关的包,以后再贴吧 -->
52     </dependencies>
新手入门maven依赖

  

猜你喜欢

转载自www.cnblogs.com/jackcharles/p/9066574.html
今日推荐