13.SpringMVC和Spring集成(一) && 14.SpringMVC和Spring集成(二)

1.概念

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,Spring致力于J2EE应用的各层的解决方案,Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

MVC——Spring的作用是整合,但不仅仅限于整合,Spring 框架可以被看做是一个企业解决方案级别的框架。

客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户。

Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

2.环境搭建详解

2.1引入相应的jar包

pringMVC和spring包的结构发生了很大的变化,各个包都分开了,灵活,要求使用者更加深入的学习使用,当我们引入包的时候,以少为原则,少的话可以根据报错来找到相应的包,如果过多的话,包会报错异常的混乱,不容易分辨;sprinMVC和spring本身就是一家的,所以引入的包来说基本上和spring需要的架构包是一致的.

2.2 web.xml     一个项目的全局配置点在web.xml,看一个项目用了哪些框架,主要看web.xml里面加了哪些入口监听

配置文件的对应入口和启动顺序

注解:springMVC是通过dispastservlet来监听的,spring使用linstener监听的,struts2是使用filter来监听的他们之间的启动顺序,web容器有又一个即,

第一:context-param

第二:Listerer

第三:Filter

第四:servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springMVC1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath*:config/springAnnotation-servlet.xml</param-value>
  </context-param>
  
<!--配置spring启动listener入口 -->  
  <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
<!-- 配置springMVC启动DispatcherServlete入口 -->  
  <servlet>
      <servlet-name>springMVC</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath*:config/springAnnotation-servlet.xml</param-value>
          </init-param> 
       <load-on-startup>1</load-on-startup>
  </servlet>
  
     <filter>
        <filter-name>encodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!-- encoding filter for jsp page -->
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

      <servlet-mapping>
          <servlet-name>springMVC</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
</web-app>
web.xml

2.3 springAnnotation-servlet.xml   注解文件

springAnnotation-servlet.xml

2.4  springAnnotation-core.xml     通过bean注入要调用的接口实现类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [
<!ENTITY contextInclude SYSTEM "org/springframework/web/context/WEB-INF/contextInclude.xml">
]>

<beans>
    <bean id="springManager" class="com.tgb.web.controller.annotation.SpringManager"></bean>
</beans>
springAnnotation-core.xml

2.4.1  ISpring接口

package controller.annotation;

public interface ISpring {

    public String get();
}
ISpring.java

2.4.2  ISpring实现类

package controller.annotation;

public class SpringManager implements ISpring {

    public String get() {
        System.out.println("------I am springManager----");
        
        return "I am getMethod";
    }

}
SpringManager.java

2.4.3 SpringController类

package controller.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringController {
//这样替代了在xml配置属性的过程
    @Resource(name="springManager")
    private ISpring springManager;//springManager的注入
    
    @RequestMapping("/spring/get")
    public String get(){
        System.out.println(springManager.get());
        return "/success";
    }
}
SpringController.java

遇到的错误:

错误1:

严重: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springManager' is defined

看一下代码不知道错在哪里,运行不出结果,可是核心的xml对bean有定义啊,求看到的大神指教

原文地址:https://www.cnblogs.com/chenxiaomeng/p/5799796.html