简介:本文技术要点springMvc整合spring开发问题
1、项目清单
2、项目顺序源码
- package com.atguigu.springmvc;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- public class HelloWorld {
- @Autowired
- private UserService userService;
- public HelloWorld() {
- System.out.println("HelloWorld Constructor...");
- }
- @RequestMapping("/helloworld")
- public String hello(){
- System.out.println("success");
- System.out.println(userService);
- return "success";
- }
- }
- package com.atguigu.springmvc;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- @Service
- public class UserService {
- @Autowired
- private HelloWorld helloWorld;
- public UserService() {
- System.out.println("UserService Constructor...");
- }
- }
解析:
SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean.
返回来呢 ? 反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!
3、springMvc.xml配置讲解
- <?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.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
- <!--
- 需要进行 Spring 整合 SpringMVC 吗 ?
- 还是否需要再加入 Spring 的 IOC 容器 ?
- 是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 ContextLoaderListener ?
- 1. 需要: 通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中).
- 实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao.
- 2. 不需要: 都放在 SpringMVC 的配置文件中. 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件
- -->
- <!--
- 问题: 若 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次.
- 解决:
- 1. 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分.
- 2. 使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解
- -->
- <!--
- SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean.
- 返回来呢 ? 反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!
- -->
- <context:component-scan base-package="com.atguigu.springmvc" use-default-filters="false">
- <context:include-filter type="annotation"
- expression="org.springframework.stereotype.Controller"/>
- <context:include-filter type="annotation"
- expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
- </context:component-scan>
- <!-- 配置视图解析器 -->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/views/"></property>
- <property name="suffix" value=".jsp"></property>
- </bean>
- <mvc:default-servlet-handler/>
- <mvc:annotation-driven></mvc:annotation-driven>
- </beans>
4、spring.xml配置讲解
- <?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"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
- <context:component-scan base-package="com.atguigu.springmvc">
- <context:exclude-filter type="annotation"
- expression="org.springframework.stereotype.Controller"/>
- <context:exclude-filter type="annotation"
- expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
- </context:component-scan>
- <!-- 配置数据源, 整合其他框架, 事务等. -->
- </beans>
5、web.xml配置讲解
- <?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"
- 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">
- <!-- 配置启动 Spring IOC 容器的 Listener -->
- <!-- needed for ContextLoaderListener -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:beans.xml</param-value>
- </context-param>
- <!-- Bootstraps the root web application context before servlet initialization -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>springDispatcherServlet</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:springmvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springDispatcherServlet</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
6、顺序jsp页面写法(success.jsp和abc.html没什么意义)
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <a href="helloworld">Hello World</a>
- </body>
- </html>