Spring
目录
Spring
Spring是一个容器(IOC核心/AOP)
Spring容器对象创建
向Spring容器添加元素(组件)
从Spring容器获取元素(对象)
Spring IOC概念
Spring DAO
1. JdbcTemplate/RowMapper
2. JdbcDaoSupport
3. DataSourceTransactionManager
4. DataAccessException
Spring MVC
入门案例
1. 流程设计
2. 工程创建
3. 生成web配置文件.web.xml配置DispatcherServlet
4. applicationContext.xml配置HandlerMapping
5. 编写Controller
6. applicationContext.xml配置Controller(控制器)
7. applicationContext.xml配置ViewResolver(视图解析器)
8. 在WEB-INF下编写hello.jsp
扩展案例
1. 添加HandlerMapping映射信息在applicationContext.xml里
2. 新建ListController.java继承implements Controller
3. 配置ListController(注意大小写)
4. 编写list.jsp
注解SpringMVC
1. 配置DispatcherServlet(前端控制器)
2. 配置HandlerMapping
3. 编写HelloController
4. 配置HelloController
5. 配置ViewResolver
6. 编写hello.jsp
Spring是一个容器(IOC核心/AOP)。
Spring容器对象创建?
BeanFactory–>ApplicationContext–>ClassPathXmlApplicationContext ApplicationContext ac = new ClassPathXmlApplicationContext(“xxx.xml”);
向Spring容器添加元素(组件)?
1.在XML文件添加定义
2.使用注解扫描技术
<context:component-scan base-package="xxx">, @Controller\@Service\@Repository\@Component\@Autowired\@Resource @Named @Inject
从Spring容器获取元素(对象)?
容器外:ac.getBean(“id|name名”) 容器内:@Autowired、@Resource/、
Spring IOC概念:由Spring容器管理程序组件,创建组件对象,利用注入建立对象关系。
Spring DAO
1.JdbcTemplate/RowMapper
简化DAO组件编写和数据库访问
使用方法:1.首先需要配置一个DataSource;2.然后配置JdbcTemplate,并入DataSource;3.编写DAO,注入JdbcTemplate
2.JdbcDaoSupport
自定义DAO继承JdbcDaoSupport,可以方便使用JdbcTemplate.
3.DataSourceTransactionManager
提供声明式事务管理功能。追加注解配置即可完成事务控制。
4.DataAccessException
提供了统一的异常处理类,只要是数据库访问技术出错就抛出该异常类。
Spring MVC
基于Spring容器IOC功能实现组件管理和对象关系注入。并实现了MVC设计思想。
MVC优点:按功能将程序组件进行划分,便于系统维护、扩展工作。
入门案例
1.流程设计
/hello.do-->
DispatcherServlet(前端适配器)-->
HandlerMapping(处理器映射)-->
HelloController(控制器)-->
ViewResolver(视图解析器)-->
/hello.jsp
2.工程创建
引入spring ioc、aop、mvc开发包
在src添加applicationContext.xml文件
3.生成web配置文件.web.xml配置DispatcherServlet(前端适配器)
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class> <!-- 3.找DispatcherServlet(前端适配器)的包名.类名 方式一:在jar包中找 方式二:新建一个类让工具帮我们找:输入DispatcherServlet, 导包org.springframework.web.servlet.DispatcherServlet --> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 5.初始化参数 --> <init-param> <!-- 7.参数名称是固定的contextConfigLocation --> <param-name>contextConfigLocation</param-name> <!-- 6.加载spring配置文件,实例化Spring容器 --> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- 4.元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)正数的值越小, 该servlet的优先级越高,应用启动时就越先加载 实例化Spring容器 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 2.配置servlet-mapping的路径映射配置名字和servlet-name一样 和url-pattern映射拦截路径 发出.do请求找servlet-name也就是找servlet-name --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
4.applicationContext.xml配置HandlerMapping
<!-- 1.定义(处理器映射)HandlerMapping把请求映射到Controler中 --> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <!-- 2.set注入 properties集合请求和controller名的映射信息--> <props> <prop key="/hello.do">helloController</prop> </props> </property> </bean>
5.编写Controller(控制器)
//1.输出打印 System.out.println("执行了HellController"); //2.创建ModelAndView,封装模型数据和响应视图名称 //3.request.setAttribute("msg", "Hello SpringMVC");//原来做法,现在不用了 ModelAndView mav = new ModelAndView(); //4.设置模型数据 mav.getModel().put("msg1", "Hello SpringMVC"); mav.getModel().put("msg2", "First SpringMVC"); //5.指定视图名称hello.jsp mav.setViewName("hello"); //6.返回mav return mav;
6.applicationContext.xml配置Controller(控制器)
<!-- 第六步1.applicationContext.xml配置Controller --> <bean id="helloController" class="com.xdl.controller.HelloController"></bean>
springmvc01_v1
7.applicationContext.xml配置ViewResolver(视图解析器)
<!-- 第七步applicationContext.xml配置ViewResolver(视图解析器1.org.springframework.web.servlet.view.InternalResourceViewResolver --> <!-- viewResolver,解析contorller返回的ModelAndView信息 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 2个set注入prefix前缀suffix后缀 --> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
8.在WEB-INF下编写hello.jsp
<%@ 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> <h1>${msg1}</h1> <h1>${msg2}</h1> </body> </html>
扩展案例
/list.do-->
DispatcherServlet(前端控制器)-->
HandlerMapping(处理器映射)-->
ListController(列表控制器)-->
ViewResovler(视图解析器)-->
/WEB-INF/list.jsp
1.添加HandlerMapping映射信息在applicationContext.xml里
<!-- 第四步1.定义(处理器映射)HandlerMapping把请求映射到Controler中 --> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <!-- 第四步2.set注入 properties集合请求和controller名的映射信息--> <props> <prop key="/hello.do">helloController</prop> <!-- 扩展案例1.扩展案例list.do --> <prop key="/list.do">listController</prop> </props> </property> </bean>
2.新建ListController.java继承implements Controller
public class ListController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { //1.构建一个对象 ModelAndView mav = new ModelAndView(); //3.get设置消息列表显示 mav.getModel().put("msg", "列表显示"); //2.寻找list.jsp mav.setViewName("list"); //3.返回mav return mav; } }
3.配置ListController(注意大小写)
<!-- 扩展案例2.applicationContext.xml配置Controller扩展案例list.do --> <bean id="listController" class="com.xdl.controller.ListController"> </bean>
4.编写list.jsp
<%@ 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> <h1>${msg}</h1> </body> </html>
注解SpringMVC
可以替代bean和handlerMaping还有controller
SpringMVC注解配置比XML配置,应用简洁,方便。简化XML配置量,简化了Controller组件编写。
/hello.do-->
DispatcherServlet(前端控制器)-->
HandlerMapping-->
HelloController-->
ViewResolver-->
/hello.jsp
搭建一个项目
引入jrb包和配置文件
1.配置DispatcherServlet(前端控制器)
(与XML配置相同) <!-- 1.servlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> <!-- 新建一个测试类输入DispatcherServlet,导它的包 --> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!-- 3.追加参数 ,约定好的名字--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- 4.load-on-startup --> <load-on-startup>1</load-on-startup> </servlet> <!-- 2.servlet-mapping --> <servlet-mapping> <servlet-name>springmvg</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
2.配置HandlerMapping
<mvc:annotation-driven /> 内部定义了大量< bean>组件,与MVC注解有关的 <!--配置HandlerMapping 在测试类中输入RequestMappingingHandlerMapping 导包 <bean class="org.springframework.web.servlet.DispatcherServlet"></bean> 补充加强组件适配器 <bean class="org.springframework.web.servlet.DispatcherAdopter"></bean>--> <!-- 封装简配 等于上面2个 相当于总开关里面有十多个不用写--> <mvc:annotation-driven />
3.编写HelloController
package com.xdl.controller; import org.springframework.stereotype.Controller; import org.springframework.web.servlet.ModelAndView; /** * 不用实现Controller接口 * 方法定义更加灵活,方法名自定义,参数根据需要定义,返回类型ModelAndView/String * @author Administrator * */ @Controller public class HelloController { //1.直接写方法 @RequestMapping("/hello.do") public ModelAndView say(){ ModelAndView mav = new ModelAndView(); mav.getModel().put("msg1", "Hello SpringMVC");//设置模型数据 mav.getModel().put("msg2", "First SpringMVC"); mav.setViewName("hello");//指定视图名称hello return mav; } } 提示:不需要实现约定接口及方法。
-4.配置HelloController
<!-- Controller 自动扫描 --> <context:component-scan base-package="com.xdl.controller">
5.配置ViewResolver
<!-- ViewResolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 2个set注入prefix前缀suffix后缀 --> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
6.编写hello.jsp
<h1>${msg1}</h1> <h1>${msg2}</h1>
作业
- 实现课上两个版本的hello案例(XML和注解) 2. 做一个列表显示页面。(注解版本)