使用Sping框架构建Java Web项目
课程    Spring框架

本篇使用Sping框架构建一个Java Web项目案例,从实践上对Spring框架有个初步认知。通过本篇的学习,可以掌握以下内容:

● 了解Spring框架能帮我们做什么?

● 如何获取Spring框架?

● 应用Spring框架构建Java Web项目

● 建立Spring配置文件

● 配置web.xml加载Spring配置文件


1、Spring框架能帮我们做什么?

现在大部分Web项目都用框架开发,用的最多,最受欢迎的就是Spring框架,现在的主流集成框架SSM(SSM框架集)、SSH(SSH框架集)都离不开Spring框架。Spring框架的优势体现在以下几个方面:

(1)使用轻量级的Spring IOC 容器替换复杂的EJB容器,简化开发企业级应用程序的复杂度。

(2)Spring框架使用IOC容器和配置文件管理Bean的生命周期和配置,利用DI(依赖注入技术)为Bean注入依赖对象。这样做的好处是可以在配置文件中配置Bean所需要的资源,完成自身的业务逻辑,而无需修改代码,提高了Bean的可扩展性和复用性。

(3)Spring通过反转控制技术,将一个对象依赖的其它对象由IOC容器传递进去,而不是这个对象自己创建或者查找依赖对象。例如,汽车对象依赖于发动机对象,使用Spring框架之前,程序员需要在汽车对象内部创建发动机对象。使用Spring框架之后,发动机对象写入配置文件,由IOC容器创建并传递给汽车对象。Spring的反转控制技术让对象之间的强耦合变为松耦合。

(4)Spring的AOP机制,允许把与业务无关,但需要业务重复调用的公共模块封装起来,并在合适的时间,由AOP将封装的公共模块切入到业务流程中。例如,在编写银行存取款业务流程中,可以把用户验证、记录用户操作的日志模块从流程中提取出来,单独处理。然后,利用Spring的AOP机制将用户验证、记录用户操作的日志模块横向切入到银行存取款业务流程中。AOP机制可以减少系统重复代码,降低模块之间的耦合度,提高代码的可维护性和复用性。

(5)Spring封装了JavaEE提供的JDBC、JavaMail、远程调用等API接口,让程序调用这些接口变得非常容易。

2、如何获取Spring框架?

Spring框架依赖于Apache Commons Logging(Apace开发的日志接口库)。因此,在部署Spring框架之前,需要先下载Apache Commons Logging库。可以从commons.apache.org/logging/ 下载 Apache Commons Logging的最新版本。windows操作系统选择zip格式的压缩包,Linux系统选择tar.gz格式的压缩包。在widows系统下,解压下载的压缩包到任意目录,解压后的文件目录如下图所示。

blob.png


图1 Apache Commons Logging文件目录

可以从repo.spring.io/release/org/springframework/spring下载最新版的Spring框架文件,选择zip格式的压缩包下载。在widows系统下,解压下载的压缩包到任意目录,解压后的文件目录如下图所示。

blob.png


图2 Spring框架文件目录

Spring框架的所有Jar包文件都在图中的libs目录下,后面需要将该libs目录下的所有Jar包文件复制到Java Web项目中。

至此,Spring框架已经准备好了。

3、 应用Spring框架构建Java Web项目

让我们使用Spring框架开始实际的编程,启动eclipse,建立Java Web项目,项目名称为SpringProgram。项目添加Spring框架需要下面几个步骤:

(1)复制日志接口库jar包到项目lib目录

进入先前下载并解压缩的日志接口库目录,复制jar包文件到项目WEB-INFO目录下的lib目录。

(2)复制Spring框架jar包文件到项目的lib目录

进入先前下载并解压缩的Spring框架文件目录,进入libs目录,复制所有的jar包文件到项目WEB-INFO目录下lib目录。复制完成,lib目录如下图所示。

blob.png


图3 项目lib目录下的jar包文件

(3)建立实体Teacher类

Teacher类为实体Bean类,有属性值name,该类由IOC容器统一管理,包括类的创建和属性值的注入。类代码如下:

package com.milihua.springprogram.entity;
public class Teacher {
    private String name;
 
    public void hello() {
        System.out.println("teacher name is:" + name);
    }
 
    public String getName() {
        return name;  
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
}

(4)建立Spring配置文件

在src目录下新建config目录,用于存储配置文件。在新建的config目录下建立dispatcher.xml文件。Spring配置文件是XML格式的文件,该文件非常重要,是Spring框架的核心,Spring实现的所有功能都依赖于该配置文件。本文仅实现Bean类的配置。配置文件代码如下:

<?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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.2.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    <bean id="teacher" class="com.milihua.springprogram.entity.Teacher">
        <property name="name" value="zhang"></property>
    </bean>
</beans>

配置文件定义了Teacher类,当外部从IOC容器获取该类时,IOC容器将创建Teacher类实例,并把属性值“zhang”注入到创建的Teacher类实例中。

(5)建立Spring监听器

建立Spring监听类,实现ServletContextListener接口,在实现的contextInitialized接口方法中,创建IOC容器,然后将IOC容器放在ServletContext的一个属性中。代码如下:

package com.milihua.springprogram.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class SpringServletContextListener implements ServletContextListener {
    /**
     * Default constructor.
     */
    public SpringServletContextListener() {
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    }
 
    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0) {
        // 1、获取spring配置文件的名称和位置
        ServletContext servletContext = arg0.getServletContext();
        String config = servletContext.getInitParameter("configLocation");
        System.out.println("配置文件:" + config);
        // 2、创建IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
        // 3、将IOC容器放在ServletContext的一个属性中
        servletContext.setAttribute("ApplicationContext", ctx);
    }
 
}

(6)建立TeacherInfoServlet类

TeacherInfoServlet类继承于HttpServlet类,用于处理JSP页面发送的请求,该类从application域对象中得到IOC容器的引用,从IOC容器中得到需要的Teacher类。代码如下:

package com.milihua.springprogram.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.context.ApplicationContext;
 
import com.milihua.springprogram.entity.Teacher;
 
public class TeacherInfoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 从application域对象中得到IOC容器的引用
        ServletContext servletContext = getServletContext();
        ApplicationContext ctx = (ApplicationContext) servletContext.getAttribute("ApplicationContext");
        // 从IOC容器中得到需要的bean
        Teacher teacher = ctx.getBean(Teacher.class);
        teacher.hello();
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
        response.getWriter().append("老师名称:").append(teacher.getName()).append("\nServed at: ")
                .append(request.getContextPath());
    }
}

(7)修改web.xml配置文件

在项目中打开web.xml配置文件,添加下面的语句:

     <!-- 配置spring配置文件的名称和位置 -->
    <context-param>
        <param-name>configLocation</param-name>
        <param-value>classpath:/config/dispatcher.xml</param-value>
    </context-param>
    <!-- 启动IOC容器的ServletContextListener -->
    <listener>
    <listener-class>com.milihua.springprogram.listener.SpringServletContextListener</listener-class>
    </listener>
     <!-- 配置服务器运行路径 -->
<servlet>
<servlet-name>teacherInfoServlet</servlet-name>
    <servlet-class>com.milihua.springprogram.servlet.TeacherInfoServlet</servlet-class>
        <init-param>
            <param-name>configLocation</param-name>
            <param-value>classpath:\config\dispatcher.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
        <servlet-name>teacherInfoServlet</servlet-name>
        <url-pattern>/TeacherInfoServlet</url-pattern>
  </servlet-mapping>

Web.xml  配置文件内容说明如下:

   <context-param>
        <param-name>configLocation</param-name>
        <param-value>classpath:/config/dispatcher.xml</param-value>
    </context-param>

用于加载Spring配置文件,<param-name>标签之间的值为配置文件的名称,<param-value>标签之间的值为配置文件的存储路径。

<listener>
    <listener-class>com.milihua.springprogram.listener.SpringServletContextListener</listener-class>
    </listener>

添加监听类SpringServletContext。

4、 验证项目

在WebContent目录下,新建index.jsp文件,在<body>标签之间输入下面的内容:

<a href="TeacherInfoServlet">输出老师信息</a>

启动服务器,运行index.jsp,若没有什么问题,index.jsp将被正常打开。如果服务器报错,可能是配置或代码出了问题,请对照本文内容仔细检查。

■ 课程小结

Spring框架提供了IOC(轻量级容器)、DI(依赖注入)、控制反转以及AOP技术,这些技术可以减轻企业级项目开发的复杂度,特别是控制反转机制将依赖对象的强耦合弱化为松耦合,提高了代码的复用性、维护性和可扩展性。

Java Web项目添加Spring框架要注意以下几点:(1)Spring框架依赖于Apache Commons Logging;(2)Spring框架和Apache Commons Logging的所有Jar包文件都要复制到Java Web项目的lib目录;(3)建立Spring配置文件,并在web.xml配置文件中加入读取Spring配置文件的命令。

 


读者留言
最新
推荐
子衿
2019/5/25
写的不错,有视频就好了
  • 推荐[0]
  • |
  • 回复
回复评论
用手机学习课程

手机、电脑同步学

用浏览器扫描二维码,即可下载APP。

郎宏林
授课老师
授课老师简介
项目经理,系统分析和架构师,从事多年中文信息处理技术。熟悉项目管理、擅长项目需求分析和设计、精通Java、C#、Python等编程语言。
  • 备案号:鲁ICP备15001146号
  • @1997-2018 潍坊米粒花网络技术有限公司版权所有