zoukankan      html  css  js  c++  java
  • 一起学Spring之Web基础篇

    概述

    在日常的开发中Web项目集成Spring框架,已经越来越重要,而Spring框架已经成为web开发的主流框架之一。本文主要讲解Java开发Web项目集成Spring框架的简单使用,以及使用Spring和不使用Spring框架,两者之间的差异。 仅供学习分享使用,如有不足之处,还请指正。

    页面访问流程图

    本示例的页面访问流程图如下所示:

    不使用Spring框架的开发流程

    步骤如下:

    1. 新增Service和Dao对应的类及接口实现

    如下所示:在Service中对Dao进行了强关联

     1 package com.hex.Dao;
     2 
     3 /**
     4  * 学生Dao
     5  * @author Administrator
     6  *
     7  */
     8 public interface IStudentDao {
     9     public String GetStudentById(int id);
    10 }
    11 ////////////////////////////////////////
    12 package com.hex.Dao;
    13 
    14 /**
    15  * 学生Dao
    16  * @author Administrator
    17  *
    18  */
    19 public class StudentDaoImpl implements IStudentDao {
    20 
    21     /**
    22      * 查询学生信息
    23      */
    24     @Override
    25     public String GetStudentById(int id) {
    26         
    27         return "hex";
    28     }
    29 
    30 }
    31 ////////////////////////////////////////
    32 package com.hex.Service;
    33 
    34 /**
    35  * 学生服务接口
    36  * @author Administrator
    37  *
    38  */
    39 public interface IStudentService {
    40     public String GetStudentById(int id);
    41 }
    42 ////////////////////////////////////////
    43 package com.hex.Service;
    44 
    45 import com.hex.Dao.IStudentDao;
    46 import com.hex.Dao.StudentDaoImpl;
    47 
    48 /**
    49  * 学生服务实现类
    50  * @author Administrator
    51  *
    52  */
    53 public class StudentServiceImpl implements IStudentService {
    54 
    55     private IStudentDao studentDao;
    56     
    57     public void setStudentDao(IStudentDao studentDao) {
    58         this.studentDao = studentDao;
    59     }
    60 
    61     @Override
    62     public String GetStudentById(int id) {
    63         //studentDao=new StudentDaoImpl();
    64         return studentDao.GetStudentById(id);
    65     }
    66 
    67 }
    View Code

    2. 新增HomeServlet类,并需要通过new的方式声明studentService对象

    如下所示:

     1 package com.hex.servlet;
     2 
    15 /**
    16  * 访问Servlet实现类
    17  */
    18 public class HomeServlet extends HttpServlet {
    19     private static final long serialVersionUID = 1L;
    20     
    21     private IStudentService studentService;
    22       
    23 
    24     /**
    25      * 构造函数26      */
    27     public HomeServlet() {
    28        
    29     }
    30     
    31     /**
    32      * 初始化时声明studentService对象
    33      */
    34     @Override
    35     public void init() throws ServletException {
    36         studentService=new StudentServiceImpl();
    37     }
    38 
    39     /**
    40      * Get方法
    41      */
    42     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    43         
    44         String studentName=studentService.GetStudentById(0);
    45         request.setAttribute("studentName", studentName);
    46         request.getRequestDispatcher("/jsp/Home.jsp").forward(request, response);
    47     }
    48 
    49     /**
    50      * Post方法,此处和Get方法同
    51      */
    52     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    53         // TODO Auto-generated method stub
    54         doGet(request, response);
    55     }
    56 
    57 }

    3. 前端页面进行访问即可

    如下所示:

    1 <a href="../HomeServlet">点击进入</a>

    4. 缺点:

    此处形成了强依赖,即HomeServlet需要StudentServiceImpl对象。且StudentServiceImpl需要StudentDao的支持。

    采用Spring的方式进行访问

    0. Spring框需要的Jar包

    Spring框架支持web项目需要的Jar包共7个,如下所示:

     1 //日志包
     2 commons-logging-1.1.1.jar
     3 //spring核心包
     4 spring-aop-4.0.6.RELEASE.jar
     5 spring-beans-4.0.6.RELEASE.jar
     6 spring-context-4.0.6.RELEASE.jar
     7 spring-core-4.0.6.RELEASE.jar
     8 spring-expression-4.0.6.RELEASE.jar
     9 //web包
    10 spring-web-4.0.6.RELEASE.jar

    1. 需要在web.xml文件中配置Spring对应的监听器

    如下所示:

    applicationContext.xml 位于src目录,所以需要加上classpath,是Spring容器的配置文件

    1 <context-param>
    2     <param-name>contextConfigLocation</param-name>
    3     <param-value>classpath:applicationContext.xml
    4     </param-value>
    5 </context-param>
    6 <!-- 配置spring-web.jar对应的监听器 ,Tomcat启动时,自动初始化IOC容器 -->
    7 <listener>
    8     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    9 </listener>

    2. 配置Spring的IOC容器

    如下所示:依赖引用对象属性采用ref方式,如果是值对象,则采用value方式。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4 xsi:schemaLocation="http://www.springframework.org/schema/beans
     5  http://www.springframework.org/schema/beans/spring-beans.xsd">
     6      <!-- Dao依赖于数据库的底层操作,本示例不予深入 -->
     7      <bean id="studentDao" class="com.hex.Dao.StudentDaoImpl"></bean>
     8      <!-- Service层依赖于StudentDao,采用set的方式注入 -->
     9      <bean id="studentService" class="com.hex.Service.StudentServiceImpl">
    10          <property name="studentDao" ref="studentDao"></property>
    11      </bean>
    12 </beans>

    3. 在Servlet中,引入ApplicationContext对象,将Tomcat容器和Spring的IOC容器进行关联

    如下所示:其他方法保持不变,增加studentService对象的getter和setter方法,然后通过容器注入的声明方式产生对象。在StudentServiceImpl中对StudengDao的依赖采用同样方法进行注入。

     1 package com.hex.servlet;
     2 
     3 /**
     4  * Servlet实现类
     5  */
     6 public class HomeServlet extends HttpServlet {
     7     private static final long serialVersionUID = 1L;
     8     
     9     private IStudentService studentService;
    10        
    11     public IStudentService getStudentService() {
    12         return studentService;
    13     }
    14 
    15     public void setStudentService(IStudentService studentService) {
    16         this.studentService = studentService;
    17     }
    18     
    19     /**
    20      * 初始化时获取Sping的IOC容器中的bean对象
    21      */
    22     @Override
    23     public void init() throws ServletException {
    24         //Web项目获取Spring上下文对象。
    25         ApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
    26         studentService=(IStudentService)context.getBean("studentService");
    27     }
    28 }

    4. 优势:

    此方式将Servlet和Service及Dao之间进行了解耦,灵活扩展性大大增强。

    小知识

    如果Spring的IOC容器文件有多个,可以采用Import的方式进行引入,如下所示:

    1 <!-- 第二种方式,采用import方式引入其他容器文件 -->
    2 <import resource="applicationContext2.xml"/>

    在web.xml中配置servlet的方式,如下所示:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
     3     <display-name>FirstWebSpring</display-name>
     4     <servlet>
     5         <description>
     6         </description>
     7         <display-name>HomeServlet</display-name>
     8         <servlet-name>HomeServlet</servlet-name>
     9         <servlet-class>com.hex.servlet.HomeServlet</servlet-class>
    10     </servlet>
    11     <servlet-mapping>
    12         <servlet-name>HomeServlet</servlet-name>
    13         <url-pattern>/HomeServlet</url-pattern>
    14     </servlet-mapping>
    15     <welcome-file-list>
    16         <welcome-file>index.html</welcome-file>
    17         <welcome-file>index.htm</welcome-file>
    18         <welcome-file>index.jsp</welcome-file>
    19         <welcome-file>default.html</welcome-file>
    20         <welcome-file>default.htm</welcome-file>
    21         <welcome-file>default.jsp</welcome-file>
    22     </welcome-file-list>
    23     <!-- 配置容器地址 -->
    24     <!-- 第一种方式如果要加载多个配置文件,可以写多个,如下所示:
    25         <param-value>
    26             classpath:applicationContext.xml,
    27             classpath:applicationContext2.xml
    28         </param-value>
    29      -->
    30     <context-param>
    31         <param-name>contextConfigLocation</param-name>
    32         <param-value>
    33             classpath:applicationContext.xml
    34         </param-value>
    35     </context-param>
    36     <!-- 配置spring-web.jar对应的监听器 ,Tomcat启动时,自动初始化IOC容器 -->
    37     <listener>
    38         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    39     </listener>
    40 </web-app>
    View Code

    备注

    绳锯木断,水滴石穿。

  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合
    【转】编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化
    【转】编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for
    【转】编写高质量代码改善C#程序的157个建议——建议17:多数情况下使用foreach进行循环遍历
    java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包
    Springboot集成dubbo时候出现异常
    Python小练习(持续更新....)
    2.PyCharm安装和使用之HelloWorld
    1.Python学习---helloworld
    关于编码问题
  • 原文地址:https://www.cnblogs.com/hsiang/p/11827280.html
Copyright © 2011-2022 走看看