一起学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 }

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>

备注

绳锯木断,水滴石穿。

原文地址:https://www.cnblogs.com/hsiang/p/11827280.html

时间: 2024-11-03 12:34:29

一起学Spring之Web基础篇的相关文章

少儿创意学编程(Scratch基础篇):第3课——捉鬼敢死队

<少儿创意学编程(Scratch基础篇)>,参考了英国公益组织发起的"code club(代码俱乐部)"--少儿免费学编程活动.愿为中国的少儿创意编程教育尽微薄之力,对国内的家长.信息教师和相关教育机构有所帮助,共同促进软件素质教育的发展. 本课程以Scratch软件为教育工具.Scratch是一种图形化编程语言,由麻省理工学院开发.孩子们可以像搭积木一样,拖动和组合代码块,制作丰富多样的程序,比如动画,故事和游戏等等.本课程共设有6个项目,知识点由简到难,循序渐进,带领孩

少儿创意学编程(Scratch基础篇):第4课——聊天机器人

<少儿创意学编程(Scratch基础篇)>,参考了英国公益组织发起的"code club(代码俱乐部)"--少儿免费学编程活动.愿为中国的少儿创意编程教育尽微薄之力,对国内的家长.信息教师和相关教育机构有所帮助,共同促进软件素质教育的发展. 本课程以Scratch软件为教育工具.Scratch是一种图形化编程语言,由麻省理工学院开发.孩子们可以像搭积木一样,拖动和组合代码块,制作丰富多样的程序,比如动画,故事和游戏等等.本课程共设有6个项目,知识点由简到难,循序渐进,带领孩

少儿创意学编程(Scratch基础篇):第5课——绘画板

<少儿创意学编程(Scratch基础篇)>,参考了英国公益组织发起的"code club(代码俱乐部)"--少儿免费学编程活动.愿为中国的少儿创意编程教育尽微薄之力,对国内的家长.信息教师和相关教育机构有所帮助,共同促进软件素质教育的发展. 本课程以Scratch软件为教育工具.Scratch是一种图形化编程语言,由麻省理工学院开发.孩子们可以像搭积木一样,拖动和组合代码块,制作丰富多样的程序,比如动画,故事和游戏等等.本课程共设有6个项目,知识点由简到难,循序渐进,带领孩

2015年33期Java/Spring/Struts2/web/基础/就业班视频

一.基础班课程(掌握Java核心课程) 日期        星期        课程(空内容表示放假)        上课老师2014/12/8        星期一        [开学典礼].Java开发前奏        钟太潋2014/12/9        星期二        Java语言基础        钟太潋2014/12/10        星期三                2014/12/11        星期四        Java语言基础        钟太潋2

MyEclipse配置Spring框架(基础篇)

一.新建项目,添加spring的相关jar包等 二.创建相关类以及属性和方法 Student.java package com.yh; public class Student implements People { private Course course; @Override public void breath() { // TODO Auto-generated method stub System.out.println("呼吸"); } public Course get

运维学python之爬虫高级篇(六)scrapy模拟登陆

上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这

【慕课网】php工程师学习计划之我的学习笔记——01 入门必学web基础 htmlcss基础课程 篇

为了进一步学习PHP,本周我选定了慕课网的PHP工程师学习计划, 从今天2015-07-06 10:24:47开始从头学习:计划本周尽快学习完成本课程,谨此作为笔记. 有个好的学习计划和思路非常非常重要,非常感谢慕课网提供本套学习计划,希望更多地学习平台能提供像这样全面一条龙学习思路清晰地教程. 计划图:链接 我的学习状况:2015-07-06 10:29:46 开始随记: php工程师学习计划笔记——01 入门必学web基础 htmlcss基础课程 篇 入门篇: text-align:cent

Spring MVC 基础篇 1

Spring MVC基础篇  @RequestMapping使用 [email protected]RequestMapping 注解 进行请求映射 (1)指定Controller或者Method可以处理那些url请求. (2)适用范围:类定义上或者方法定义上都可以加. (3)在类定义处添加该注解是相对于WEB应用的根目录,在方法处是对类定义的请求处理的进一步细化.可以在类定义上没有添加该注解,但是方法定义上有该注解,此时 方法处的该注解标记的URL就是相对于WEB应用根目录. (4) 思考:此

好程序员web前端分享HTML基础篇

好程序员web前端分享HTML基础篇,最近遇到很多新手,都会问,如果要学web前端开发,需要学什么?难不难学啊?多久能入门之类的问题?那么今天好程序员就先来给大家分享一下web前端学习路线:HTML基础 学习目标 1.本专业介绍.HTML相关概念,HTML发展历史 2.WEB标准,W3C/WHATWG/ECMA相关概念 3.相关软件的应用以及站点的创建 4.HTML基本结构和HTML语法 5.HTML常用标记 一.本专业介绍.HTML相关概念,HTML发展历史 本专业介绍 移动前端/WEB前端