导图社区 J2EE复习大纲
J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂家共同制定并得到广泛认可的工业标准,或者说,它是在SUN公司领导下,多家公司参与共同制定的企业级分布式应用程序开发规范。
编辑于2019-01-08 12:16:01J2EE
WEB基础
WEB开发基本模型
请求-响应 模型
javaWEB开发发展历程
静态页面
CGI
每次请求产生一个进程,WEB页面由代码生成。重量级
Servlet
每次请求产生一个线程,响应页面也有代码生成。轻量级
controller,web,service全混在一起,前端难以设计
JSP
编译成servlet,前端人员能进行独立的设计
主流开发模型
JSP+Bean
MVC
maven项目特点(结构)
Spring框架&AOP
Spring容器基础概念:IOC与DI
IOC(inversion of Control)控制反转: 由容器来控制对象的生命周期和对象间的关系(原本为对象自己控制)。 DI依赖注入: 由容器动态地为某对象添加所需要的其他对象。
DI的方式及比较
设值注入
容器使用setter方法来注入被依赖的实例<bean class="com.baobaotao.anno.LogonService"> <property name="logDao" ref="logDao"></property> <property name="userDao" ref="userDao"></property></bean>
构造注入
使用构造器来注入被依赖的实例 <constructor-arg ref="db"/>再建立一个名为db的bean,传值用index属性指定顺序,从0开始。 <bean class="com.baobaotao.anno.LogonService"> <constructor-arg ref="logDao"></constructor-arg> <constructor-arg ref="userDao"></constructor-arg></bean>
比较
设置注入 优点: 1.javaBean写法与传统方式统一,易于开发。 2.对于复杂的依赖注入,构造注入会比较臃肿,在创建bean对象的同时,同时实例化了其他所有对象,导致性能下降。 而设置注入则不会。 3.对于某些属性可选的情况,构造器注入会更加复杂。而设置注入不会。 依赖注入 优点: 1.可以决定构造器中依赖注入的顺序。 2.适用于依赖关系无变化的Bean 3.内部依赖关系对开发者完全透明,更符合高内聚原则。 实际开发过程中,总的来说,设置注入为主,构造注入为辅。
bean的配置
定义
<bean id="stoneAxe" class="org.crazyit.app.service.impl.StoneAxe"/>
配置依赖
设置注入
<bean id="person" class="org.itee.se.impl.PersonImpl"autowire="byType"> <property name="name" ref="ParentDao"/></bean>
构造注入
容器中Bean的作用域
singleton: 单例模式 ,在整个容器中只有一个实例prototype:原型模式 ,每次通过getBean获取时产生一个新的 实例。request:每次http请求产生一个新的实例(如action),web应用。须在web.xml中配置相应的Listener或filterSession:每次 http session产生一个新的实例 ,web应用默认为singleton
容器中Bean的生命周期
Singleton bean只被初始化一次,多次请求获取同一个共享对象; Prototype bean每次请求都应重新创建。 故Singleton bean依赖Prototype bean× 错的
注入之后
<bean id="chinese" class="org.j2ee.service.impl.Chinese" init-method="init"> <property name="axe" ref="steelAxe"/></bean>表明注入后执行的方法
销毁之前
<bean id="chinese" class="org.j2ee.service.impl.Chinese" destroy-method=“destroy"> <property name="axe" ref="steelAxe"/></bean>表明销毁之前要执行的方法
Spring项目开发步骤
稍后总结
AOP的基本概念及特点
概念
面向切面编程(Aspect Oriented Programming): 可以通过预编译方式和运行期间动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术
关注点
事务管理,就是一个关注点。表示“要做什么”
连接点(JoinPoint)
“在什么地方做”
增强处理/通告(Adice)
“具体怎么做”包括“around”、“before”、 “after”和“Throws”等类型
切面(Aspect)
用来切插业务方法的类。
切面方法注解
切面方法注解@Before(value = "execution(* aop.annotation.*.*(..))")@AfterReturning(value = "anyMethod()", returning = "result")@Around(value = "execution(* aop.annotation.*.*(..))")@AfterThrowing(value = "execution(* aop.annotation.*.*(..))", throwing = "e")
切入点
匹配连接点
目标对象
被一个或者多个切面所增强处理(advise)的对象。被代理对象
AOP代理
通过代理来对目标对象应用切面
织入
过程 将切面应用到目标对象从而创建出AOP代理对象的过程
编译时织入:AspectJ
特点
降低模块的耦合度
使系统容易扩展
设计决定的迟绑定
更好的代码复用性
事务支持
SpringAOP增强处理的类型及特点
BeforeAdvice前置增强
在目标方法执行前实施增强
AfterReturningAdvice后置增强
在目标方法执行后实施增强
MethodInterceptor环绕增强
执行前后实施增强
ThrowsAdvice异常抛出增强
抛出异常后实施增强
IntroductionInterceptor引介增强
在目标类中添加一些新的方法和属性
Hibernate
Hibernate基本原理
通过ORM映射,将数据中的表与java类对应起来,用操作类中的属性来代替表操作
Hibernate项目开发步骤
新建maven项目
pom文件中引入hibernate,mysql-connector,javaassit依赖
mysql创建数据库
配置hibernate.cfg.xml文件
<hibernate-configuration> <session-factory><property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/hibernate</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property<property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">mysql</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property></session-factory></hibernate-configuration>
创建持久化类Model
创建映射文件User.hbm.xml
<hibernate-mapping> <class name="com.bjsxt.hibernate.User“ table=“tuser”> <id name="id"> <generator class="uuid"/> </id> <property name="name"/> <property name="password"/> …… </class></hibernate-mapping>
映射文件加入到hibernate
<mapping resource="com/bjsxt/hibernate/User.hbm.xml“/>
核心接口对象及其作用
Configuration
管理Hibernate 的配置信息(数据库连接相关信息)
调用方式
属性文件(hibernate.properties)。调用代码:Configuration cfg = new Configuration(); Xml文件(hibernate.cfg.xml)。调用代码:Configuration cfg = new Configuration().configure();
SessionFactory
获得数据库Session(会话)实例
调用代码
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session
持久化管理器,与持久化操作有关
调用代码
Session session = sessionFactory.openSession();
Transaction
调用代码
Transaction tx = session.beginTransaction();
完整操作
Configuration cfg = new Configuration().configure(); SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession();session.beginTransaction();User user = new User();user.setName("管理员");user.setPassword("admin"); session.save(user);session.getTransaction().commit(); session.beginTransaction();User user1 = new User();user1.setName("jjj");session.save(user1);session.getTransaction().commit(); if(session.isOpen()){ session.close();}
持久化对象的状态(瞬时,持久化,离线)与生命周期
单表映射,双向1对多映射配置
一对一
双方各加入对方的对象
1端(User)
1端(idCard)
双向1对多
1端(User)
放多端的Set集合
多端(CreiditCard)
放1端的对象
基本hql语句
select from where
update set where
delete from where
insert into msg() values ()
executeUpdate()
SpringMVC
基本概念
前端控制器:DispatcherServlet应用控制器:映射管理器(Handler Mapping)+视图解析器(View Resolver)页面控制器:Controller (可以实现Controller接口,也可以是POJO)
Web MVC的演进
JSP+Bean
JSP+Servlet+Bean
前置控制器+应用控制器+页面控制器
请求处理及响应的处理全流程
控制器的分类与作用
前置控制器(dispatcherServlet)
接受请求,并转发至页面控制器,响应浏览器的请求
页面控制器Controller
接受来自前端控制器的转发的请求,对请求进行处理,返回ModelAndView给前置控制器
应用控制器viewResovler
viewResovler控制视图解析。
URL映射
/user/*/createUser /user/**/createUser /user/createUser?? /user/{userId}
*
**
?
{ }
参数绑定/命令对象
参数绑定
绑定请求中的参数
@RequestParam("userName")
绑定URL中的参数
@PathVariable(“id")
SpringMVC与servlet api
HttpServletRequest request,HttpServletResponse response,HttpSession session
视图解析
pom文件中加入jstl,javax.servlet-api
controller中request.setAttribute("userName","张三");或者modelandview.addObject();
jsp页面用${ }EL表达式获取
json数据支持
加入jackson-core,jackson-databind依赖
输出json——@ResponseBody 输入json——@RequestBody
文件上传
pom文件中加入依赖commons-io,commons-fileupload
form表单中enctype="multi/form-data" POST
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multiRequest= multipartResolver.resolveMultipart(request);转为多部分request
在applicationContext.xml中
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8" /><property name="maxUploadSize" value="10485760000" />最大文件限制<property name="maxInMemorySize" value="40960" /></bean>
文件复制file.transferTo(new File(path));
SSH整合
都往Spring中整
基本思路及步骤
整合点——都往Spring中整 SpringMVC与Spring天然整合 Hibernate整合到Spring 关键是sessionFactory 将datasource和sessionFactory作为bean配置到Spring中 在Dao中注入sessionFactory 当Dao通过@Repository加入Spring容器
步骤
在web中启动Spring容器 配置监听器将所有业务bean通过注解部署到容器中 包扫描 Controller用@Controller注解 Service用@Service和@Transactional注解 Dao用@Repository注解 Bean配置(datasource、sessionFactory)
对Hibernate的整合
pom文件hibernate-core,javaassit
配置transactionManager
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"> </bean>
配置sessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop><!--少一个hibernate前缀不能自动新建表。--> </props> </property> <property name="packagesToScan" value="kcsj"></property> </bean>
配置dataSource
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"> </bean>
Spring容器与SpringMVC容器的关系
父子容器关系,spring容器启动先于SpringMVC,故Spring无法使用子容器SPringMvc中的bean,反之可以
整合后容器的启动配置
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
web.xml中加入Listener监听服务器启动,服务器启动则启动Spring容器
SSH架构的项目分析设计