Spring(一)Spring简介、源码包,SpringMVC环境构建、运行原理、常用注解标签

Spring简介

Spring由不同模块组成的,是集其它框架的一个框架,是一个大的集成者,是生产对象的工厂,是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,还可应用于移动开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

Spring由6个模块构成,每个模块独立存在,独立运行,用哪个导那个的jar包,使用其中的某个模块,都不会影响其它模块,他的设计是插拔式模式,属于Spring的模块有两个,即它自身的技术IOP,AOP,其它的模块都是它集成了别人的技术或者说是用了别人的技术,对其改造了一下。
这里写图片描述
DAO:数据访问对象,最早使用数据访问对象的是JDBC,JDBC中用的在Spring中都可以用,对事务的封装,最接近数据访问底层的模块。 提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC 封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。

ORM:对对象关系映射框架的又一次封装,封装的目的简化开发量,提高开发率,降低开发成本。提供了常用的“对象/关系”映射APIs的集成层, 其中包括JPA、JDO、Hibernate 和 iBatis,利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。

Web:Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的application context。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。

core:框架的最基础部分,提供IoC和依赖注入特性,并真正地允许你从程序逻辑中分离出依赖关系和配置。

IOC:控制反转。以前使用一个类的属性和方法时,必须使用new创建才能使用是开发者使用new关键字来完成的,使用Spring之后自己不需要new对象,Spring帮我们把对象生产出来了。只需要将自己想使用的对象配置到Spring的容器中,即配置文件中,Spring就可以帮我们new出来了。控制javaBean之间的关系,管理javaBean和javaBean之间的关系。

AOP:面向切面编程,对开发者来说就是面向核心业务开发,也是一种编程思想。提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming)实现。

Spring中的 MVC 封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性。

Spring源码包

这里写图片描述

doc:Spring的文档其中还有英文手册doc中
libs:jar包。
schema:文档xml配置文件自动提示的文件

开发环境构建

1.添加jar包,构建的是SpringMVC(该技术是后来加的,和其它技术没有关系)开发环境

这里写图片描述

SpringMVC核心jar和aop、aspects、beans、context、context-support的jar关联,依赖expression、instrument2个jar。导入的jar最好是4.x的版本,否则会比较容易在启动配置时出现因版本而造成的一些问题。

2.在web.xml中配置DispathcherServlet

DispathcherServlet初始化自身的MVC,需要在web.xml配置,它封装了HttpServlet当客户端的一个请求,这个请求可以转到handler(处理用户,处理用户请求的数据,从前台到后台数据是如何交互的,)或者controllers。

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    //此标签有两个值0和1,配成1表示Tomcat启动先加载这个servlet里面的内容。
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        //url标签中不能有逗号,只能写一个,在此处配置的后缀名是什么,请求的后缀名就是什么
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

3.配置控制器扫描器(使一个包下面的内容都成为控制器)

在web-INF下新建配置文件Spring-controller.xml,告诉tomcat在初始化的时候初始化那些控制器,控制器有系统控制器和用户自己定义的控制器,配置文件主要用来描述控制器的。

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">
        //添加对应的xsd使其有提示功能
        //base-package的值为该工程中写控制器的包
    <context:component-scan base-package="com.spring.controller"/>
</beans>

添加该文件到web.xml中,注意添加的位置,最好是在servlet标签的servlet-class标签下面。

<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/Spring-controller.xml</param-value>
</init-param>

4.创建控制器

本文将运用基于注解的控制器配置,首先需要了解两个标签:
@Controller 注解声明控制器
@RequestMapping注解声明请求路径及注解方法
在控制器包下新建一个类,运用标签将其标识为控制器并给页面提供访问路径。添加一个方法以登录为例,返回值可以为void也可以为String。在页面访问这个方法,不能直接访问这个方法,需要先用@RequestMapping注册,值需要方法名一致。方法的参数需在类型前写注解可以省略不写,注解里面的内容必须一致和参数名一致。

package com.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("oneController")
public class OneController {
    @RequestMapping("login")
    public void login(String name,String passWord){
        System.out.println("name"+name+":passWord"+passWord);
    }

}

5.创建一个jsp页面,页面中包含一个表单,表单的name属性需要和方法的参数一致。action的值中工程路径/控制器的路径/方法的路径+后缀。

    <form action="<%=request.getContextPath()%>/oneController/login.action" method="post">
        用户名:<input type="text" name="name">
        密码:<input type="text" name="passWord">
        <input type="submit" value="login">
    </form>

6.开启服务,运行界面,在界面中输入内容提交之后可以看到控制台输出了自己刚刚输入的值。

7.当参数是一个类的实例时,新建类并重写类toString方法。

public class Student {
    private Integer id;
    private String studentName;
    private String studentPass;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public String getStudentPass() {
        return studentPass;
    }
    public void setStudentPass(String studentPass) {
        this.studentPass = studentPass;
    }
    @Override
    public String toString() {
        return "Student [studentName=" + studentName + ", studentPass=" + studentPass + "]";
    }

}

在页面中新添加一个表单,此时表单的name值与类的属性名称一致。

<form action="<%=request.getContextPath()%>/oneController/save.action" method="post">
    学生姓名:<input type="text" name="studentName">
    学生密码:<input type="text" name="studentPass">
    <input type="submit" value="login">
    </form>

在控制器中新添加一个方法,参数是新建的类的对象。

@RequestMapping("save")
    public void save(Student stu){
        System.out.println(stu);
    }

8.当jsp页面输入中文在传到控制器是出现乱码时,传统方法写过滤器,而Spring已经帮我们写好了,只需要在web.xml中配置就好了,配置方法如下。

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

SpringMVC运行原理

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet将请求提交到Controller
  4. Controller调用业务逻辑处理后,返回ModelAndView
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
  6. 视图负责将结果显示到客户端
    DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
    1. 截获符合特定格式的URL请求。
    2. 初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
    3. 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中

运行原理图

这里写图片描述

运行过程中涉及的一些接口

DispatcherServlet接口:Spring提供的前端控制器,所有的请求都有经过它来统一分发。DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。
HandlerMapping接口:能够完成客户请求到Controller映射。
Controller接口:需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller 将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。
ModelAndView中包含了模型(Model)和视图(View)。
ViewResolver接口:Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。

SpringMVC常用注解标签
在英文帮助文档的第V点17章。
标签@RequestMapping写法:
最简化写法:@RequestMapping(“oneController”),值为路径名。以下的几种方法中书写的方式都可省略。
@RequestMapping(value=”oneController”)。
@RequestMapping(value=”/oneController”),/默认是系统自己加,也可以自己添加。
@RequestMapping(value=”oneController”,method=RequestMethod.GET):method配置请求方式,数组可以配置多个参数,配置是get还是post请求方式,要与页面的请求方式一致,默认是post请求。
@RequestMapping(value=”oneController”,method=RequestMethod.GET,consumes=”application/json”,produces=”application/json”):consumes和produces配置返回数据的类型,两个写一个就可以了,一般不书写,将数据转为josn格式就ok了。
@RequestMapping(value=”/springMVC/oneController”)。:路径可以变得很深,直接在标签里面将路径写深,页面中引用时需要与之相统一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值