整合Spring和SpringMVC
1.Spring容器和SpringMVC容器的关系
Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器。因此,在SpringMVC容器中,可以访问到Spring容器中定义的Bean,而在Spring容器中,无法访问SpringMVC容器中定义的Bean。在Web开发中,Controller全部在SpringMVC中扫描,除了Controller之外的Bean,全部在Spring容器中扫描(Service、Dao),按这种方式扫描,扫描完完成后,Controller可以访问到Service。
- 为什么不全部都在Spring中扫描
因为处理器映射器只会去SpringMVC中查找到Controller,如果没有,就找不到,不会去Spring中找,这就决定了,Controller必须在SpringMVC中扫描。 - 为什么不全部在SpringMVC中扫描
在SSM整合或者Spring+SpringMVC+JdbcTemplate中,可以全部在SpringMVC中扫描,但是,在SSH整合中,这种方式不允许。
最佳实践:
- Controller在SpringMVC中扫描,视图解析器等在SpringMVC容器中配置
- Spring中扫描Service、Dao已经其他组件,事务定义、数据源定义都在Spring容器中配置
案例
导入jar包
定义bean层
package com.sxt.bean;public class User { private Integer id; private String useame; private String password; public Integer getId() { retu id; } public void setId(Integer id) { this.id = id; } public String getUseame() { retu useame; } public void setUseame(String useame) { this.useame = useame; } public String getPassword() { retu password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { retu "User [id=" + id + ", useame=" + useame + ", password=" + password + "]"; } }
定义dao层与实现类
package com.sxt.dao;import java.util.List;import com.sxt.bean.User;public interface UserDao { public List<User> query();}
package com.sxt.dao.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import com.sxt.bean.User;import com.sxt.dao.UserDao;@Repositorypublic class UserDaoImpl implements UserDao{ @Resource private JdbcTemplate template; @Override public List<User> query() { String Sql="select * from t_user"; retu template.query(Sql, new BeanPropertyRowMapper(User.class)); }}
定义Service和它的实现类
package com.sxt.service;import java.util.List;import com.sxt.bean.User;public interface UserService { public List<User> query();}
package com.sxt.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.sxt.bean.User;import com.sxt.dao.UserDao;import com.sxt.service.UserService;@Servicepublic class UserServiceImpl implements UserService{ @Resource private UserDao dao; @Override public List<User> query() { retu dao.query(); }}
SpringMVC配置文件
<!-- 开启SpringMVC注解的方式 --> <mvc:annotation-driven > </mvc:annotation-driven> <!-- 开启扫描 --> <context:component-scan base-package="com.sxt.controller" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
Spring的配置文件
<context:component-scan base-package="com.sxt.dao.impl,com.sxt.service.impl" use-default-filters="true"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"> <!-- 配置数据库的相关信息 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/pms?characterEncoding=utf-8" /> <property name="useame" value="root" /> <property name="password" value="123456" /> </bean> <bean class="org.springframework.jdbc.core.JdbcTemplate" id="template"> <property name="dataSource" ref="dataSource"></property> </bean>
web.xml文件中
分别加载spring和SpringMVC的配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>SpringMVC-01-hello</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:application.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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:Spring-MVC.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></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-patte>/*</url-patte></filter-mapping> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-patte>/</url-patte> </servlet-mapping> <servlet-mapping><servlet-name>default</servlet-name><url-patte>*.jpg</url-patte></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-patte>*.js</url-patte></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-patte>*.css</url-patte></servlet-mapping></web-app>
自定义Controller
package com.sxt.controller;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.sxt.bean.User;import com.sxt.service.UserService;@Controllerpublic class UserController { @Resource private UserService userService; @RequestMapping("/query") public String query(Model m){ List<User> query = userService.query(); m.addAttribute("list",query); retu "/user.jsp"; }}
在user页面将数据提取出来
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!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> <c:forEach items="${list}" var="user"> ${user.id }--${user.useame }--${user.password }<br> </c:forEach></body></html>
效果测试
作者:薛不二
来源链接:https://blog.csdn.net/qq_30984561/article/details/89479344
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。