编程学习笔记——高级.doc_第1页
编程学习笔记——高级.doc_第2页
编程学习笔记——高级.doc_第3页
编程学习笔记——高级.doc_第4页
编程学习笔记——高级.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HTTP协议HTTP协议是一个无状态协议,基于客户端/服务器模型。HTTP客户端需要与服务器建立一个连接,并将一则请求消息通过连接发送到HTTP服务器,以请求响应的资源,然后在服务器返回带有请求资源的响应消息,一旦回答了请求,服务器则关闭连接,在计算机与服务器上没有存储连接消息。HTTP协议使用端口发送和接收消息,端口是协议发送和接收数据的信道或机制。80端口为HTTP协议默认端口。JSP/Servlet/JavaBeanJavaEE包括的技术JavaEE是一个开发分布式企业级应用的规范和标准,JavaEE应用程序是有组件构成的,JavaEE组件是具有独立功能的单元。JavaEE与框架的关系框架技术是在JavaEE的基础上形成的,而应用程序是在框架的基础上形成。JavaEE体系结构应用程序的三层结构可分为:1、 表示层:由用户界面和用于生成界面的代码组成2、 中间层:包含系统的业务和功能代码3、 数据层:负责完成存取数据库的数据和对数据进行封装三层体系结构的优点:1、 一个组件的更改不影响其他组件2、 可以方便的扩展表示层3、 代码重复减少4、 良好的分工与协作JavaEE技术内容表示层技术1、 HTML2、 JavaScript3、 Ajax:Ajax并不是一种技术,而是几种技术的整合,主要功能是异步想服务器段发送请求,处理数据或者根据返回的数据重新显示页面。中间层技术1、 JSP:显示动态内容的服务器网页。2、 Servlet:接受客户端请求,并做出响应的Java程序3、 JSTL:辅助JSP显示动态内容的标准标签库4、 JavaBean:JavaEE的模型组件5、 中间层的框架技术:Struts框架主要扩展了Servlet数据层技术1、 JDBC技术2、 数据层框架技术:Hibernate提供了以对象的形式操作关系型数据库数据的功能。系统集成技术1、 JAX-WS技术:(Java API for XML Web Service)是JavaEE平台的重要组成部分,简化了使用Java技术开发Web服务的工作。2、 JNDI技术:(Java Naming and Directory Interface ,Java 命名与目录接口)是一组在Java应用中访问命名和目录服务的API。表单GET请求和POST请求的区别:1、 GET请求提交数据在地址栏内显示,不安全,而POST不显示2、 GET提交数据量有限制,255个字符,而POST不限制3、 GET请求的页面可以设置为书签或使用邮件发送,而POST不可以ServletServlet基础Servlet是一个Java程序,是在服务器端运行以处理客户端请求并做出响应的程序。创建Servlet类必须继承HttpServlet类。实现doGet()或者doPost()方法。创建Servlet时,必须要继承自HttpServlet,HttpServlet作为一个抽象类用来创建用户自己的Servlet,HttpServlet的子类至少要重写doGet()和doPost()方法中的一个。Servlet生命周期1、 加载和实例化Servlet容器负责加载和实例化Servlet,当客户端发送一个请求时,Servlet容器会查找内存是否存在Servlet实例,如果不存在,就创建一个Servlet实例。如果存在Servlet实例,就直接存内存中取出该实例来响应请求。2、 初始化Servlet容器加载好后,必须进行初始化,初始化Servlet时,可以设置数据库连接参数,建立JDBC连接,或者是建立对其他资源的引用,初始化时init()方法被调用,此方法在javax.servlet.Servlet接口中定义。3、 服务Servlet被初始化以后,就处于能响应请求的就绪状态,当客户端有一个请求时,Servlet容器将Servlet Request和Servlet Response对象都转发给Servlet ,这两个对象以参数的形式传给service()方法。在service()内,对客户端的请求方法进行判断,然后决定到底调用doGet()方法还是doPost()方法。4、 销毁Servlet的实例是由Servlet容器创建的,所以实例的销毁也是由容器来完成,即Servlet的destroy()方法。destroy()方法指明那些资源可以被系统回收,而不是由destroy()方法直接进行回收。Servlet的部署与配置web.xml配置文件loginServlet设定当前Servlet的内部名称com.servlet.loginServlet指定对应Servlet内部相关类loginServlet通过Servlet内部名把URL和CLASS绑定/loginServlet用户访问Servlet的URLFilterFilter(过滤器):用户的请求在到达Servlet前,先由过滤器做一番预处理,如验证用户身份、准备日志等。必须实现javax.servlet.Filter接口。import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class Filter implements javax.servlet.Filter public void destroy() public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException request.setCharacterEncoding(utf-8);filterChain.doFilter(request, response);public void init(FilterConfig arg0) throws ServletException web.xml配置文件 filter内部名称 Filter指定相关类 filter通过内容名称把URL和CLASS类绑定 /*用户访问的URL,*表示所有访问 会话跟踪由于HTTP协议是无状态协议,如果仅用HTTP协议是不能够进行用户状态的跟踪的。因此Java Servlet API 中引入session机制来跟踪客户的状态,session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程。在一个session中,客户可能会多次请求访问同一个网页,可有可能访问各种不同的服务器资源。创建会话的方法1、 HttpSession session = request.getSession(boolean value);2、 HttpSession session = request.getSession();在第一种方法中,布尔值为true时,如果存在于当前请求关联的回话,就返回该会话,负责创建一个新的会话,并把该会话返回。布尔值为false时,如果存在于与当前请求关联的回话,就返回该会话,否则返回null,不在创建会话。第二种方法等同与第一种方法中参数为true的情况。session对象的方法方法说明void setAttribute(String name,Object value)保存数据Object getAttribute(String name)读取数据session对象存储数据是以“键-值”对的形式存储关闭session时,关闭浏览器可自动关闭,也可调用invalidate()方法关闭,另外两次访问时间大于session定义的非活动时间间隔会关闭MVC设计模式MVC是一种流行的软件设计模式,它把系统分为3个模块:1、 模型(Model):对应的组件是JavaBean。模型可以分为业务模型和数据模型,它们代表应用程序的业务逻辑和状态。2、 视图(View):对应的组件是JSP或HTML文件。视图提供可交互的客户界面,想客户显示模型数据。3、 控制器(Controller):对应的组件是Servlet。控制器响应客户的请求,根据客户的请求来操作模型,并把模型的相应结果由视图展现给客户。数据库连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接;释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接遗漏。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量由最小数据库连接数来设定,无论数据库连接是否被使用,连接池都将一直保持至少拥有这么多的连接数量,最大的数据库连接数超过最大连接数时,这些请求将被加入等待队列中。数据源和JNDI资源JNDI技术:Java Naming and Directory InterfaceDataSource对象是由Web容器(Tomcat)提供,不能在程序中采用创建一个实例的方式来生成DataSource对象,javax.naming.Context提供了查找JNDI Resource的借口,例:Context ctx=new InitialContextContext接口的实现类();DataSource ds=(DataSource)ctx.lookup返回Object类型,必须强转类型(java:comp/env/Tomcat固定格式,表示Tomcat根目录jdbc/messageTomcat中指定的数据源名称);Connection conn=ds.getConnection();得到数据库连接此时Connection的close()方法的作用是:将连接放回到数据连接池中,是连接回复空闲状态。JNDI的配置在Tomcat的目录:confcontext.xml文件中节点中添加信息,例:Resource属性说明属性说明name指定Resource的JNDI名字auth指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示有容器来创建Resource,Application表示由Web应用来创建和管理Resourcetype指定Resource所属的Java类名maxActive指定数据连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不收限制maxIdle指定数据库连接池中处于空闲状态的数据连接的最大数目,取值为0,表示不收限制maxWait指定数据库连接池中数据库连接处于空闲状态的最长时间,单位为毫秒,超过这一时间将会抛出异常,取值为-1,表示可以无限制等待username指定连接数据库的用户名password指定连接数据库的口令driverClassName指定连接数据库的JDBC驱动程序url指定连接数据库的URLweb.xml文件的配置在应用程序的WEB-INF/web.xml文件中节点下添加信息,例: jdbc/message数据源名称 javax.sql.DataSource数据类型 Container resource-ref属性说明属性说明description对所引用资源的说明res-ref-name指定所引用资源的JNDI名字,与元素中的name属性对应res-type指定所引用资源的类名字,与元素中的type属性对应res-auth指定管理所引用资源的Manager,与元素中的auth属性对应属性文件定义属性文件Java中提供Properties类,读取.properties(属性)文件,一般在项目的默认路径(src)下创建文件perties文件,后缀名必须为.properties。例:driver=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver:/localhost:1433;databasename=messageuserName=sapassword=Properties类继承了HashTable,Properties类把“=”号之前的内容添加到HashTable对象的key值,同时把“=”号之后的内容存到value中.properties文件只能保存String类型的信息程序中读取属性文件Properties p=new Properties();实例化Properties类p.load读取属性文件(PropertiesTest.class.getResourceAsStream以流的形式读取文件到内存(/perties);String driver=p.get(driver).toString();String url=p.getProperty(url).toString();String userName=p.getProperty(userName).toString();String password=p.getProperty(password).toString();System.out.println(驱动:+driver);System.out.println(连接字符串:+url);System.out.println(用户名:+userName);System.out.println(密码:+password);JavaBeanJavaBean是Java中开发的可以跨平台的重用组件,它是组件体系结构,JavaBean实际上是一个Java类,这个类可以重用。从功能上分可以分为以下两类。1、 封装数据2、 封装业务JavaBean一般要满足一下要求:1、 是一个公共类,提供无参的公有构造方法2、 属性私有3、 具有公共的访问属性的getter和setter方法JavaBean用法userBean动作范围范围说明pageJavaBean只能在当前页中使用,加载新页时销毁request在用户对其发出请求时存在session一直存在于会话当中application存在与整个应用程序中框架技术框架(Framework)是个提供了可重用的公共结构的半成品,它为我们构建新的应用提供了极大的便利,一番米娜给我们提供了可以拿来就用的工具。更大意义上,给我们提供了课重用的设计。主流技术框架Struts框架Struts框架是最早的Java开源框架之一,也是现在Java Web框架的事实标准,现有的绝大多数Java Web应用程序都有基于Struts框架构建的。Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读,Struts还义工了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。Struts使开发大型Java Web项目成为可能。Hibernate框架Hibernate框架是一个优秀的持久化框架,负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工具,通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据操作的方式代表了当前的趋势。Spring框架Spring的出现改变了Java世界,它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面,它主要作为依赖注入容器和AOP实现了存在。还提供了申明式失误、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成。DWR框架DWR是一个Ajax框架,使Ajax开发更加轻松,Ajax是一种通过JavaScript代码异步请求服务器资源的技术。Struts1基于Struts1的开发由3类组件构成:控制器组件、模型组件和试图组件。控制器组件包括ActionServlet,是Struts1的核心控制器,还包括自定义的Action类,一个Action类代表客户的一个操作,自定义的Action类继承自Struts1提供的org.apache.struts.action.Action。模型组件并不由Struts提供,一般由普通的接口和JavaBean充当,需要我们自己编写实现。视图组件一般由JSP实现,还包括自定义的ActionForm类和Struts1标签。自定义的ActionForm类用于封装request中的数据,Struts可以讲request中的数据自动填充到ActionForm类中,以避免繁琐的request.getParamter()和类型转换代码。自定义的ActionForm类继承自Struts1提供的org.apache.struts.action.ActionForm。ActionSelect在系统启动的时候加载struts-config.xml配置文件。struts-config.xml配置文件中包含于Action、ActionForm、页面转发等相关的配置信息。在Web.xml中配置ActionSelect: action为核心控制器起的别名 org.apache.struts.action.ActionServletStruts1提供的核心控制器 config /WEB-INF/struts-config.xmlStruts1的配置文件的路径,可以使用多个配置文件,中间用“,”号隔开 debug 3 detail 3 0 action引用核心控制器的别名 *.do访问路径 struts-config.xml配置文件:Struts1处理请求的过程当Web服务器启动的时候ActionServlet被初始化,加载struts-config.xml文件。1、 当客户端浏览器发起请求道ActionServlet时,ActionServlet首先对请求进行一系列处理;根据请求的路径和配置信息找到对应的Action Bean和Form Bean,如果提交表单发送http:/localhost:8080/test/add.do请求到服务器的时候,ActionServlet就会根据Struts配置信息查找path属性为“/add”的Action Bean,于是找到AddAction;并得知Action的name属性为“addForm”,于是找到AddForm的实例,如果不存在则创建。2、 在去定将要调用的Action Bean和对应的Form Bean后,就将请求中包含的值填充到Form Bean中(Action可以不关联任何ActionForm)。在调用Action的execute方法前,ActionServlet还需要准备好ActionMapping参数,ActionMapping中包含了该Action的配置信息。3、 然后Struts将请求分发至相应的Action Bean处理,ActionMapping参数、ActionForm参数、request和response都作为参数传递给处理请求的Action Bean的execute方法。4、 Action调用业务逻辑方法,得到返回值,并返回ActionForward对象。5、 控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的JSP页面。6、 处理结果返回给浏览器。注意1、 ActionServlet将控制权转到页面的时候采用的是转发方式(request.getRequestDispatcher(url).forward(request,response);)所以转发的页面的request和Action方法参数中的request是同一个请求,数据可以通过request对象的attribute属性传递。2、 ActionForm根据对应Action的scope属性配置不同而生命周期有所不同。一般情况下,scope属性设为request,则每次请求开始时ActionServlet创建新的ActionForm对象,保存在request对象的attribute属性中,所以可以再Actin代码中设置ActinForm的值,在页面中取出。3、 当需要采取重定向的方式转到新的页面的时候,可以在Actin代码中使用“request.sendRedirect(url)”语句,并返回null。DispatchAction通常,一个Action中只能完成一个业务操作,通过扩展org.apache.struts.actions.DispatchAction实现的Action类可以完成一组相关的几种业务操作。扩展自DispatchAction的Action类中不必定义execute方法,而是创建一些实现业务操作的方法,如doAdd()等,但这些业务方法的掺入参数和返回值要和普通Action的execute方法相同。使用DispatchAction使用DispatchAction是,定义的Action类继承自DispatchAction,然后在配置Action时,指定一个parameter属性。动态Formstruts.xml配置Action中获取动态Form中的值:DynaActionForm dForm=( DynaActionForm)form;Struts1标签库引入Struts1标签库HibernateHibernate概述Hibernate是一个优秀的Java持久层解决方案,是当今主流的对象-关系映射工具,Hibernate的价值在于,对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。Hibernate配置文件主配置文件org.hibernate.dialect.SQLServerDialectjdbc:sqlserver:/localhost:1433;DataBase=company sacom.microsoft.sqlserver.jdbc.SQLServerDrivertrue实体类映射文件 属性说明:1、 节点的name属性对应实体类的名字,table属性对应数据库表的名字2、 节点下,有一个必须的节点,用户定义实体的标识属性(对应数据库表中的主键)3、 节点的name属性对应实体类的属性,type对应的Java类型4、 下有两个子节点,用户通过其name属性指定对应的数据库表的主键,节点用于指定主键的生成策略,native表示有数据库生成主键,assigned表示在添加新记录到数据库前由程序生成5、 节点下,每个节点指定一对属性和字段的对应关系。对象标识符生成方式标识符生成器描述increment有Hibernate自动以递增的方式生成标识符,每次增量为1。适用于代理对象标识符identity由底层数据库生成标识符,数据库必须支持自动增长字段类型。不便于统统数据库之间的移植。适用于代理对象标识符sequenceHibernate根据底层数据系列来生成标识符。前提条件是底层数据库支持序列(如Oracle)。适用于代理对象标识符hiloHibernate根据high/how算法来生成标识符。适用于代理对象标识符native根据底层数据库对自动生成标识符的支持能力来选择identity,sequence或hilo。主键类型必须是long、int或short。适用于代理对象标识符uuidHibernate采用128位UUID算法来生成标识符。UUID算法能够在网络环境中生成唯一的一个32位16进制的字符串。适用于代理对象标识符assigned由Java应用程序负责生成标识符,需在保存数据前完成。适用于代理对象标识符select通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个对象标识符foreign使用另外一个相关联的对象的标识符。常和联合起来使用选择对象标识符的建议1、 如果对象标识符的数据类型为整型(long、int、short)或对应的包装类型,为提高应用程序在不同的数据库上的移植能力,建议使用native。2、 如果对象标识符的数据类型为字符串型,为了提高应用程序在不同数据库上的移植能力,建议使用uuid。3、 如果应用是先有数据库物理模型而后简历实体模型,且使用了自然主键,那么就选择assigned。Hibernate执行持久化操作的步骤步骤操作代码与JDBC区别1读取并解析配置文件Configuration cfg=new Configuration().configure();相当于使用DataSource获取连接前读取DataSource的配置文件2读取并解析映射信息,创建SessionFactorySessionFactory sf=cfg.buildSessionFactory();相当于创建DataSource对象3打开SessionSession session=sf.openSession();相当于JDBC获得连接4开始一个事务Transaction ts=session.beginTransaction();开始事务5持久化操作session.save(u);持久化操作6提交事务mit();提交事务7关闭sessionsession.close();关闭连接Hibernate的核心类和接口Configuration类Configuration类是Hibernate的入口,负责配置并启动Hibernate。Hibernate框架通过Configuration实例加载配置文件信息,然后读取指定对象关系映射文件的内容并创建SessionFactory实例。SessionFactory接口SessionFactory接口负责初始化Hibernate,一个SessionFactory实例对应一个数据存储源(一般就是指一个数据库)。应用程序从SessionFactory中获得Session实例。SessionFactory的特点:1、 现成安全,同一个SessionFactory实例可以被应用的多个线程共享。2、 它是重量级的,因为它需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。如果一个应用程序只访问一个数据,则只需要创建一个全局的SessionFactory实例。Session接口Session是Hibernate用应用最频繁的接口。Session也被称为持久化管理器。它负责管理所有的持久化相关的操作。Session的特点:1、 单线程,非共享的对象。现成不安全,在设计软甲架构时,应该避免多个线程共享同一个Session实例。2、 Session实例是轻量级的,它的创建和销毁不需要消耗太多的资源。可以为每个请求分配一个Session实例,在每次请求过程中及时创建和销毁Session实例。3、 Session有一个缓存,它存放当前工作单元加载的对象。Session的缓存被称为Hibernate的第一级缓存。Transaction接口Transaction接口是Hibernate框架的事务接口。它对底层的事务接口做了封装,包括:JDBCAPI和JTA。这样,使得Hibernate应用可通过一致的Transaction接口来声明事务边界,这有助于应用程序在不同的环境和容器中移植。Query和Criteria接口它们是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程。Query包装了一个HQL(Hibernate Query Language)查询语句;而Criteria接口完全封装了基于字符串形式的查询语句,比Query更加面向对象,Criteria接口擅长于执行动态查询。Hibernate映射的数据类型基本数据类型的映射Hibernate映射类型Java类型标准SQL类型integer或intint或java.lang.IntegerINTEGERlonglong或java.lang.LongBIGINTshortshort或java.lang.ShortSMALLINTbytebyte或java.lang.ByteTINYINTfloatfloat或java.lang.FloatFLOATdoubledouble或java.lang.DoubleDOUBLEbig_decimaljava.math.BigDecimalNUMERICcharacterchar或java.lang.CharacterCHAR(1)stringjava.lang.StringVARCHARbooleanboolean或java.lang.BooleanBITyes_noboolean或java.lang.BooleanCHAR(1)true_falseboolean或java.lang.BooleanCHAR(1)日期和时间数据类型的映射Hibernate映射类型Java类型标准SQL类型datejava.util.Date或java.sql.DateDATEtimejava.util.Date或java.sql.TimeTIMEtimestampjava.util.Date或java.sql.TimestampTIMESTAMPcalendarjava.util.CalendarTIMESTAMPcalendar_datejava.util.CalendarDATE二进制和大对象映射类型映射类型Java类型标准SQL类型MySQLOraclebinarybyteVARBINARY或BLOBBLOBBLOBtextjava.lang.StringCLOBTEXTCLOBserializable实现java.io.Serializable接口的类VARBINARY或BLOBBOLOBBOLBclobjava.sql.ClobCLOBTEXTCOLBblobjava.sql.BlobBLOBBLOBBLOBJDK映射类型Hibernate映射类型Java类型标准SQL类型classjava.lang.ClassVA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论