Spring入门学习记录(三):Spring与Web层的整合


上期说到Spring中会分为下列几层然后交给Spring管理:

1.@Component 除三层之外的类

2.@Controller 把web层的类交给Spring管理。因为 Servlet/Filter 对象不能交给spring管理,所以后期我们选择替换掉Servlet,采用新的框架SpringMVC!(毕竟那玩意妨碍到我们偷懒了,那就得想办法干掉)(但是这一期我们讲的还是使用的@WebServlet()!)

3.@Service 把业务层的业务类交给spring管理

4.@Repository 把Dao层的Dao类交给spring管
 

但是也正是由于Servlet和Fileter无法交给Spring管理,所以后期我们选择替换掉Servlet/Filter,下面我们就来看看这是怎么实现的!

一、Spring与Web层整合。

①Spring容器自动创建:监听Web服务器,在其启动时自动创建spring容器

②创建好的spring容器,保存起来,方便在后面的代码中获取,对所有用户,所有请求共享, 存在Application域中。

那么实现步骤如下:

事前准备:

我们需要有一个父项目,然后在父项目中加入下列配置:

目录结构如下:

 在父类的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>org.example</groupId>
    <artifactId>Spring-Web-Create</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Spring-web-create-test</module>
    </modules>

    <properties>
        <spring.version>4.3.10.RELEASE</spring.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>4.3.10.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <!-- 插件 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
        </plugins>
        <!--设置maven拷贝那些目录下的文件-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

然后我们正式开始!

①创建一个Spring-web的Mudule:

 然后自己改个名字然后一路next到最后。

②添加Spring-web的依赖:

  <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>
  </properties>

  <dependencies>
    <!--spring的依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.10.RELEASE</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.21</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.21</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
    </dependency>

    <!--导入spring-web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>
    <!--servlet-api-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!--jsp-api-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>

  </dependencies>

③然后新建三个文件夹:

 ④写下相应的实体类:

        [1]DAO层:

//这里是分开的,我懒写在一起

//UserDAO接口
public interface UserDAO {
    public void testDAO();
}



//UserDAO实现类
@Component("userDAO")
public class UserDAOImpl implements UserDAO {

    public void testDAO() {
        System.out.println("这是DAO层");
    }
}

        [2]Service层:

//这里本来是分开的,我懒,所以写在一起
//Service接口

public interface UserService {
    public void UserService();
}



//Service实现类
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDAO userDAO;

    public void UserService() {
        System.out.println("这是service");
        userDAO.testDAO();

    }
}

       [3]实体类(这里偷懒加了Lombok依赖然后用了注解,可以看上一篇有讲解):

//我懒,不分,另加一个lombok依赖

//User实体类
@Data                 //替换get、set方法
@AllArgsConstructor   //全参构造方法
@NoArgsConstructor    //无参数构造方法
@EqualsAndHashCode    //equals和hashCode方法
@ToString             //toString方法
@Component
public class User {
    private String username;
    private String password;
}

//Order实体类
@Data                 //替换get、set方法
@AllArgsConstructor   //全参构造方法
@NoArgsConstructor    //无参数构造方法
@EqualsAndHashCode    //equals和hashCode方法
@ToString             //toString方法
@Component
public class Order {
    private String[] arr;
    private List<User> list;
    private Set<User> set;
    private Map<String, User> map;
    private Properties prop;
    private String orderName;
}

总体效果如下:

 ⑤去webapp下的WEB-INF下的web.xml进行如下配置:

        配置一个过滤器,监听web服务器启动时候,创建Spring容器

     <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

然后

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

用于设置加载的配置文件的,不写的话就默认加载WEB-INF下的web.xml文件

⑥创建一个applicationContext.xml文件

 

然后开启Spring的注解扫描:

<?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"
       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">

<!--  开启扫描注解  -->
    <context:component-scan base-package="com.test" />

</beans>

⑦去写一个新建一个Controller层下的AServlet文件:

⑧使用注解@WebServlet()设置访问路径,然后继承HttpServlet:

然后通过

ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());

来获取Spring容器(放心吧!以后SpringMVC往后会换注解配置的放心!我也不想背这么长!)

@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取Spring容器,它存在Application域 ServletContext
        ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        app.getBean(UserService.class).UserService();
    }
}

⑧我们配置一个Tomcat然后跑起来:

 然后执行完后就可以运行成功啦!结果如下:

 然后spring和web层的整合就完成啦,当然啦,在后续的学习中我们还会不断的演化,到了SSM的时候就会出现下面这种情况,完全使用注解进行代码整合,下面是我写SSM项目的时候的一个小片段,你会发现其实过滤器和@WebServlet也被替换掉了,但是我们要知道他们的前身是什么,知其因果,循序渐进!

所以到这里Spring和web层的整合就结束啦,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值