虽然现在基本上是 springboot 的天下了,但是传统的 spring4 在广大的软件企业中仍然占据很大比例。一上手能用,但是要让我从无到有搭一个spring4的开发环境出来,可能会磕磕碰碰,耽误不少时间,所以这里从无到有搭一个 spring4的开发环境出来,一步步完善,也复习下 spring 的基本用法,温故知新。
我用的是spring4最新版本 4.3.24.RELEASEpom.xml
?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.hz</groupId> <artifactId>admin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>admin Maven Webapp</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>4.3.24.RELEASE</spring.version> <junit.version>4.11</junit.version> <jackson.version>2.9.8</jackson.version> </properties> <dependencies> <!-- junit 测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!--spring 常用模块依赖 start--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</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-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- spring 常用模块依赖 end --> <!-- jackson json转换配置,配置--> <!-- 这个配置对应 RequestParams, RequestBody, ResponseBody 等注解,原始请求参数其实都在 HttpServletRequest 对象里, 但实际上我们用spring的时候可以直接在controller方法参数里得到请求数据,String,Integer, Map, List 和自定义bean 这个转换就要用到这个包, 不引入这个包,使用RequestBody注解就会报错--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <!-- spring MVC 依赖 start--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- spring MVC 依赖 end--> </dependencies> <build> <finalName>admin</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- jetty 插件--> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.18.v20190429</version> <configuration> <httpConnector> <port>8082</port> <!-- 监听的http 端口,默认8080 --> </httpConnector> <scanIntervalSeconds>2</scanIntervalSeconds> <webApp> <contextPath>/</contextPath> </webApp> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>web.xml文件是web项目的启动文件,要想在web项目中使用spring,需要在这里配置spring
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- spring配置文件位置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring.xml</param-value> <!-- 这个文件主要配置spring beans,包括数据源,事务控制 </context-param> <!-- 启动web时加载spring的配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 添加springMVC支持,单独springMVC时也需要在web.xml文件中配置 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/spring-mvc.xml</param-value> <!-- spring-mvc.xml 主要配置mvc方面,包括controller注解扫描,视图解析器, controller参数绑定(这里就要用到pom里的jackson json依赖) --> </init-param> <!-- 启动web时就加载springmvc的servlet,即启动时就加载springmvc的配置文件 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <!-- 拦截所有请求 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list><!--指定欢迎页面--> <welcome-file>login.html</welcome-file> </welcome-file-list> <error-page> <!--当系统出现404错误,跳转到页面nopage.html--> <error-code>404</error-code> <location>/nopage.html</location> </error-page> <error-page> <!--当系统出现java.lang.NullPointerException,跳转到页面error.html--> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.html</location> </error-page> <session-config><!--会话超时配置,单位分钟--> <session-timeout>360</session-timeout> </session-config> </web-app>spring-mvc.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" xmlns:p="http://www.springframework.org/schema/p" 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-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- spring扫描的包 --> <context:component-scan base-package="com.hz.*.controller"/> <!-- DispatcherServlet不处理静态资源,交给服务器默认的servlet处理 --> <mvc:default-servlet-handler /> <!-- 启用annotation --> <mvc:annotation-driven /> <!--json转换器配置, @ResponseBody,RequestBody 将请求参数转换成bean需要这个类 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 视图渲染器 ,如果搭建REST Web应用,可以不配置这个,具体REST-Web应用配置,后面再讲--> <!-- 视图xxx 将对应访问/WEB-INF/page/xxx.jsp文件 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/page/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>postman测试