标签:new 条目 dem 没有 img and 项目 分享 attr
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>
标签:new 条目 dem 没有 img and 项目 分享 attr
原文地址:https://www.cnblogs.com/jackcharles/p/9066574.html