1、Java基础知识Spring=框架=框架是基于很多技术,思想形成。重点: 了解框架作用,什么时候用,怎么用掌握: 帮我做了什么事,需要我们配合做哪些事了解: 框架涉及技术和思想,如何实现以后考虑 多练习,掌握开发步骤=Spring=1.了解Spring框架作用 Spring框架可以改善系统结构,提高系统灵活性. -Spring提供了IOC和AOP机制, 可以降低程序组件之间的耦合度 -Spring提供了Spring Web MVC实现 可以快速开发MVC结构的Web程序 MVC是一种设计模式 M-model(业务逻辑和业务数据)javabean V-view(显示逻辑)html和jsp C-c
2、ontroller(控制器)servlet -Spring提供了对JDBC,MyBatis,Hibernate, Struts等其他技术的整合应用高内聚低耦合 Sping-整合API-调用原有技术API在Spring中使用整合API编程 Spring-JdbcTemplate-Connection,statement-JdbcTemplate.update(sql,params); 请求-Servlet-Service-多个Dao-JSP2.什么时候用 *降低程序组件耦合度 *Web MVC结构程序3.怎么使用Spring 1) Spring容器IOC应用(Core核心) a.创建组件对象 容
3、器类型: ApplicationContext和BeanFactory 容器对象创建:ClassPathXmlApplicationContext 组件定义方法,有3种 *控制对象使用范围: scope=singleton或prototype singleton:一个,在容器中 只有一个对象 prototype:一个,每次调用 getBean都会产生一个新对象 指定初始化和销毁方法: init-method和destroy-method属性 init-method:在对象创建后,自动调用 指定的初始化方法 destroy-method:仅对scope=singleton 组件有效,在调用容器c
4、lose方法 销毁时触发 指定Bean对象延迟实例化 单例组件,在Spring容器实例时自动 实例化;可以采用lazy-init=true 将对象创建推迟到getBean()方法调用b.维护组件对象关系(IOC思想) IOC概念:Inversion of Controller 反向控制/控制反转 本质:改变了对象获取方式,由原有 自己创建对象应用,转为接收外界注入的 对象使用。由spring容器负责对象创建, 以及关系注入的控制。 Spring的IOC主要采用DI技术实现关系注入 Depedency Injection 依赖注入, Spring的DI又分为set注入,构造器注入 *set注入应
5、用 手机组件:TelePhone 属性:cup,ram4.各种类型信息的注入 *a.基本信息注入 字符串,数值等单个值. *b.Bean对象注入(也可以自动装配) *c.集合注入 List,Set,Map,Properties * - - - * - 可以将某个Bean对象或集合中的信息注入 #id属性.属性 /调用getXXX方法 #id属性0 /如果是list,set数组之类的,可以使用1下标 #id属性.key /map或properties访问,如果下标越界,就报错了 #mapkey /Map里面存的是键值对,能取出来,但要存,在String只能是null 但是可以mapkey 类似E
6、L表达式,可以在value=引号里面,也可以在标签里面 本质是调用get方法,所以编写bean时候,一定要写set/get方法注入null或 注入null,需要用到标签,其实我觉得不注入的话,那个属性就是null了,因为比较是 注意: 1.上面的值,能不能替换成对象,替换成bean 2.注入参数时候,如果需要引用其他bean 最好少用ref属性和value属性被,最好使用标签 1). 2). 两个bean必须在同一个文件夹,不然就报异常 3).ref= 属性JDK5.0 - 注解技术注解技术是在类定义中追加标记标记格式:标识符ComponentServiceResoruce标记只能出现在类的定
7、义前,方法定义前,成员变量定义前注解好处:框架一般采用注解简化或替代 原有的XML文件配置。1.指定路径 有时候需要一个统一的包名,不同的包需要被包在一个包里面,所以域名反写的规则最好遵守组件自动扫描使用: 可以简化定义,按指定的包路径扫描包内所有组件,如果组件类定义前出现以下几个标记之一,就将组件声明定义到容器.Component /组件 通用注解Controller /控制组件xxxControllerService /业务组件xxxServiceRepository /数据访问组件xxxDAONamed /需要引入第三方标准jar包bean的命名 1).默认id 什么都不写,那么就是小写
8、开头的类名 2).自定义 在注解后面(名字)指定组件作用域 Scope(作用域) 默认 单例的 singleton:一个,在容器中只有一个对象PostConstruct 指定 init-method被这个标记的方法,会被作为初始化方法,实例化时候自动调用PreDestroy 指定 destroy-method被被标记的方法,会在容器关闭,销毁对象时候调用 注意: 如果定义了全局的默认的初始化,销毁方法,也是以这个为优先的-很少使用 Resource:会自动装配,并且按照先按name,后type的匹配方式注入 如果怕发生错误,可以指定name或type (name=bean名) (type=Us
9、er.class) Autowired/Qualifier: 默认使用type匹配注入 可以使用另一个注解 Qualifier(bean名字)指定bean名注意: 可以省略掉set方法 都可以写在属性定义,或者setter方法上面 如果写了name,就不会再去找type匹配了 如果指定名称注入,不会再按类型匹配注入。1.SpringMVC工作流程(理论) a.浏览器发出一个HTTP请求 b.请求首先进入DispatcherServlet 主控制器 c.主控制器调用HandlerMapping组件 根据请求找映射的Controller处理 d.执行Controller处理方法,将返回 结果给Vi
10、ewResolver组件 e.ViewResolver组件根据Cotroller返回 结果定位视图JSP,将模型数据传递给JSP f.由JSP生成响应结果,给浏览器输出2.SpringMVC开发过程(应用) a.搭建SpringMVC开发环境 b.流程设计 请求(变化) -DispatcherServlet(固定) -HandlerMapping(固定) -Controller组件(变化) -ViewResolver(固定) -JSP组件(变化) c.编写JSP,Controller组件 d.配置处理流程request.setCharacterEncoding(utf-8);3.-如何接收请求
11、参数(应用) 方法参数(参数名字与请求key保持一致) 方法参数(实体对象,实体属性与key保持一致) -如何向页面传值 添加ModelMap方法参数 -如何使用session 添加HttpSession方法参数/list.do-DispatcherServlet-HandlerMapping-ListController-ViewResolver-/WEB-INF/list.jsp=4.如何解决中文接收乱码问题CharacterEncodingFilter(Spring-web.jar提供)5.如何处理异常*a.全局异常处理 SimpleMappingExceptionResolver*b.
12、局部异常处理 ExceptionHandler public String xxx( HttpServletRequest request,Exception ex)c.自定义ExceptionResolver HandlerExceptionResolver6.如何实现登录权限检查 使用session进行约定值判断。 实现方法:1.采用Filter;2.采用拦截器 a.拦截器组件简介 拦截器组件是SpringMVC特有组件。 拦截器组件可以在Controller之前拦截; 也可以在Controller之后拦截; 还可以在JSP解析完毕给浏览器输出之前 拦截。 b.拦截器使用方法 首先编写一个
13、拦截器组件(实现handlerInterceptor接口) 在约定方法中添加要插入的逻辑 然后在applicationContext.xml中配置sessionScopu.session 直接从session找spring-webmvc-3.2.8.RELEASE.jarweb.xmlorg.springframework.web.servlet.DispatcherServletapplicationContext.xmlorg.springframework.web.servlet.handler.SimpleUrlHandlerMapping-DispaticherServlet(配置)
14、web.xml springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:applicationContext.xml 1 /加上为启动服务器时,实例化,不加为第一次请求时实例化 myfilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 -HanlderMapping(配置) helloController -HelloController(编写+配置)-ViewReso
15、lver(配置) !- 视图名 - error public class EmpRowMapper implements RowMapper/第一个参:rs 第二个参:第几行记录/将当前rs指针指向的记录取出,封装成Emp返回EmpDaoRepository /扫描DAOResource /注入private JdbcTemplate template;public void save(Emp emp) template.update(sql,Object params);public void delete(int id)public void modify(Emp emp)public L
16、ist findAll() List list=template.query(sql, EmpRowMapper rowMapper);public Emp findByid(int id) Emp emp=template.queryForObject(sql, EmpRowMapper rowMapper);/多行查询用query()方法/当行查询用queryForObject()方法/单个查询用queryForInt()方法/hello.do-DispaticherServlet(配置)-HanlderMapping(配置)-HelloController(编写+配置)-ViewReso
17、lver(配置)-/WEB-INF/hello.jsp(编写)ModelAndView mav=new ModelAndView(); mav.setViewName();/设置视图名字,根据页面名写 mav.getModel().put(mag, 模型数据); /等价于request.setAttribute(msg,模型数据);ExceptionHandler/局部异常处理implements HandlerExceptionResolver /将异常信息写入文件 /跳转到错误界面implements HandlerInterceptor /请求处理完毕 输出之前 afterCompletion/Controller之后 postHandle/controller之前 preHandle false表示拦截 高 低 tom jack !- 定义List对象 - 小红 小白 上海 山东 entry key
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1