Spring、SpringMVC
1、Spring中用到了哪些设计模式
1.工厂模式,这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了;
2.模版模式,这个也很明显,在各种BeanFactory以及ApplicationContext实现中也都用到了;
3.代理模式,在Aop实现中用到了JDK的动态代理;
4.单例模式,这个比如在创建bean的时候。
5.Tomcat中有很多场景都使用到了外观模式,因为Tomcat中有很多不同的组件,每个组件需要相互通信,但又不能将自己内部数据过多地暴露给其他组件。用外观模式隔离数据是个很好的方法。
6.策略模式在Java中的应用,这个太明显了,因为Comparator这个接口简直就是为策略模式而生的。Comparable和Comparator的区别一文中,详细讲了Comparator的使用。比方说Collections里面有一个sort方法,因为集合里面的元素有可能是复合对象,复合对象并不像基本数据类型,可以根据大小排序,复合对象怎么排序呢?基于这个问题考虑,Java要求如果定义的复合对象要有排序的功能,就自行实现Comparable接口或Comparator接口.
7.原型模式:使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。
8.迭代器模式:Iterable接口和Iterator接口 这两个都是迭代相关的接口,可以这么认为,实现了Iterable接口,则表示某个对象是可被迭代的;Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象时如何进行迭代的
2、struts集成spring
spring导jar包还需要struts lib下的spring
配置监听器listener放到web.xml
<listener>监听服务器,一旦启动,会读取配置文件,初始化容器参考struts文档的spring plugin部分
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>指定配置文件位置
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INFO/applicationContext*.xml,classpath*:applicationContext-*.xml</param-value>项目路径
</context-param>
<filter>配置过滤器
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.strutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在lib下建配置文件.xml applicationContext.xml
<bean id="adminDao" class="com.bochy.dao.impl.AdminDaoImpl"></bean>
<bean id="adminAction" class="com.bochy.action.AdminAction">
<property name="adminDao" ref="adminDao"></property>
</bean>
配置struts.xml
class属性写成action对象在spring容器中的名字adminAction,通过spring管理action,之前是靠struts管理的
怎么实现的?在struts-spring-plugin里有配置文件,指定了struts对象的工厂是spring,这个配置覆盖了struts原有的配置
spring容器原理
参数注入,构造注入
<bean id="adminAction" class="com.bochy.bean.AdminAction">
<construtor-ary ref="adminDao"></construtor-ary>
</bean>
3、bean的生命周期
spring:web随着web启动而启动,web关闭而关闭,java project new Application启动了,需要关闭的话,注册钩子 Hook java的事件机制,要有事件对象,继承ApplicationEvent,要有监听器,实现ApplicationListener<T>, 泛型指定监听哪一种时间在配置文件里,引入监听器,需要的时候,发布事件
bean:初始化,先执行构造方法,然后setter方法,然后init-method,destroy-method
4、spring的api在类里获得容器,WebApplicationContextUtils获得容器上下文
5、spring注解
在context包下,需要引入context命名以及相应的location
@component("adminDao")在AdminDaoImpl中;@component("adminService")在AdminServiceImpl中,在setter方法中 @Resource说明要依赖其他对象默认按名字;@Component("adminAction")@Scope("prototype")在AdminAction 中@Required代表这个属性一定要被注入在setter方法中
Component注册成一个组件,相当于配置文件里的bean;Resource是指引用依赖对象(按名字装配)Autowired按类 型;Scope指名作用域
@Controller("adminAction")在AdminAction中
@Scope("prototype")
@Autowired在setter中/@Resource
@Service("adminService")在AdminServiceImpl中
@Autowired在setter中/@Resource
@Repository("adminDao")在AdminDaoImpl中
6、Spring的Aop:面向切面的编程(相当于代理)
切面:代理类就是切面
目标(对象):被切入的类
代理:切面和目标共同构成的
切点:是连接点的抽象,所有的连接点都是切点,代表所有连接点
连接点:每一条线上切面和目标的焦点
通知:是切面的内容
7、Aop的使用基于代理
引入jar包bean,context,core,expression,Commons,Aop,aspect(web),aopallionce,aspectjwewer
注解:引入命名空间xmlns:aop加catalog
<aop:aspectj-autoproxy/>
写切面类@component@Aspect(相当代理类)方法实际切入内容@before在某一个目标之前执行(相当于invoke() @before("execution(public * com.bochy.dao.impl.*.*(...))")前置通知 确定位置 加入这个方法 就是切点
@after后置通知(value="....") @AfterReturning(pointcut=execution(" ",returning="retVal")返回值通知 @AfterThrowing(pointcut=" ",throwing="te")抛出异常 @Around(" ")环绕通知
简化:@pointCut("exection( )") public void pointCut(){}
@Before("pointCut")
@order()通过它可以规定切面的先后顺序
配置.xml
<bean id="logAspect" class="com.bochy.aop.logAspect"></bean>
<aop:config> and not execution(" ")不包含哪个
<aop:pointcut express=" " id="daoPt"/>声明切点
<aop:aspect ref="logAspect" order="1">定义切面
<aop:before methed="beforelog" pointcutref=" "/>
</aop:aspect>
<aop:config>
8、spring集成hibernate(ORM)用spring管理SessionFactory
(1)、引入jar包,连接池的jar
(2)、配置数据源dataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-methed="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc.oracle.thin:@localhost:1521/orcl"/>
<property name="username" value="scott">
<property name="passworld" value="tiger">
<property name="maxActive" value="15">最大连接数
<property name="maxIdle" value="10">最大空闲数
<property name="minIdle" value="5">
</bean>
(3)、让hibernate使用数据源引入hibernate jar包(orm,jdbc),指定映射类配hibernate信息
<bean id="sessionFactory" class="org.springframework.orm.hibernatr4.locatSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<list>指定映射类所在的包
<value>com.bochy.bean</value>
</list>
</property>
</bean>
<property name="mappingResources">指定映射文件(可省略)
<list>
<value>com/bochy/bean/Admin.hbm.xml<value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hiberbate.dialect.OracleDialect</prop>
<prop key="hiberbate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
(4)、在dao的impl中,注入SessionFactory加入setter、getter
(5)、<context:property-placeholder location="classpath:dbcp.properties"/>占位符,取代 (2)配置需要的值,从其 他文件读
建dbcp.properties文件(国际化)jdbc.driverClassName=oracle.jdbc.driver.OracleDriver等
在Spring配置文件中改为<property name="driverClassName" value="${jdbc.driverClassName}"/>
(6)、注解:保持(3)(4)(5)不变
<context:annotation-config/>开启注解
<context:component-scan base-package="com.bochy...指定扫描包"/>
<aop:aspectj-autoproxy/>针对Aop注解
9、事务
1)<bean id="txmanger" class="org.springframework.orm.hibernate.HibernateTransaction"></bean>
2)<tx:annotation-driven/>开启事务注解
3)@Transactional在service方法中加入(value=txmanger)
属性:事务的传播行为
propagation=Propagation.REQUIRE只有一个事务用的都是一个
Propagation.REQUIRE_NEW新开启一个,第一个挂起
Propagation.Nested第一个新开一个,嵌在第一个内
isolation隔离级别.READ_COMMITTED
readOnly=true只读,提高效率
Spring事务有哪些:
https://blog.csdn.net/chinacr07/article/details/78817449
https://zhanghteye.iteye.com/blog/2371572
10、Spring IOC如何实现
https://www.cnblogs.com/best/p/5727935.html
11、Struts:
有一组相互协作的类(组件),Servlet以及jsptaglib组成,基于struts架构的web应用程序基本上符合JSPModel2的设计标准,可以说是mvc设计模式的一种变化类型,struts有其自己的控制器(controller),同时整合了其他的一些技术去实现模型层(M)和视图层(V),struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Delation Bridge,在视图层JSP,Velocity Templates XSL这些组件结合
12、MVC:
model:应用程序核心(比如数据库列表),应用程序中用于处理应用程序数据逻辑部分,通常模型对象负责存取数据
view:显示数据(比如数据库记录),应用程序中处理数据显示部分,通常视图是依据模型数据创建的
controller:处理输入(写入数据库记录),应用程序中处理用户交互,通常控制负责从视图读取数据,控制用户输入并向模型发送
mvc模式同事提供了对HTML、CSS和JavaScript的完全控制,最经典的mvc就是JSP+Servlet+javabean的模式
13、SpringMVC流程:
1)、用户发送请求至前端控制器DispatcherServlet
2)、DispatcherServlet收到请求调用HandlerMapping处理映射器
3)、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理拦截器一并返回给DispatcherServlet
4)、DispatcherServlet调用HandlerAdapter处理适配器
5)、HandlerAdapter经过适配器调用具体的处理器Controller,也叫后端控制器
6)、Controller执行完成返回ModelAndView
7)、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8)、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9)、ViewReslover解析后返回具体View
10)、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
11)、DispatcherServlet相应客户
14、组件说明:
DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其他组件执行,同一调度,降低组件之间的耦合性,提高每个组件的扩展性
HandlerMapping:通过扩展处理器实现不同的映射方式,例如:配置文件方式、实现接口方式、注解方式
HandlerAdapter:通过扩展处理器适配器,支持更多类型的处理器
ViewResolver:通过扩展视图解析器,支持更多的视图解析,例如:jsp、freemaker、pdf、excel等
前端控制器DispatcherServlet(不开发)
处理映射器HanlerMapping(不开发)
处理适配器HandlerAdapter(不开发)
处理器Handler(开发)
视图解析器(不开发)
视图View(开发)
15、SpringMVC常用注解:
@Controller:把用户请求的数据经过业务处理之后封装成一个Model,然后再返给View进行展示
@RequestMapping:处理请求地址的注解,value(实际地址),method(Get、POST、PUT、delete),consumes(处理请求的提交内容类型Content-Type,application/json,text/html),produces(指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回),params(指定request中必须包含某些参数值时,才让该方法处理),headers(指定request中必须包含某些指定的header值,才能让该方法处理请求)
@Resource和@Autowired
@ModelAttribute和@SessionAttributes
@PathVariable用于将请求url中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
@RequestParam获取参数,相当于request.getParameter(“name”)
@ResponseBody返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用
@Component当不知道一些类归到那层时使用
@Repository:dao层,在daoimpl上面注解
16、SpringMVC是什么:
springmvc是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是struts2加上spring的整合
springMVC是spring的后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块,springMVC和spring无缝集成,其实springMVC就是spring的一个子模块,所以根本不需要同spring进行整合
1、环境搭建:
1)引入jar包,aop/beans/context/core/expression/web/webmvc/comms-logging
2)在web.xml中配置DispatcherServlet是spring mvc的入口
<servlet>
<servlet-name>DispatcherServlet</servlet>
<servlet-class>org.springframework.web.servlet.DispacherServlet<servlet-class>
<init-param>
<param-name>contextconfigLocation</param-name>上写文引导路径(容器)
<param-value>寻找配置文件</param-value>
</init-param>
<load-on-startup>1</load-on-startup>在程序启动时就对它进行加载
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3)建立springmvc-servlet.xml
xmlns:mvc 在spring文档中,命名空间,
<context:component-scan base_package="com.bochy.handler">负责转发的类AdminHandler请求
4)在AdminHandler上加@controller 写handler类,请求路径和方法关联
在方法上加入@RequestMapping("/login")在表单里的请求路径向方法关联
在方法中加入(Admin asmin)参数传递(使用封装对象方法的参数是对象,表单的name是对象的属性值)
return"login_success";jsp页面的名字,返回页面在配置文件中配置InternalResourceViewResolver
<bean id="viewResolver" class="org.springframework.web.servlet.view....">在配置文件中写入sping搜索 InternalResourceViewResolver
<property name="prefix" value="/WEB-INFO/jsp/">前缀
<property naem="suffix" value=".jsp">后缀
</bean>
访问作用域(Admin asmin,Map<String,Object> map) map.put("login",admin);把对象放入作用域中
5)解决乱码搜CharacterEncodingFilter类,在web.xml中写过滤器
<filter>
<filter-name>CharacterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、整合增删改查Spring+SpringMVC+Mybatis
1)引入jar包(16个)
2)在web.xml配spring-mvc的入口,集成springmvc
配置listener启动struts容器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
解决乱码,配置过滤器
处理请求,也通过过滤器解决
<filter>
<filter-name>httpMethedFilter<filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
3)写mybatis的配置文件spring-mybatis.xml
<bean id="dataSource" desting-method="close" class="...BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"> jdbc:oracle:thin:@localhost:1521/orcl
<property name="username" value="${jdbc.username}">
<property name="password" value="${jdbc.password}">
</bean>
<bean id="sqlSessionFactory" class="org...SqlSessionFactoryBean">
<property name="dataDource" ref="dataSource"/>
</bean>
<bean id="mapperScannerConfigurer" class="org....MapperScannerConfigurer">
<property name="basePackage" value="com.bochy.dao"/>
</bean>扫描配置mapper,指明扫描哪个Admindao
Spring、SpringMVC相关推荐
- 框架:spring、springmvc、springboot
先来说说spring.springmvc.springboot的关系. spring boot只是一个配置工具,整合工具,辅助工具. springmvc是框架,项目中实际运行的代码 Spring 框架 ...
- 配置spring、SpringMVC,mybatis进行整合
springframwork的官网 spring-projects/spring-mvc-showcase https://github.com/spring-projects/spring-mvc- ...
- Spring、SpringMVC、SpringBoot、SpringCloud的关系分享
最近在做一些技术架构原型,发现Spring已经跟三四年前发生了很多的区别,技术的迭代日新月异,再不学习就赶不上时代的脚步 ,以下是最近关于Spring.SpringMVC.SpringBoot.Spr ...
- Spring、SpringMVC和Springboot的区别
Spring.SpringMVC和Springboot的区别(网摘) spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc ...
- SSM框架终极篇——Spring、SpringMVC、MyBatis整合练习(超级详细)
SSM框架终极篇--Spring.SpringMVC.MyBatis整合练习 一.准备工作 环境: 新版IDEA MySQL 5.7 Tomcat 9.0.2 Maven 要求: 熟练掌握MySQL数 ...
- 超级详细!!!Spring、SpringMVC、Mybatis知识点完整版更新!IOD、DI依赖注入、Mybatis配置、SQL、MVC拦截器、Web开发、SSM整合案例。
Spring Spring框架知识点完整版 上篇,SSM三部曲之一 知识点涵盖:Spring简介IOC控制反转DI依赖注入LombokSPEL配置文件低频知识点注解开发Spring常用注解 链接:ht ...
- 基于 Spring、SpringMVC、MyBatis 的熊猫书屋系统
开源项目:book-house-ssm 开发时间:2022.04.21 - 2022.05.13 文章目录 一.快速开始 二.背景调查 三.功能描述 3.1 用户功能 3.2 管理员功能 四.功能演示 ...
- Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别
一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...
- 框架:springboot组合spring、springmvc、mybatis的一个小demo
Spring+SpringMVC+Mybatis就是大名顶顶的SSM了. 这里我们使用IDEA的SpringBoot和版本控制器MAVEN构建一个SSM的demo. 介绍: 在搭建过程中spring整 ...
- spring、springMvc、springBoot和springCloud的联系与区别
作者:尘光掠影 来源:CSDN 原文:https://blog.csdn.net/alan_liuyue/article/details/80656687 spring和springMvc: 1 ...
最新文章
- 张家口zec挖矿软件哪里下载_AMTO软件下载-AMTO挖矿官网版v1.1
- [转]Velocity脚本摘要
- 去掉input密码框自动补全功能
- 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划
- 5 万条微信语音升入太空;阿里京东否认停止社招;雷军开怼华为 | 极客头条...
- C1083: 无法打开包括文件: “stdafx.h”: No such file or directory
- selenium webdriver实战宝典 pdf_Selenium+webdriver爬虫技术实战之沃运维报表提取
- uni-app开发环境搭建创建uni-app项目
- cmd命令行乱码 oracle_Oracle查询中文乱码问题
- 怎么把ide改成ahci_怎么改硬盘模式IDE,AHCI
- Ubuntu14.04安装wineqq国际版
- OpenCV总结:绘制朱利亚(Julia)集合图形
- 使用3g模块SIM5360E收发短信
- 简单教会按关键字搜索商品
- EXCEL表单元格内特定内容的提取
- java获取当前日,当前月的开始时间和结束时间,当前季度的开始时间和结束时间
- WEB端显示三维地形模型
- ChatGPT初体验-帮我写一本奇幻冒险小说(Aethia的勇士)
- 爱尔兰卫生部遭Conti勒索软件攻击说明与建议
- 用3D全息投影打造一场婚礼有什么优势?