J2EE基础知识点复习3.doc
- 格式:pdf
- 大小:432.87 KB
- 文档页数:5
说明:在编程中我们会在某个类、方法或变量前面加上@x,来表明这个类、方法或变量具有x属性。
1.Servlet1).Servlet 是什么?Java Servlet 是运行在Web 服务器或应用服务器上的程序,它是作为来自Web 浏览器或其他HTTP 客户端的请求和HTTP 服务器上的数据库或应用程序之间的中间层。
2).Servlet 有以下几点优势(1).性能明显更好。
(2).Servlet 在Web 服务器的地址空间内执行。
这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
(3).Servlet 是独立于平台的,因为它们是用Java 编写的。
(4).服务器上的Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。
因此,Servlet 是可信的。
(5).Java 类库的全部功能对Servlet 来说都是可用的。
它可以通过sockets 和RMI 机制与applets、数据库或其他软件进行交互。
3).Servlet 架构过程为:(1) 客户端发送请求至服务器端;(2) 服务器将请求信息发送至Servlet;(3) Servlet 生成响应内容并将其传给服务器。
响应内容动态生成,通常取决于客户端的请求;(4) 服务器将响应返回给客户端。
4).servlet生命周期(1).客户端请求该Servlet;(2).加载Servlet 类到内存;(3).实例化并调用init()方法初始化该Servlet;(4).service()(根据请求方法不同调用doGet() 或者doPost(),此外还有doGet()、doPut()、doTrace()、doDelete()、doOptions());(5).destroy()。
5).看一下老师ppt和教程(这个很不错/holandstone/article/details/16844957)想学的更好就看servlet-api.chm2.web socket(1).web socket:是HTML5一种新的协议。
Hibernate教程使用Hibernate的7个步骤使用hibernate的3个准备:1、导入Hibernate库(jar包)——》2、添加核心配置文件hibernate.cfg.xml——》3、添加对应表的实体类和映射文件。
当准备好了以上的3个准备后,使用Hibernate还需要7个步骤,下边详细介绍一下使用Hibernate还需要7个步骤1.1第一步读取配置ConfigurationConfiguration cfg=new Configuration().configure();2. 2第二步创建sessionFactory3. 3第三步打开session4. 4第四步开启事务Transaction5. 5第五步进行持久化操作,就是增删改查等操作6. 6第六步提交事务7.7第七步关闭资源,也就是关闭session8.8运行即可,成功hibernate多对一、一对一、一对多、多对多的配置方法hihernate一对多关联映射(单向Classes----->Student)一对多关联映射利用了多对一关联映射原理多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多也就是说一对多和多对一的映射策略是一样的,只是站的角度不同在一一端维护关系的缺点:* 如果将t_student表里的classesid字段设置为非空,则无法保存* 因为不是在student这一端维护关系,所以student不知道是哪个班的,所以需要发出多余的update语句来更新关系hihernate一对多关联映射(双向Classes<----->Student)一对多双向关联映射:* 在一一端的集合上使用<key>,在对方表中加入一个外键指向一一端* 在多一端采用<many-to-one> 注意:<key>标签指定的外键字段必须和<many-to-one>指定的外键字段一致,否则引用字段的错误如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多的一端来维护关联关系关于inverse属性:inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从”一“一端和”多“一端维护关联关系,如果设置成inverse为true,则我们只能从多一端来维护关联关系注意:inverse属性,只影响数据的存储,也就是持久化inverse和cascade* inverse是关联关系的控制方向* cascade操作上的连锁反应hibernate一对一主键关联映射(单向关联Person---->IdCard)一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段被创建具体映射:<id name="id"><!-- person的主键来源idCard,也就是共享idCard的主键--> <generator class="foreign"><param name="property">idCard</param> </genera tor> </id><property name="name"/><!-- one-to-one标签的含义,指示hibernate怎么加载它的关联对象,默认根据主键加载,constrained="true",表明当前主键上存在一个约束,person 的主键作为外键参照了idCard --><one-to-one name="idCard" constrained="true"/> hibernate一对一主键关联映射(双向关联Person<---->IdCard)需要在idcard映射文件中加入<one-to-one>标签指向person,指示hibernate如何加载person 默认根据主键加载hibernate一对一唯一外键关联映射(单向关联Person---->IdCard)一对唯一外键关联映射是多对一关联映射的特例可以采用<many-to-one>标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一通过这种手段映射一对一唯一外键关联hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard)一对一唯一外键关联双向,需要在另一端(idcard),添加<one-to-one>标签,指示hibernate如何加载其关联对象,默认根据主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:<one-to-one name="person" property-ref="idCard"/> hiber nate多对一关联映射关联映射的本质:* 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用<many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one>中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致<many-to-one>标签的定义示例:* <many-to-one name="group" column="groupid"/>理解级联的含义?* 是对象的连锁操作hibernate多对多关联映射(单向User---->Role)具体映射方式:<set name="roles" table="t_user_role"> <key colu mn="userid"/><many-to-many class="com.bjsxt.hibernate.Role" colum n="roleid"/> </set>hibernate多对多关联映射(双向User<---->Role)映射方法:<set name="roles" table="t_user_role"> <key column="userid"/><many-to-many class="com.bjsxt.hibernate.Role" col umn="roleid"/>struts2配置步骤1.将文件struts2-blank-2.0.11.war解压,将lib下的5个jar文件放到项目的lib下2.web.xml添加过滤器和默认配置文件,注册一个FilterDispatcher<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatch er</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>3.在src目录下创建struts.xml(项目发布后,struts.xml将会被复制到WEB-INF/classes下面)在空的struts.xml中填入<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="default" namespace="/"extends="struts-default"><!--添加Action定义--></package></struts>//package可以将Action分类,划分到不同的包中,java中的包不可以继承,而这些包可以互相继承,包括拦截器,action映射等都可以继承 extend支持多个文件的定义,如user.xml格式和struts.xml相同,可以放在src或src的子文件夹下最后在struts.xml中使用include嵌入<include file="user.xml"/><include file="util/POJO.xml"/>4.新建类继承ActionSupport在其中设定方法和属性,在方法中给属性赋值,返回SUCCESS常量5.struts.xml 中加入一个action 定义<action name="Hello" class="demo.HelloWord"><result name="success">/index.jsp</result></action>6.index.jsp页面显示属性值<s:property value="message"/> 或使用EL表达式7访问http://localhost:8080/Struts2_prj/Hello.actiontomcat位置:D:\tomcat\apache-tomcat-5.5.23jdk位置:D:\Program Files\Java\jdk1.6.0_01CATALINA_BASE:D:\tomcat\apache-tomcat-5.5.23CATALINA_HOME:D:\tomcat\apache-tomcat-5.5.23 ClassPath:.;%JAVA_HOME%\lib\*.jar;%JAVA_HOME%\lib\tools.j ar;%CATALINA_HOME%\common\lib\servlet.jar;JAVA_HOME:D:\Program Files\Java\jdk1.6.0_01Path:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\Syst em32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%J AVA_HO ME%\bin;%CATALINA_HOME%\binStruts2中的动态方法调用和使用通配符定义actionstruts2中的动态方法调用(Dynamic method Invoc)struts2中无需配置就可以直接调用Action中非execute方法的方式,就是用struts2的动态方法调用。
J2EE基础知识积累1. ⾯向对象的思维:1. 有哪些类那些对象2. 这些类中,每种类应该具有某种属性和⽅法3. 考虑类与类之间应该具有什么样的关系3.1. 成员变量可以使⽤java语⾔中的任何⼀种数据类型(包括基本类型和引⽤类型)2. 在定义成员变量时可以使其初始化,如果不对其初始化,java使⽤默认的值对其初始化3. 成员变量的租⽤范围为整个类型4. 如何在内存中区分类和对象1. 类是静态的概念,代码区2. 对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)⽽⽅法只有⼀份,执⾏的时候才占⽤内存eg:String s// 声明⼀个String类型的引⽤变量,但并没有使他指向⼀个对象s=new String("Hello world")// 使⽤new语句创建⼀个String类型的对象并⽤s指向他,以后可以通过s完成对其的操作5. ⽅法调⽤时值传递6. ⽅法⼀旦执⾏完毕,为这个⽅法所分配的局部变量的内存(栈内存⽴刻消失,堆内存可能不是马上消失,等垃圾回收齐回收之后就消失)⾃动消失7. 基础类型的变量就⼀块内存在栈内存中,引⽤类型的变量两块内存(堆内存和栈内存)8. 重载指的是⽅法名相同,参数不同,参数不同包括参数个数和参数的类型不同9. 同⼀类的每个对象有不同的成员变量存储空间同⼀类的每个对象共享该类的⽅法:⾮静态⽅法是针对每个对象进⾏调⽤的。
10. this关键字:1. 在类的⽅法定义中使⽤的this关键字代表使⽤该⽅法的对象的引⽤.2. 当必须指出当前使⽤⽅法的对象是谁要使⽤this.3. 有时使⽤this可以处理⽅法中成员变量和参数重名的情况4. this可以看做是⼀个变量,他的值是当前对象的引⽤.11. static 关键字:1. 在类中,⽤static声明的成员变量为静态成员变量,他为该类的公⽤变量,在第⼀次使⽤时被初始化,对该类的所有对象来说,static成员变量只有⼀份.2. ⽤static声明的⽅法为静态⽅法,在调⽤该⽅法时,不会将对象的引⽤传递给他,所以static⽅法中不可以访问⾮static的成员.2) 静态⽅法不再是针对于某个对象的调⽤,所以不能访问⾮静态成员。
JDBC1、JDBC开发的基础:»装入jdbc驱动程序»创建与数据库的连接»创建语句对象---Statement|PreparedStatement»利用语句对象执行sql语句得到结果»处理结果»jdbc应用结束2、JDBC常用的接口:»使用java.sql包»接口—DriverManager—Connection—Statement—PreparedStatement—ResultSet3、我们现在使用Access数据库进行举例:第一步:加载数据库驱动String DBDriver = “sun.jdbc.odbc.JdbcOdbcDriver”;Try{Class.forName(DBDriver);}Catch(Exception e){System.out.println(“驱动加载失败!”);}第二步:连接数据库String url = “jdbc:odbc:textdb”;Connection conn = null;Try{con = DriverManager.getConnection(url);//这里主要是数据库没有设置密码,要是设置了密码的话,就要使用下面的。
//con = DriverManager.getConnection(url,id,password);}Catch(Exception e){System.out.println(“数据库连接失败!”);}第三:对数据库进行操作※主要涉及到的就是:Statement和PreparedStatement接口。
//定义用于操作数据库的Statement对象,并且通过Connection对象实例化Statement对象。
Statement stmt = null;Try{Stmt = conn.createStatement();}Catch(Exception e){Out.Println(“数据库操作失败!”);}※※这样之后我们就可以使用这个实例化好的对象执行SQL 语句。
JDBC1 •两种建立数据库连接的方式?1、DriverManager 机制(JDBC):API: java.sql 核心APIDriverManager机制的弊端:(1)是一个同步的类,一次只有一个线程可以运行(2)与数据库相关的连接信息都包含在类中,如果用户更换另一台计算机作数据库服务器,就需要重新修改URL变量、重新编译、部署;(3)用户的用户名、口令也包含在类中,丧失了安全性2^ DataSource 机制(JNDI):API: javax.sql 可扩展API连接方式:连接池2•事务:哪些种Java事务类型?事物:保证一系列数据库操作能够准确的完成,除非事务中的所有操作都成功,否则事务就不会完成事务的4 个特性(ACID): Atomicity (原子性)、Consistency (一致性)、Isolation (隔离性)、Durability (持久性)Java事物类型:(1)JDBC 事务:(2)JIA (Java Transaction API)事务(3)容器事务解释jdbc的数据源机制1 > DataSource 是JDBC Connection 对彖的一个工厂2、允许使用已经在JNDI命名服务中注册的DataSource对象建立连接,市驱动程序供应商实现3、连接池机制:(1)Application Server启动时,创建通向数据库资源的连接池。
连接池包含多个JDBC连接。
(2)当应用程序需要访问数据库时,从连接池中取得一个连接,使用该连接与数据库通信;一旦工作完成,关闭数据库连接,释放回连接池中。
(3)连接池与连接到数据库对比:连接到数据库:需要通信、内存、授权等來创建连接,代价昂贵;对于访问站点的每一个客户机都建立了一个新的连接,费用太髙连接池:重用连接,而非建立新连接;一组加载到内存中的数据库连接,以便重攵使用;允许共亭数据库连接,不是为每个客户分别提供单独的连接;借助连接池,对连接数量进行必要的定量限制,数据库才是最有效的。
第一章JavaEE介绍和环境配置JavaEE的定义:JavaEE是一个开放的、基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级的应用。
JavaEE的核心思想是什么?1.用来开发N层结构的程序2.JavaEE是一个基于标准的开放的平台JavaEE的三层结构1.运行在客户端机器上的客户层组件。
如应用客户端程序和Applets,是客户层组件,它们可以直接访问数据库。
2.运行在JavaEE服务器上的Web组件。
Java Servlet和JavaServer Page(JSP)是Web层组件,它们也可以访问数据库,运行在服务器中的Web容器中。
3.运行在JavaEE服务器上的业务逻辑层组件。
Enterprise JavaBeans(EJB)是业务层组件,也可以访问数据,运行在服务器中的EJB容器中。
JDBC(Java Database Connectivity):JDBC API为访问不同的数据库提供了一种统一的途径。
JNDI(Java Name and Directory Interface):JNDI API被用于执行名称和目录服务,它提供了一致的模型来存取和操作企业级的资源或应用服务器中的对象。
EJB(Enterprise JavaBeans):EJB提供了一个框架来开发和实施分布式商务逻辑,显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。
RMI(Remote Method Invoke):RMI协议调用远程对象上的方法,是被EJB使用的更底层的协议。
JSP(Java Server Pages):JSP页面由HTML代码和嵌入其中的Java代码所组成。
服务器在页面被客户端所请求以后,对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
Java Servlet:Servlet是一种小型的Java程序,是比JSP更加底层的组件,完成的功能和JSP 类似。
JDBC
1 ?两种建立数据库连接的方式?
1、DriverManager 机制(JDBC):
API: java.sql 核心API
DriverManager机制的弊端:
(1)是一个同步的类,一次只有一个线程可以运行
(2)与数据库相关的连接信息都包含在类中,如果用户更换另一台计算机作数据库服务器,
就需要重新修改URL变量、重新编译、部署;
(3)用户的用户名、口令也包含在类中,丧失了安全性
2^ DataSource 机制(JNDI):
API: javax.sql 可扩展API
连接方式:连接池
2?事务:哪些种Java事务类型?
事物:保证一系列数据库操作能够准确的完成,除非事务中的所有操作都成功,否则事务就不会完成
事务的4 个特性(ACID): Atomicity (原子性)、Consistency (一致性)、Isolation (隔离性)、Durability (持久性)
Java事物类型:
(1)JDBC 事务:
(2)JIA (Java Transaction API)事务
(3)容器事务解释jdbc的数据源机制
1 > DataSource 是JDBC Connection 对彖的一个工厂
2、允许使用已经在JNDI命名服务中注册的DataSource对象建立连接,市驱动程序供应商实现
3、连接池机制:
(1)Application Server启动时,创建通向数据库资源的连接池。
连接池包含多个JDBC连接。
(2)当应用程序需要访问数据库时,从连接池中取得一个连接,使用该连接与数据库通信;一旦工作完成,关闭数据库连接,释放回连接池中。
(3)连接池与连接到数据库对比:
连接到数据库:需要通信、内存、授权等來创建连接,代价昂贵;对于访问站点的每一个客户机都建立了一个新的连接,费用太髙
连接池:重用连接,而非建立新连接;一组加载到内存中的数据库连接,以便重攵使用;允许共亭数据库连接,不是为每个客户分别提供单独的连接;借助连接池,对连接数量进行必要的。