zoukankan      html  css  js  c++  java
  • Spring4 基本使用

    前言

    虽然现在基本上是 springboot 的天下了,但是传统的 spring4 在广大的软件企业中仍然占据很大比例。一上手能用,但是要让我从无到有搭一个spring4的开发环境出来,可能会磕磕碰碰,耽误不少时间,所以这里从无到有搭一个 spring4的开发环境出来,一步步完善,也复习下 spring 的基本用法,温故知新。

    创建maven项目,引入spring4的一些核心包和常用扩展包。

    我用的是spring4最新版本 4.3.24.RELEASE
    pom.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.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>
    
    

    配置mvc

    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>
    
    

    项目结构

    测试Controller

    
    package com.hz.common.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @Controller()
    @RequestMapping("test")
    public class TestController {
    
        @RequestMapping("/info")
        @ResponseBody
        public Object test(Integer val){
            // contentType=application/x-www-form-urlencoded
            System.out.println(val == null ? "null" : val.toString());
            HashMap<String, Object> map = new HashMap<>();
            map.put("prop", "value");
            map.put("prop1", "value1");
            return map;
        }
    }
    
    
    

    postman测试

  • 相关阅读:
    Linux 多路复用 select / poll
    Linux 驱动层实现阻塞和非阻塞
    Linux 中断下半部
    Nginx基本配置文件
    lnmp “.user.ini”无法删除解决方法
    阿里云服务器配置nginx和PHP
    PHP使用某个键值对二维数组排序
    Laravel 生成二维码的方法
    Redis五种数据类型-设置key的过期时间
    laravel中redis队列的使用
  • 原文地址:https://www.cnblogs.com/liu-shijun/p/10971144.html
Copyright © 2011-2022 走看看