java web知识点总结


 JAXP - DOM 
     1.XML解析           (1) XML解析方式
XML文档一般用来配置文件 , 其有两种解析方式 , 分别是 DOM 解析和 SAX 解析 , DOM是W3C组织推荐的标准(由于内存问题 , 没有被采用) , SAX是事实上的使用标准 .
           (2)XML解析器
        Crimson(Sun) , Xerces(IBM) , Aelfred2(dom4j)
           (3)XML解析开发包
        Jaxp(Sun) , Jdom , dom4j , pull(android 的sdk 自带)
     2.JAXP介绍
      Jaxp是Sun公司提供的一套XML解析API ;
      Jaxp很好的支持 DOM 和 SAX 解析 ;
      Jaxp开发包是J2SE的一部分 , 包括以下包或子包 , javax.xml , org.w3c.dom , org.xml.sax
      在Jaxp包中定义了几个工厂类 , 程序员调用这几个工厂类 , 可以得到对xml文档进行解析的DOM 或 SAX 解析对象 .
   3.相应的API解析
   4.
 JAXP – SAX解析 XML
 DOM4J解析 XML     1.dom4j介绍
      Dom4j 是 简单 灵活 开放的源代码库 , 其是由早起的JDOM开发团队分离出来的 , 与JDOM不同的是 , dom4j使用接口和抽象类 , 虽然API较为复杂 , 但是其提供了比JDOM更好的灵活性 .
      Dom4j是非常优秀的java xml api , 具有性能优异 , 功能强大 , 极易使用的特点 .
      采用dom4j的软件 , Hibernate , Sun的Jaxm .
      使用dom4
     2.怎样使用dom4j开发包
      (1)解压dom4j压缩包 , 在根目录下有一个 dom4j-1.6.1.jar 这是dom4j的jar包 ;
      (2)在MyEclipse中的工程的根目录下创建一个文件夹 , 命名为 lib , 将dom4j-1.6.1.jar 文件复制到 lib文件夹中 ;
(3)右键点击 dom4j-1.6.1.jar , 选择Build Path | Add to Build Path , 这样这个jar包就导入到了这个工程中 , 我们就可以使用dom4j中的类和方法了 ;
(4)在一些时候我们使用dom4j中的类和方法的时候 , 会报出 类没有找到异常 , 我们还需要导入一些其他的包 , 这些包在dom4j文件下的 lib 文件夹下 , 根据报错信息 , 找到相应的jar包 , 复制到工程下的lib文件夹下 , 然后设置 Build Path .
     3.API介绍           (1)SAXReader [read()]_org.dom4j.SAXReader , Document [getXMLEncoding()]_org. dom4j.Document
        这是dom4j提供的解析器 , 该解析器提供了一个方法 ,
read() (从一个已知的文件中读取一个Document对象) , 传入一个文件 , 返回Document对象 , 可以用来获取Document对象 .
这里注意了 , Document是一个接口 , 没有构造函数 , 不能通过构造函数获取Document对象 , 只能通过其他方法获取 .
获取Document对象的方法 : 先获取SAXReader解析器 , 即创建一个SAXReader对象 ; 然后解析xml文档 , 就是调用read()方法 , 获取Document文档 .
其中解析器read()方法 , 传入的参数是一个文件对象 , 这里可以新建一个文件 , new File(“books.xml”) ;
为了验证是否成功获取Document对象 , 我们使用Document类下的getXMLEncoding()方法 , 该方法返回的是Document对象所对应的XML文档的编码码表 , 例如UTF-8 , GBK等 , 这个码表值是在XML的第一行的标注中的.
一般XML文档的第一行都是 , 这里的encoding就是 getXMLEncoding()方法获得的返回值 .
( 返回文档的码表值 , 这个码表值是XML文档的一部分 , 当编码未指明或者未知或者系统不支持这个码表的时候其返回值为null) .
*****************************************************************************
一个获取document对象的方法:
Import java.io.File;
Import org.dom4j.Document;
Import org.dom4j.io.SAXReader;
Public static Document getDocument(){
   //获取解析器
   SAXReader  reader = new SAXReader();
   //解析XML文档
   Document  document = reader.read(new File (“books.xml”));
   //验证是否成功获取Document对象
   System.out.println(document.getXMLEncoding());
   //返回Document对象
   return document;
}
***************************************************************************
注意上面的方法导入了三个包 :
   当使用到Document的时候需要导入包 org.dom4j.Document;
   当使用到SAXReader的时候需要导入包org.dom4j.io.SAXReader ;
   当使用到File的时候 , 需要导入包 java.io.File;
           (2)Document[getRootElement()]_org.dom4j.Document , Element[]_org.dom4j.Element
        Document类下的getRootElement()方法 , 是返回根节点 .
        (返回文档的根节点) , 返回值是Element对象 , 是个XML 文档的元素 .
        Element类定义了一个XML文档的元素 , 使用Element需要提前导入包 org.dom4j.Element .
        这里注意了 : Document 和 Element 都是接口 , 都没有构造函数 , 只能通过其他方法获得 .
         ******************************************************************************
        遍历所有节点的方法 :
        (粉色的字体为要导入包的类)
        Import java.util.List;
        
        Import org.dom4j.Document;
        Import org.dom4j.Element;
        Public static void getAllBooks() throws Exception{
   //获取Document对象 , 其中的getDocument是调用的上面(1)中的方法
   Document document = getDocument();
   //获取根节点
   Element rootElement = document.getRootElement();
   //获得所有的书
   List bookList = rootElement.Elements();
   //遍历所有的书
   For(int i = 0 ; I < bookList.size() ; i++){
   //获得每一本书 , 注意从集合中获取元素 , 涉及到强转
   Element book = (Element)bookList.get(i);
   List childList = book.Elements();
   //获取每一本书的子节点
   For(int j = 0 ; j < childList.size() ; j++){
   Element child = (Element)childList.get(j);
   System.out.println(child.getName() + ”:” + child.getText());
}
}
}
****************************************************************************
        代码解析 :
           A.Element调用的getName()和getText()方法 .
              getName()和getText()方法并不是Element类下定义的方法 , Element类是Node类的子类 , 这两个方法是从Node类中继承的 .
              (返回这个结点的名字) ;
              (返回这个结点的文本) ;
           B.导入包的介绍:
              当使用Document类的时候需要导入包 org.dom4j.Document ;
              当使用Element类的时候需要导入包 org.dom4j.Element ;
              当使用List类的时候需要导入包 java.util.List .
           C.代码思想
              从根节点之后 , 调用Element()方法 , 将结点的子节点放入一个集合中 .
然后遍历这个集合 , 将元素从集合中取出 , 注意从集合中取出元素 , 集合并不知道取出的是什么类型 , 取出的类型一律为Object  , 这里我们需要将取出的元素强转为Element类型 .
然后在调用Element()方法 , 获取从集合中取出的Element类型的子节点 , 以此类推 .
最后是将元素的名称和文本输出 , 树有几层 , 有要嵌套几层循环 , 只在最内层的循环中输出元素名称和文本 .
   `      
根节点rootElement , 在XML文档中是标签 ;
获取根节点的子节点book , rootElement.element() , 获取的就是标签下的子标签 ;
获取book的子节点child , book.element() , 获取的就是标签下的子标签和<price>;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">获取<title>标签的标签名的方法  getName()  , 获取<title> 标签文本的方法 getText .</span> </div> <span style="word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       (3)Element[attributeValue(qName)]_org.dom4j.Element , String[equalsIgnoreCase()]</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        AttributeValue(qName)是Element下的方法 , 其返回值是 , 返回名称为qName属性的属性值 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        equalsIgnoreCase()是String类下的方法 , 目的是判断两个String类死否相等 , 不区分大小写 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">         *******************************************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        获取实体类集合的方法:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span>Import java.util.List; </div> <div style="word-wrap:break-word">         Import java.util.ArrayList; </div> <div style="word-wrap:break-word">         Import java.io.File; </div> <div style="word-wrap:break-word">          </div> <div style="word-wrap:break-word">         Import org.dom4j.Document; </div> <div style="word-wrap:break-word">         Import org.dom4j.io.SAXReader; </div> <div style="word-wrap:break-word">         Import org.dom4j.Element; </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Public static List getBooks() throws Exception{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//获取document , 先获取解析器 , 再通过解析器获得document </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">SAXReader</span> reader = new SAXReader();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">Document</span> document = reader.read(new <span style="word-wrap:break-word">File</span>(“books.xml”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//获取根节点 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">Element</span> rootElement = document.getRootElement();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//获取根节点的子节点的集合 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">List</span> bookList = rootElement.elements();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//创建存取书的实体类集合 , 该实体类已在本包中定义 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   List returnBook = new <span style="word-wrap:break-word">ArrayList</span>();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//将xml文档中的信息存到Book实体类中 , 然后将Book实体类存入到returnBook集合中 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   For(int i = 0 ; i < bookList.size() ; i ++){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//获得每一本书 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Element book = (Element)bookList.get(i);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//创建Book实体类 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Book bookBean = new Book();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//设置id </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   bookBean.setId(book.attributeValue(“id”));</span> </div> <div style="word-wrap:break-word">    //获取书的子标签集合 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   List childList = book.elements();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span>//获取每一个标签 , 将标签的文本放到Book实体类中 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   For(int j = 0 ; j < childList.size() ; j ++){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      Element child = (Element)childList;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      If(“title”.equalsIgnoreCase(child.getName())){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   bookBean.setTitle(child.getText());    </span>//设置titile字段 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}else if(“price”.equalsIgnoreCase(child.getName())){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   bookBean.setPrice(child.getText());    </span>//设置price字段 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">returnBook.add(bookBean);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Return returnBook;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">********************************************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">代码解析 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A.  Book类是在这个包中定义的一个存放xml文档信息的实体类 , 其有三个字段 , id , title 和 price , 以及有相应的get set方法 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">设置字段的时候直接使用其set方法即可 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">B.  该代码中Element类中所调用的getName()和getText()方法 , getName()方法是返回xml文档元素的标签名 , getText()方法是返回xml文档元素的标签内的文本 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">C.  导入包介绍</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用 <span style="word-wrap:break-word">List</span> 类的时候需要导入包 <span style="word-wrap:break-word">java.util.List </span>;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用 <span style="word-wrap:break-word">ArrayList</span> 类的时候需要导入包 <span style="word-wrap:break-word">java.util.ArrayList</span> ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用<span style="word-wrap:break-word"> File</span> 类的时候需要导入包<span style="word-wrap:break-word"> java.util.io.File</span> ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用 <span style="word-wrap:break-word">SAXReader </span>类的时候需要导入包 <span style="word-wrap:break-word">org.dom4j.io.SAXReader</span> ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用 <span style="word-wrap:break-word">Document</span> 类的时候需要导入包 <span style="word-wrap:break-word">org.dom4j.Document</span> ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当使用 <span style="word-wrap:break-word">Element</span> 类的时候需要导入包 <span style="word-wrap:break-word">org.dom4j.Element </span>;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        D. 代码思想</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">通过SAXReader解析器获取document , 然后通过document方法获取根节点<books> , 获取到根节点之后 , 就可以获得二级节点 book , 然后就可以获取book下的子标签 child的标签名和文本 , 将book的属性id 和 book的子标签的标签名和文本名设置到Book的实体类bookBean中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">这里涉及到了两层嵌套循环 , 第一层循环获取book标签 , 第二层循环获取book标签下的子标签 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">四</span><span style="font-family:Times New Roman; word-wrap:break-word"> JDK</span><span style="font-family:宋体; word-wrap:break-word">新特性</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">静态导入</span><span style="font-family:Arial; word-wrap:break-word"> Static Import</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">静态导入介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           静态导入就是导入某个类的静态属性或静态方法 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">语法</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">:</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. <span style="word-wrap:break-word">导入指定的单个静态属性</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">import static 包名.类名.静态属性 ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           例如 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Import static java.lang.System.out ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. <span style="word-wrap:break-word">导入指定静态方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">import static 包名.类名.静态方法 ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           例如 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Import static java.lang.Math.max ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              注意导入静态方法的时候 , 只写上方法名 , 括号/修饰符/参数列表/方法体等不带 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. <span style="word-wrap:break-word">导入指定类全部静态属性和方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">import static 包名.类名.* ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           例如:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Import static java.lang.Math.* ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              注意: 加上了static , 后面有*的话导入的全是静态的属性和静态方法 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果没有加上static , 那么导入的就是所有的属性和方法 , 包括静态的和非静态的 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">代码示例</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">:</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        ****************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        import java.lang.Math.PI ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        import java.lang.Math.max ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        public static void main(String[] args){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           //导入静态字段 , 属性</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   double a = Math.PI ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   System.out.println(a) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   System.out.println(PI) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   //导入静态方法</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Int b = Math.max(1, 2) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   System.out.println(b);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   System.out.println(max(1,2));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">*******************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">代码思想 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果没有导入静态字段和方法 , 不能直接使用PI和max()方法 , 如果使用了就会报错 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">自动装箱</span><span style="font-family:Arial; word-wrap:break-word">,</span><span style="font-family:黑体; word-wrap:break-word">拆箱</span><span style="font-family:Arial; word-wrap:break-word"> AutoBoxing/Unboxing</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (1)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. </span><span style="font-family:黑体; word-wrap:break-word">泛型</span><span style="font-family:Arial; word-wrap:break-word"> Generics</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">泛型介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. Jdk5.0之前 , 对象保存到集合中就会失去其特性 , 取出时通常要程序员手工进行类的强制转化 , 这样就不可避免的引发一些程序上的安全性问题 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 泛型格式 : 类型<T></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. 泛型的基本术语</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              以ArrayList<E>为例 , 念作 ArrayList type of E ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              ArrayList<E> , E称为类型参数变量 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              ArrayList<Integer> , Integer成为实际类型参数 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <span style="word-wrap:break-word">ArrayList<E> 整个称为泛型类型 ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              ArrayList<Integer>成为参数化的类型ParameterizedType .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">泛型的作用</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Jdk5中的泛型 , 允许程序员在编写集合代码的时候 , 就限制集合的处理类型 , 从而将运行时可能发生的问题 , 转变为编译时的问题 , 从而提高程序的可读性和稳定性 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这个作用在大型程序中尤为突出 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">类型擦出</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        泛型是提供给javac编译器使用的 , 它用于限定集合的输入类型 , 让编译器在源码级别上挡住向集合中插入非法数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        编译器编译完带有泛型的java源文件之后 , 生成的class文件不再带有泛型信息 , 这个过程称为类型擦出(type erasure) .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        public void print(List<String> list){}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        public void print(List<Integer> List){}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        上面两个方法不能同时存在 , 由于类型擦出效果 , 这两个方法在编译之后生成的class文件是没有区别的 , 这样两个函数就完全相同了 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(4)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">泛型的典型应用</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     4. </span><span style="font-family:黑体; word-wrap:break-word">增强</span><span style="font-family:Arial; word-wrap:break-word">for</span><span style="font-family:黑体; word-wrap:break-word">循环</span><span style="font-family:Arial; word-wrap:break-word"> (for - each)  Enhanced for Loop</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (1)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (2)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (3)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     5. </span><span style="font-family:黑体; word-wrap:break-word">可变参数</span><span style="font-family:Arial; word-wrap:break-word">  Varargs</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     6. </span><span style="font-family:黑体; word-wrap:break-word">枚举</span><span style="font-family:Arial; word-wrap:break-word"> Typesafe Enums</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">五</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span><span style="font-family:宋体; word-wrap:break-word">反射</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">反射介绍</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      反射就是通过字节码文件 , 获得类中的构造函数 , 方法 , 字段 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      注意 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      Class下的api  , 获得公共的构造函数 , 方法 : getConstructor() , getMethod() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      获得声明的构造函数 , 方法 : getDeclareConstructor() , getClareMethod() , 这里获得的构造函数或者方法不一定是公共的 , 私有的也可以获得 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">获得</span><span style="font-family:Arial; word-wrap:break-word">Class</span><span style="font-family:黑体; word-wrap:break-word">类</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">通过类名获得</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Class</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">对象</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">注意这个类名不带 .class 后缀</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Class clazz = Class.forName(“my.cn.itcast.reflect.ReflectTest”);</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">通过已知类获得</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Class</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">对象</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        直接将字节码文件赋给Class对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Class clazz2 = ReflectTest.class ;</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">通过已知对象获得</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Class</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">对象</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Object object = new ArrayList();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">         Class clazz3 =  object.getClass();</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(4)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">实例化</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Clazz.newInstance() ; 是调用获得的Class对象默认的构造函数创建相应的实例 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. Constructor</span><span style="font-family:黑体; word-wrap:break-word">类</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得公共的构造函数</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Clazz是Class类对象 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Constructor con = clazz.getConstructor();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这样con就是返回的构造函数 , 如果想要调用这个构造函数创建实例 , 可以使用 con.newInstance()创建实例 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        使用clazz.newInstance()调用默认的构造函数创建实例 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得声明的构造函数</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">可获得私有构造函数</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">)</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Constructor con = clazz.getDeclaredConstructor(String.class , Integer.class) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   在类中这个构造函数是私有的 , 我们如果使用con.newInstance()调用这个方法 , 就会吧报出异常 , 我们如果想要调用这个私有的构造方法创建实例 , 就要将该构造函数设置为可访问的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">Con.setAccessible(true);</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   进行了以上设定之后 , 我们就可以使用con.newInstance()方法创建实例了 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      4. Field</span><span style="font-family:宋体; word-wrap:break-word">类</span></span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得公共的字段</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Class类中有可以获取Filed类对象的方法 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Class clazz = Class.forName(“cn.itcast.reflect.ReflectData”);   //获得Class类对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Object obj = clazz.newInstance();   //调用默认函数实例化</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        //获得公共字段</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Field field = class.getField(“name”) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        System.out.println(field.get(obj));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Field类下的get(Object object) 方法 , 将指定对象上该Field字段值返回 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得私有的字段</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Field field = clazz.getDeclaredField(“age”) ;</span> </div> <div style="word-wrap:break-word"> <span style="font-size:14px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Courier New; word-wrap:break-word">        </span>使用<span style="font-family:Courier New; word-wrap:break-word">Class</span>类下的<span style="font-family:Courier New; word-wrap:break-word">getDeclaredField()</span>方法可以获取私有的字段值<span style="font-family:Courier New; word-wrap:break-word"> , </span>传入的参数是字段值的名称<span style="font-family:Courier New; word-wrap:break-word"> .</span></span></span> </div> <div style="word-wrap:break-word"> <span style="font-size:14px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Courier New; word-wrap:break-word">        </span>注意<span style="font-family:Courier New; word-wrap:break-word"> , </span>私有的字段值不能被访问<span style="font-family:Courier New; word-wrap:break-word"> , </span>如果强行访问就会报出异常<span style="font-family:Courier New; word-wrap:break-word">  , </span>若想要正常访问<span style="font-family:Courier New; word-wrap:break-word"> , </span>需要将其设置为可访问<span style="font-family:Courier New; word-wrap:break-word"> .</span></span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Courier New; word-wrap:break-word"><span style="font-size:14px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">        Field.setAccessible(true) ;</span></span></span> </div> <div style="word-wrap:break-word"> <span style="font-size:14px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Courier New; word-wrap:break-word">        </span>这个<span style="font-family:Courier New; word-wrap:break-word">Accessible</span>默认为<span style="font-family:Courier New; word-wrap:break-word">false , </span>我们设置其为<span style="font-family:Courier New; word-wrap:break-word">true , </span>之后就能访问相应的字段<span style="font-family:Courier New; word-wrap:break-word"> .</span></span></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     5.Method</span><span style="font-family:黑体; word-wrap:break-word">类</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得公共方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Class clazz = Class.forName(“cn.itcast.”) ;     //根据名称获取Class对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">         Object obj = clazz.newInstance();   //调用默认的构造函数创建Class对象实例</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        //getMethod()是Class类下的方法</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Method method = Clazz.getMethod(“print”) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        注意 , 这个方法传入的参数情况 , 必须传入的参数是方法名 , 后面还可以传入方法的参数类型类别 , 注意这个类型格式是 类型名.class .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        例如 : 原来的方法是 public void print(int i , List list){} 如果想要获得这个方法就要使用下面的代码:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Method method = clazz.getMethod(“print” , int.class , List.class) , 后面的是一个可变参数 , 可变参数就是可以使任意个参数 , 参数个数和类型由方法的参数决定 , 如果原来的方法没有参数 , 在getmethod()方法中只传入方法名 , 如果原来的方法中有n个参数 , 那就在获取这个方法的时候 , 除了传入方法名之外 , 还要传入那n个变量类型 , 注意变量类型格式 , 类型名.class .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        method.invoke(obj);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   invoke()方法是Method下的方法 , Method对象调用这个方法 , 传入一个字段所在类的对象 , 和一个可变参数(就是方法自身的参数 , 格式仍然是 参数类型名.class) , 相当于传入的对象调用这个方法 , 调用方法的同时传入后面的可变参数 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">获得私有方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Method method = clazz.getDeclaredMethod(“print” , int.class);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Method类下有一个getDeclaredMethod()方法 , 传入的参数与getMethod()方法传入的参数相同 , 一个方法名称字符串 , 一个可变参数 , 可变参数是方法参数类型 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这个方法也能调用 method.invoke(obj , 1234) 执行 , 执行前必须将这个方法设置成可访问 , 否则就会报出异常 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        method.accessiableValue(true) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        method.invoke(obj , 1234);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这样就相当于执行了原来的私有方法 , 传入参数1234 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     6.</span><span style="font-family:黑体; word-wrap:break-word">反射总结</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (1)获得构造函数(Constructor) , 字段(Field)的方法都是在Class类中定义的 , 这几种方法都不是静态的 , 需要通过对象实例调用 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (2)获得公共构造函数和公共字段 : getConstructor() , getField()</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        getConstructor()中传入类型.class 参数类型列表 , 例如 String.class , int.class 等 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        getField() 中传入的是字符串 , 如果字段名(成员变量名)为 name , 那么就将 “name” 传入到方法中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (3)获得私有的构造函数和私有字段 : getDeclaredConstructor() , getDeclaredField() , 传入的参数与获得公共的构造函数和公共字段方法传入的参数相同 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        私有的构造函数和私有的字段不能直接被调用 , 如果想要调用私有的构造函数和私有字段 , 需要将相应的私有构造函数和私有字段设置为可访问的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在Constructor和Field下有setAccessible()方法 , 传入一个布尔值 , 默认的为false , 传入true , 就可以调用相应的私有构造函数和私有字段了 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">(4)注意使用Constructor类和Class类下的newInstance方法创建的实例 , 其类型为Object类型的 , 系统不知道其原来的类型是什么 , 如果要将实例赋值给原来的类型, 就需要强制转换类型 , 这里跟从集合中取出对象是一个道理的 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">六</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span><span style="font-family:宋体; word-wrap:break-word">单例</span></span></span> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"></span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"></span></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">单例描述</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">单例就是一个类在整个程序中只有一个实例 , 不能存在第二个该类的实例 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">单例模式的实现方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. 私有化构造方法 , 由于只能存在一个实例 , 那么就不能调用构造方法 , 使用户不能通过构造函数创建实例 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 获取方法:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           通过公共静态方法创建单一的实例 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           通过静态工厂方法获取实例 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">单例模式代码实例</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        *************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        饿汉模式:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Public class SingletonTest{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Private SingletonTest(){    //私有化构造函数</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Private static SingletonTest sing = null ;      //声明一个私有的对象 , 并赋值null</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Static{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Sing = new SingletonTest()     //在静态代码块中创建对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Public static SingletonTest getInstance(){      //公共静态方法返回这个单例对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Return sing;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">*************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        代码分析:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A.    方法以及变量的修饰符分析</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">构造函数私有化是为了避免用户调用构造函数 , 创建出实例 , 由于只能创建一个实例 , 所以我们只能在类内部创建这个实例 , 不能在外部创建实例 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">声明一个私有的对象 , 这个对象不能被外部调用 , 这是为了专门提供给共有的方法来调用的 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">静态代码块在类第一次加载的时候执行 , 且只执行一次 , 一旦执行过了 , 下一次在加载类就不会执行这个静态太代码块了 , 这也是饿汉模式的原因 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">该类中只有一个公有的方法 , 这个方法提供给外部调用 , 用来获得唯一的一个实例 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 为什么叫饿汉模式</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           由于创建实例是放在静态代码块中执行的 , 仅执行一次 , 不管取出多少次 , 就仅将第一次创建的实例返回 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">         ********************************************************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        懒汉模式 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Public class SingletonTest2{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Private SingletonTest2(){   //私有化构造函数</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Private static SingletonTest2 sing = null;      //声明实例对象 私有静态</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Public static SingletonTest2 getInstance(){     //设置公共静态的方法 , 供用户调用唯一的实例对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   If(sing == null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Sing = new SingletonTest2();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Return sing ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">*********************************************************************************************</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        代码分析:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A.    构造函数私有化 , 避免用户调用构造函数 , 创建多余的实例 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">B.    懒汉模式 : 不管之前有没有创建实例 , 都调用这个方法 , 如果没有创建就创建 , 如果创建了就直接返回 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">七</span><span style="font-family:Times New Roman; word-wrap:break-word"> Web</span><span style="font-family:宋体; word-wrap:break-word">入门</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. Web</span><span style="font-family:黑体; word-wrap:break-word">开发相关知识</span><span style="font-family:Arial; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)B/S</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">模式</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Web采用B/S模式 , 通过超文本传输协议(HTTP , Hypertext transport protocol)进行通信 , 是无状态通信 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B/S是 Browser / Server , 浏览器服务器架构 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C/S是 Client / Server , 客户端服务器架构 ;</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)Web</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">特点</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. 用超文本标记语言 ( HTML , Hypertext Markup Language ) 来表达信息 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 用统一资源定位 ( URL , Uniform Resource Locator ) 来对来自网络上的信息进行精确的定位 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. 用DNS来解析域名 , 用以方便记忆 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        D. 用网络应用层之间的协议HTTP来实现与Web服务器之间的通信 , 底层为 TCP/IP协议 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">静态资源与动态资源</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. Internet上供外界访问的Web资源分为静态资源和动态资源两种 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 静态Web资源开发技术是Html ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C.    常用的动态Web开发技术有 JSP/Serverlet , ASP , PHP ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        D. 在Java中 , 动态Web开发技术统称为JavaWeb .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">开发企业级应用介绍</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">(1)ERP</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">(Enterprise Resource Planning) : 企业资源计划 , 针对物资资源管理(物流) , 人力资源管理(人流) , 财务资源管理(财流) , 信息资源管理(信息流) 集成一体化的企业管理软件 .</span> </div> <span style="word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">(2)CRM</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   (Customer Relationship Management) : 客户关系管理 , 是指用计算机自动化分析销售 , 市场营销 , 客户服务以及应用支持等流程的软件系统 .</span> </div> <span style="word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">(3)BPM</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   (Business Process Management) : 是一套达成企业各种业务环节整合的全面管理模式 .</span> </div> <span style="word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">(4)OA</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   (Office Automation) : 办公自动化 , 是将现代化办公和计算机网络结合起来的一种新型的办公方式 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. Web</span><span style="font-family:黑体; word-wrap:break-word">系统通信方法</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      客户端发出请求 , 客户端请求包含用户要访问的资源路径和名称 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      服务器端接到请求 , 可以将 页面 , 图片 , 媒体 , 等很多的资源内容发送给客户端 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      如果客户端请求没有得到正确处理 , 服务端会响应一个所悟状态码 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     4. URL</span><span style="font-family:黑体; word-wrap:break-word">格式</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      </span>http://www.baidu.com:80/liyanhong/web/1.html </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">http://</span>  是协议 , 采用哪种协议进行本次网络访问 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">www.baidu.com</span>  是服务器 , 服务器的唯一域名 , 映射到一个IP地址 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">:80</span> 端口 , 访问服务在<span style="word-wrap:break-word">服务器端</span>绑定的端口号 , 如果没有指定端口 , 默认为80 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">/liyanhong/web/</span> 路径 , 由零个或多个 / 隔开的字符串 , 一般表示主机上一个目录或文件的地址 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">1.html</span> 资源名称 , 资源是本地计算机上的文件 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">5 </span><span style="font-family:黑体; word-wrap:break-word">常见服务器简介</span></span><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)WebLogic</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      是Oracle公司的产品 , 是目前应用最广泛的服务器 , 支持J2EE规范 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)WebSphere</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      是IBM公司的产品 , 支持J2EE规范 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)apache</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      Tomcat , 支持全部Jsp与Servlet规范 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">八</span><span style="font-family:Times New Roman; word-wrap:break-word"> Tomcat</span><span style="font-family:宋体; word-wrap:break-word">安装与启动</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1.</span><span style="font-family:黑体; word-wrap:break-word">下载并安装</span><span style="font-family:Arial; word-wrap:break-word">Tomcat</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (1)下载Tomcat</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Tomcat官方站点</span> <span style="color:#000000; word-wrap:break-word"> : </span> <span style="color:#0000ff; word-wrap:break-word">http://archive.apache.org/dist/tomcat/</span> <span style="color:#000000; word-wrap:break-word"> ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在上面的网站获取Tomcat , tar.gz文件是Linux系统下的安装版本 , exe文件是Windows下的安装版本 , zip文件是Windows下的压缩版本 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (2)安装Tomcat</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这里我们下载的是apache-tomcat-6.0.35.zip , 解压缩到E盘的DevelopPakage , 一些开发包文件都放在这里 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2.</span><span style="font-family:黑体; word-wrap:break-word">启动</span><span style="font-family:Arial; word-wrap:break-word">Tomcat</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      双击Tomcat/bin/startup.bat , 就可以启动Tomcat .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      打开浏览器 , 输入</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:8080/</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#000000; word-wrap:break-word">能条转入Tomcat服务器界面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">九</span><span style="font-family:Times New Roman; word-wrap:break-word"> Tomcat</span><span style="font-family:宋体; word-wrap:break-word">配置</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1.Tomcat</span><span style="font-family:黑体; word-wrap:break-word">常见问题</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">启动闪了一下并消失</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果启动的时候 , 仅仅是闪了一下 , DOS界面就消失了 , 此时Tomcat并没有启动成功 , 这是因为我们没有配置 JAVA_HOME 环境变量 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这是我们右键点击 我的电脑|属性|高级|环境变量|新建Administrator环境变量| 在弹出的对话框中的变量名选项输入 JAVA_HOME , 在变量值选项输入jdk的根目录路径 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">地址占用异常</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        如果报出了地址被占用异常 , 我们需要查看到底是那个程序占用了Tomcat需要的8080端口 , 并终止这个程序 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        查找端口的方法 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. cmd新建一个DOS命令窗口 , 输入 netstat –abo (注意中间是一个空格) , 会将端口使用情况列出 , 如果端口过多 , 一部分信息就不会显示出来 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. 使用Fport.exe工具查看 , 这个工具不能直接双击运行 , 需要在DOS命令窗口运行 , 将其方法 E:/DevelopPakage 文件夹下 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           Cmd一个DOS命令窗口 , 将操作目录变为 E:/DevelopePakage , 然后输入 Fport.exe , 执行这个文件 , 与javac类似 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. 使用360安全卫士中的 网络连接查看器 , 可以在这里查看端口使用情况 , 并且这个功能更强大 , 能终止被使用的端口 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">               </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           微软的SQLServerServersServer.exe SQLServer服务器报表服务宿主程序占用了次8080端口 , 我们将Tomcat的端口改为18080 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">修改端口方法</span> :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              打开根目录下的conf文件 , 打开server.xml , 其中只有一处8080 , 将其改为18080 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <Connector port="18080"  protocol="HTTP/1.1"  connectionTimeout="20000"   redirectPort="8443" /></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Connector 标签下的port 是端口 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Protocol 是协议 , 使用的是http协议 , 版本是 1.1的 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">在</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">MyEclipse</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">中配置</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Tomcat</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        打开MyEclipse , 选择 Window|Preference|MyEclipse|Servers|Tomcat|Tomcat 6.x</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        因为我这里用的是apache-tomcat-6.0.35.zip , 因此选的也是 Tomcat 6.x ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Tomcat Server 选择 Enable , 然后在第一个 Tomcat Home directory 浏览选择Tomcat的根目录 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这样就成功在MyEclipse中成功配置了Tomcat .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        此时的Tomcat在Server中 , Server就是我们平时打印东西的地方Console旁边 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        我们可以选择Server中的Tomcat服务器 , 右键选择Run  , Tomcat就成功启动了起来 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        如果在Windows中启动的话 , 如果启动失败 , 这个DOS命令窗口就会消失 , 就不能在DOS命令窗口查看具体出了什么错误 , 在MyEclipse中显然可以查看启动过程供出现的错误 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(4)Tomcat</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">服务器和</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">版本之间的关系</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">Tomcat</span>  7.0.x <span style="word-wrap:break-word">Servlet</span> 3.0  <span style="word-wrap:break-word">Jsp</span> 2.2 <span style="word-wrap:break-word">Java EE</span> 6.0</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">Tomcat</span>  6.0.x <span style="word-wrap:break-word">Servlet</span> 2.5  <span style="word-wrap:break-word">Jsp</span> 2.1 <span style="word-wrap:break-word">Java EE</span> 5.0</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">Tomcat</span>  5.5.x <span style="word-wrap:break-word">Servlet</span> 2.4  <span style="word-wrap:break-word">Jsp</span> 2.0 <span style="word-wrap:break-word">Java EE</span> 1.4</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">Tomcat</span>  4.1.x <span style="word-wrap:break-word">Servlet</span> 2.3  <span style="word-wrap:break-word">Jsp</span> 1.2 <span style="word-wrap:break-word">Java EE</span> 1.3</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <span style="word-wrap:break-word">Tomcat</span>  3.3.x <span style="word-wrap:break-word">Servlet</span> 2.2  <span style="word-wrap:break-word">Jsp</span> 1.1 <span style="word-wrap:break-word">Java EE</span> 1.1</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        1.3的xml文件是dtd的 , 1.4之后的xml文件是schema的 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(5)MyEclipse</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">比</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">jdk</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">先安装</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        如果使用的MyEclipse安装了以后 , 将之前的jdk卸载了 , 重新安装的 , 这是在启动Tomcat就会启动不成功 , 这时我们需要在下面进行配置 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        MyEclipse | Window | Preferences | MyEclipse | Servers | Tomcat | Tomcat 6.x | JDK 下进行设置 , 设置完毕之后就能正常启动Tomcat了 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. Tomcat</span><span style="font-family:黑体; word-wrap:break-word">目录结构和权限设置</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(1)Tomcat</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">目录层次结构</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. bin目录中存放启动和关闭Tomcat的脚本程序 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. conf 存放Tomcat中各种配置文件</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. lib 存放的是Tomcat程序和所有的Web应用程序所访问的jar文件 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              tomcat-i18n-es.jar 是与国际化有关的文件 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              servlet-api.jar , jsp-api.jar Tomcat处理servlet和jsp相关的文件 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        D. logs 存放Tomcat的日志文件 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        E. temp 存放tomcat运行时产生的临时文件 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        F. webapps当发布web应用程序时通常把web应用程序的目录及文件放到这个目录下 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        G. work Tomcat将JSP生成的servlet源文件和字节码文件放到这个目录下 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">第一次在</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Tomcat</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">下创建项目</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在tomcat的webapps目录下 , 创建一个文件夹 , 命名为day01 , 然后在里面创建一个html文件 , 随便写上一些内容 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        我们启动Tomcat服务器 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        文件的路径为 : E:\DevelopPakage\apache-tomcat-6.0.35\webapps\day01</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在浏览器中我们输入</span> <span style="color:#000000; word-wrap:break-word"> : </span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/day01/1.html</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#000000; word-wrap:break-word">就能访问到刚才创建的html文件</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        这就说明了一个问题</span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#000000; word-wrap:break-word">与E:\DevelopPakage\apache-tomcat-6.0.35\webapps\  映射是一样的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#000000; word-wrap:break-word">对应的是Tomcat服务器的webapps目录 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">在</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Tomcat</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">中打开</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Jsp</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">页面</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">浏览器</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">Jsp</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">页面生成的原理</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">)</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">在MyEclipse中创建一个Web项目 , 从中将Jsp复制到刚才在webapps文件夹下创建的day01文件夹下 , 然后在浏览器中输入</span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/day01/index.html</span> <span style="color:#000000; word-wrap:break-word"> , </span> <span style="color:#000000; word-wrap:break-word">就能访问到这个页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">我们在浏览器中打开源文件 , 在打开Jsp的源文件 , 发现两个源文件并不是完全一模一样的 , 其中有很多地方有改动 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Jsp页面源码发生改变的原因:</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A. 在work文件夹下存放的是Jsp生成的servlet源文件和字节码文件 , Jsp页面并不是直接就能在浏览器中显示出来 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">B. 打开E:\DevelopPakage\apache-tomcat-6.0.35\work\Catalina\localhost\day01\org\apache\jsp 目录 , 下面有两个文件 , 分别是index_jsp.class 和index_jsp.java , 其中的index_jsp.java 中的程序中有很多行的 out.write() , 浏览器中的代码就是这里的Java代码一行一行写出来的 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:12pt">(4)Tomcat Manager </span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">的使用</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A. 如果查看当前的所有项目的信息 , 我们可以再Tomcat中查看这些信息 , Tomcat Manger 在我们使用</span> <span style="color:#000000; word-wrap:break-word"></span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#000000; word-wrap:break-word">在浏览器中登陆的页面 , 选择在小猫下的第二个连接就是 Tomcat Manager , 但此时我们登陆的时候需要账号密码才能登陆 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">B. 设置登陆口令</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   在弹出的口令的界面 , 我们连续点3次确定 , 就会跳入一个界面 , 在这个界面给我们一个建议 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   我们按照建议操作 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   进入conf目录下的tomcat-user.xml文件中 , 在<tomcat-users> 标签中添加下面的内容</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <role rolename="manager-gui"/></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><user username="admin" password="admin" roles="manager-gui"/></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">rolename 是管理权限 , 这里有四种权限 , manager-gui是最高的权限 . 在第二行的标签中我们设置了账号和密码 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">四种权限介绍 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">manager-gui</span> - allows access to the HTML GUI and the <span style="word-wrap:break-word">status pages(状态页)</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">                 </span>允许访问管理页面和状态信息页面</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">manager-script</span> - allows access to the text interface and the status pages</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">                 </span>允许访问文本接口和状态信息页面</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">manager-jmx</span> - allows access to the JMX proxy and the status pages</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">                 </span>允许访问Java管理扩展代理和状态信息页面</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">manager-status </span>- allows access to the status pages only</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">                 </span>允许访问状态信息页面</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">        </span>C. 管理页介绍</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">进入的Tomcat manager 界面是对所有webapps下的项目的管理页 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">1)其中的/doc 是Tomcat的文档 , 我们可以在这里查询Tomcat 相关的文档,信息 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">2)我们点击我们的/day01 项目 , 发现会进入 index.jsp 页面 , 这是因为在conf 目录下的web.xml 中设置了欢迎文件 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   在web.xml中有这样一个标签(1220行) :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <welcome-file-list></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <welcome-file>index.html</welcome-file></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <welcome-file>index.htm</welcome-file></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <welcome-file>index.jsp</welcome-file></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </welcome-file-list></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">在这里设置了项目的欢迎文件 , 欢迎文件当我们打开一个项目的时候 , 第一个弹出的页面 , 根据上面的标签 , 我们可以了解到 : 在打开一个项目的时候 , 会首先查看有没有index.html文件 , 有的话就作为欢迎文件 , 没有的话就去找 index.htm 文件作为欢迎文件 , 如果在没有就去找index.jsp作为欢迎文件 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十</span><span style="font-family:Times New Roman; word-wrap:break-word"> Java EE </span><span style="font-family:宋体; word-wrap:break-word">体系结构</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">客户层</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      包含于用户交互的程序 ,  这些程序提示用户进行输入 , 然后把用户的响应转化成请求 , 发往到服务端组件 , 并接收服务端处理的结果 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">表示层</span><span style="font-family:Arial; word-wrap:break-word">(web</span><span style="font-family:黑体; word-wrap:break-word">层</span><span style="font-family:Arial; word-wrap:break-word">)</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      为Java EE 应用程序提供Internet功能 , 在Web层运行的组件 , 使用http协议接收客户端的各种请求 , 并将对请求的响应返回给客户端 . 例如 Servlet , jsp .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. </span><span style="font-family:黑体; word-wrap:break-word">业务层</span><span style="font-family:Arial; word-wrap:break-word"></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      包含javaEE应用程序的业务路几层 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     4. EIS</span><span style="font-family:黑体; word-wrap:break-word">层</span><span style="font-family:Arial; word-wrap:break-word">(</span><span style="font-family:黑体; word-wrap:break-word">信息系统层</span><span style="font-family:Arial; word-wrap:break-word">)</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      是JavaEE应用程序与其它技术的直接或者间接接口 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十一</span><span style="font-family:Times New Roman; word-wrap:break-word"> Servlet</span><span style="font-family:宋体; word-wrap:break-word">简介</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">什么是</span><span style="font-family:Arial; word-wrap:break-word">Servlet</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      A. Java编写的服务器端程序</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        主要功能在于交互式的浏览和修改数据 , 生成动态web内容 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        狭义的servlet是指Java语言实现的一个接口 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        广义的servlet是指任何实现了这个Servlet接口的类别 , 一般情况下按照广义理解 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      B. Servlet运行于支持Java的服务器中 . 从现实上讲 , Servlet可以响应任何形式(ftp,svn等类型也可以)的请求 , 但绝大多数情况下servlet只用来扩展基于http协议的web服务器 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. Servlet</span><span style="font-family:黑体; word-wrap:break-word">的优缺点</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (1) 优点</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (2) 缺点</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. Servlet</span><span style="font-family:黑体; word-wrap:break-word">容器就是</span><span style="font-family:Arial; word-wrap:break-word">Tomcat </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十二</span><span style="font-family:Times New Roman; word-wrap:break-word"> Servlet</span><span style="font-family:宋体; word-wrap:break-word">运行过程</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">浏览器发出请求</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Web浏览器向Web容器发出http请求 , 之后Web容器会创建Servlet , 只有首次访问才创建Servlet ;</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">创建</span><span style="font-family:Arial; word-wrap:break-word">servlet</span></span><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">创建请求</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(request)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">和响应</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(response)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">对象</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   此时Web容器会创建请求和响应对象 , 并将相应的数据填充进去 , 创建的请求头和请求体有实际的数据填充 , 但是响应头和响应体都为空 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   请求有7中 , 分别是 get , post , put , delete , head , option .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">调用</span></span><span style="word-wrap:break-word; font-size:12pt"><span style="font-family:Times New Roman; word-wrap:break-word">service</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:12pt">方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Service方法是servlet的一个方法 , 这个方法读取请求信息 , 并向空白的响应头和响应体写入响应信息 , 并生成servlet ;</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. </span><span style="font-family:黑体; word-wrap:break-word">浏览器收到响应</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      Servlet的service方法将servlet返回给Web容器 , Web容器在读取响应信息 , 并向Web浏览器发出http响应 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十三</span><span style="font-family:Times New Roman; word-wrap:break-word"> Servlet</span><span style="font-family:宋体; word-wrap:break-word">编程</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     1. </span><span style="font-family:黑体; word-wrap:break-word">配置</span><span style="font-family:Arial; word-wrap:break-word">Servlet</span><span style="font-family:黑体; word-wrap:break-word">虚拟路径</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">配置路径原理</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">浏览器是通过URL地址来访问Web服务器的资源 , 如果servlet程序想要被外界访问 , 必须将servlet程序映射到一个URL地址上 , 这个工作在WebRoot | WEB-INF | 中的web.xml中完成 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">如何配置</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Servlet是通过两组标签来完成虚拟路径的配置的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        A. <servlet>标签用来注册Servlet , 其主要包含两个子元素 , <servlet-name>和<servlet-class> , 前者用于设置Servlet注册名称 , 后者用来存放Servlet完整类名 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. <servlet-mapping> 用于映射一个已注册的Servlet的一个对外访问路径 , 它包括<servlet-name>和<url-pattern>两个子标签 , 分别用于指定注册名称和对外访问路径 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">配置实例</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <web-app></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <servlet-name>ServletDemo</servlet-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <servlet-class>cn.itcast.servlet.ServletDemo</servlet-class></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <servlet-mapping></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <servlet-name>ServletDemo</servlet-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <url-pattern>/servletdemo</url-pattern></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </servlet-mapping></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </web-app></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        假设我们的工程名字叫day05 , 那么我们使用</span> <span style="color:#000000; word-wrap:break-word"> </span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/day05/servletdemo</span> <span style="color:#000000; word-wrap:break-word"> , </span> <span style="color:#000000; word-wrap:break-word">就可以访问刚才的servlet页面了 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(4)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">虚拟路径访问过程</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">浏览器中端口工程名后面跟着 url , 在服务器中会自动根据 url 到web.xml 文件中查找 <servlet-mapping> 标签的<url-pattern> , 如果找到匹配的 , 找到本<servlet-mapping>标签下的<servlet-name> , 在去<servlet> 标签中找到相应的<servlet-name> 符合的标签 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(5)servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">与</span></span><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">servlet-mapping</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">可以一对多</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        同一个servlet可以被映射到多个URL上 , 即多个<servlet-mapping>元素的<servlet-name>子元素的设置 , 可以使同一个servlet注册名 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(6)servlet-mapping</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">中的</span></span><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">url-pattern </span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">可以使用通配符</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        Servlet映射到url中可以使用 * 通配符 , 但是只能由两种固定的格式 : 一种格式是 *.扩展名 ; 另一种是以 / 开头 , 并以 /* 结尾 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        总结 : 只能使用 / 或 * 开头 , *开头的时候后面就没东西了 ; / 和 *. 不能同时存在 ( 意思是/*.不行 ) ; / 或 /* 表示任意 ; 只有 *. 才表示通配符 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     2. </span><span style="font-family:黑体; word-wrap:break-word">创建一个简单的</span><span style="font-family:Arial; word-wrap:break-word">Servlet</span><span style="font-family:黑体; word-wrap:break-word">程序</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">创建一个</span></span><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">Web Project</span></span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">创建</span></span><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">页面</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A. 包名填写 my.cn.itcast , 名字上填写 hello , 修饰符选择 public , MyEclipse自动选好了继承的父类    javax.servlet.http.HttpServlet , 我们就不需要选了 , 选择一 个要用的模板  Default temple for Servlet , 创建的方法 勾上 doGet() 和 doPost() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">B. 进入创建的第二页 , ClassName不能修改 , 这是我们之前输入好的 , 在此不作修改 , name 和 maping url 可以直接设置web.xml文档中的信息 , 那么相当于<servlet-name>标签中的信息 , mapping url 相当于 <url-pattern>标签中的信息  , 第三个是设置的创建servlet文件的路径 , 第四第五个是描述信息 , 可写可不写 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">C.  创建好了之后 , 我们去查看web.xml文件的配置 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <description>This is the description of my J2EE component</description></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <display-name>This is the display name of my J2EE component</display-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <servlet-name>Hello</servlet-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <servlet-class>my.cn.itcast.Hello</servlet-class></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">  </servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">  <servlet-mapping></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <servlet-name>Hello</servlet-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <url-pattern>/servlet/Hello</url-pattern></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">  </servlet-mapping></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   其中的<servlet>标签下的<description>和<display-name> 是我们创建servlet第二页设置的最后两项 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">D. 发布servlet并启动Tomcat</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   选中项目 , 然后选择发布按钮 , 左边的是发布按钮 , 右边的是启动Tomcat按钮 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   在Project选项中选择项目 , 然后点右侧的Add添加Tomcat , 然后点右侧的Redeploy发布 , 在最下面的信息框中出现successfully deployed , 说明发布成功 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   然后点ok退出 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">E. 打开浏览器 , 在浏览器地址栏输入</span> <span style="color:#0000ff; word-wrap:break-word">http://localhost:18080/day05_exercise/servlet/Hello</span> <span style="color:#000000; word-wrap:break-word"> , </span> <span style="color:#000000; word-wrap:break-word">就可以访问这个Servlet页面</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     3. Servlet</span><span style="font-family:黑体; word-wrap:break-word">页面中的乱码问题</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">乱码现象</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在上面的页面中添加 out.println(“中文”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        就会在生成的html页面中将 “中文” 两个字添加进去 , 但是我们添加进去的时候 , 在浏览器中显示的是乱码 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(2)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">产生乱码的原因</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Servlet源文件中直接输出 “中文” 两个汉字 , 这些信息发送到Tomcat服务器之后 , Tomcat就会按照ISO-8859-1 进行转码 , 显然 , 转码以后就变成了乱码 , ISO-8859-1码表中没有中文 , 只有英文 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">“中文” à 按照ISO-8859-1编码 à “??”</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">解决乱码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        String str = “中文” ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        str = new String( str.getBytes(“GBK”) , “ISO-8859-1” ) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        由于浏览器默认的码表为GBK , 我们最终得到的字符串是用GBK解析的 , 我们直接得到 “中文” 的GBK码表数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   将GBK格式的字符串使用 “ISO-8859-1”进行编码得到一个新的字符串 str , 将这个str发送到Tomcat服务器进行解析 , Tomcat将会用 “ISO-8859-1” 对齐进行解析 , 得到的是原来的 GBK码的字符串 , 浏览器最终用GBK码表解析这个字符串 , 我们最终能够看到中文 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     4. servlet</span><span style="font-family:黑体; word-wrap:break-word">注册和编写映射</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1) servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">注册</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        使用servlet标签实现servlet注册 , 注册的目的是将servlet提供给别人使用 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <servlet-name> 为自己起名 , 命名自定义 , 但不能重复 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <servlet-calss> 选择要注册的servlet的完整路径 , 这个class路径从源文件的包名开始 , 到不带后缀的servlet文件名 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           例如: 如果servlet是在cn.itcast 包下的 Servlet.java , 那么此时的<servlet-calss> 中的路径为 cn.itcast.Servlet .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">(2) servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">配置初始化</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">在Servlet的配置文件中 , 可以使用一个或多个<init-param>标签为servlet配置一些初始化 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在web.xml文档中 , 注册servlet的时候 , 在<servlet>标签中除了有<servlet-name>和<servlet-calss>子标签之外 , 还可以有*个<init-param> 标签 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        初始化参数设置 , 设置一个参数名和参数值 , 参数名<param-name>和参数值<param-value>是<init-param>的子标签 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        例如 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <init-param></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <param-name>ServletName</param-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              <param-value>ServletContex</param-value></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           </init-param></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           上面在servlet中设置了初始化参数 , 参数名为 servletname , 参数值为 ServletContex .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(3)</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">编写映射</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        编写映射就是配置虚拟路径 , 详见 四 Servlet编程 | 1. 配置servlet虚拟路径 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     5. init</span><span style="font-family:黑体; word-wrap:break-word">方法中的</span><span style="font-family:Arial; word-wrap:break-word">ServletConfig</span><span style="font-family:黑体; word-wrap:break-word">对象</span><span style="font-family:Arial; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1) </span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">配置初始化参数</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">在Servlet配置文件中 , 可以使用一个或多个<init-param>标签 , servlet配置一些初始化参数  , 详见上面 4 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">(2) </span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">如何获得初始化信息</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">当servlet配置了初始化参数后 , web容器在创建servlet实例对象时 , Tomcat会自动将这些初始化参数封装到ServletConfig对象中 , 并在调用Servlet的init()方法的时候 , 将ServletConfig对象传递给servlet , 进而 , 程序员就可以通过ServletConfig对象就可以得到当前的servlet初始化信息 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt"><span style="font-family:Times New Roman; word-wrap:break-word">(3)ServletConfig API</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   ServletConfig接口定义了一个对象 , 通过这个对象 , Servlet容器允许Servlet获得一个有关ServletContex接口说明 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">A.     getInitParameteerNames()</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public Enumeration getInitParamNames() , 这个方法返回一个枚举集合 , 其中放的是String对象 , 这些字符串是初始化的参数名 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Enumeration就是老版本的迭代器 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <span style="word-wrap:break-word">Enumeration</span>有两个方法 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">HasMoreElements()</span> , 返回一个布尔类型 , 是否有下一个元素 , 如果有就返回true , 反之返回false .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <span style="word-wrap:break-word">nextElement()</span> , 返回下一个枚举 , 返回的是枚举中的元素 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   这个枚举的使用方法 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   Enumeration<String> names = config.getInitParameterNames() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   While ( names.hasMoreElements() ){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   String name = names.nextElement() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   System.out.println( name ) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">上面的代码可以将所有的参数打印出来 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">B.     getInitParameter()</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public String getInitParameter(String str) , 返回初始化参数名为str所对应的参数值 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">C. getServletContex()</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           Public ServletContex getServletContex() , 返回这个servlet的ServletContex对象 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           获得上下文对象 , 一个项目只有一个该对象 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           以后会讲 , 关于四大作用域 , ServletContex是最大的作用域 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">D. getServletName()</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           返回的是一个字符串 , 如果这个servlet文件的文件名是ServletDemo.java , 那么返回的就是 ServletDemo .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     4. Servlet</span><span style="font-family:黑体; word-wrap:break-word">生命周期</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1) init()</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">服务器调用该方法初始化servlet , 该方法只在servlet第一次被请求加载的时候调用一次 , 当有客户在请求servlet服务时 , 这个方法就不再执行了 , 服务器将启动一个新的线程 , 在该线程中 , 调用service方法响应用户的请求 ;</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(2) service()</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        初始化完毕 , 服务器调用该方法响应客户的请求 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(3) destroy()</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        服务器调用该方法消灭servlet .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     5. </span><span style="font-family:黑体; word-wrap:break-word">配置</span><span style="font-family:Arial; word-wrap:break-word">Servlet</span><span style="font-family:黑体; word-wrap:break-word">自动加载</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果在web.xml文件中 , 在注册servlet的时候 , 在其子标签配置了一个<load-on-startup>元素 , 那么Web应用程序在启动时 , 就会装载并创建Servlet实例对象 , 以及调用Servlet实例对象的init()方法 . 设置了自动加载 , 这个servlet就会在服务器启动的时候就会加载 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">例如 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   <servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <servlet-name>invoker</servlet-name></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <servlet-class></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        org.apache.catalina.servlets.InvokerServlet</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      </servlet-class></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      <load-on-startup>2</load-on-startup></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </servlet></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">在上面的servlet注册标签中 , 除了servlet-name 和 servlet-calss 两个子标签外 , 还有一个 load-on-startup 标签 , 这个标签值为 0 – 6 , 数字越小优先级越高 , 配置的时候 , 那个数字越小 , 服务器启动的时候就先加载哪一个 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     6. </span><span style="font-family:黑体; word-wrap:break-word">错误页面替换</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      我们使用浏览器浏览页面的时候 , 会出现各种错误 , 为了使界面友好 , 我们使用一些出错页替换相应的错误码页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      在WebRoot目录下创建一个error文件夹 , 在里面创建相应错误的Jsp页面 , 一般都用 错误码.jsp 作为出错页面 , 例如错误404 相应的页面 404.jsp .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      然后在 web.xml 文档中加入以下标签 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <error-page></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <error-code>404</error-code></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           <location>/error/404.jsp</location></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </error-page></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      当我们访问出现404错误之后 , 就会自动跳转到这个页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果我们使用html页面作为出错页面 , 但是IE浏览器会过滤html页面 , 需要在IE | Internet 选项中选中 显示友好的错误信息 , 这样就能显示html出错页面了 , 正因为这样我们不适用html页面作为出错页面 , 我们使用jsp页面作为出错页面 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     7. </span><span style="font-family:黑体; word-wrap:break-word">缺省</span><span style="font-family:Arial; word-wrap:break-word">servlet</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      如果某个servlet的映射路径仅仅为一个正斜杠(/) , 那么这个Servlet就成为当前web应用程序的的缺省servlet .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   凡是在web.xml 文件中找不到匹配的<servlet-mapping>元素的url , 它们的访问请求都将交给缺省的servlet处理 , 也就是说 , 缺省Servlet处理用于处理其他servlet都不处理的访问请求 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     8. Servlet</span><span style="font-family:黑体; word-wrap:break-word">接口实现类</span><span style="font-family:Arial; word-wrap:break-word"> </span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(1)Servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">接口简介</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">A. SUN公司为Servlet接口定义了两个实现类 , GenericServlet 和 HttpServlet , GenericServlet 是 HttpServlet的父类 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        B. Servlet是一个接口 , 所有的servlet都必须实现这个接口 , 或者是实现这个Servlet接口的子类 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        C. GenericServlet类实现了Servlet接口 , 有一点要注意 , GenericServlet类不是Servlet的子类 , 它是Object的子类 .<span style="word-wrap:break-word">---?</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        D. HttpServlet类继承了GenericServlet类 , 是GenericServlet类的子类 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word">           </span><span style="word-wrap:break-word; font-size:14pt">(2)Servlet</span></span><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:14pt">类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">A. 介绍</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           这个接口定义了一个Servlet , Servlet是一个在Web服务器上继承了这个功能的java类 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">B. 方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           1) <span style="word-wrap:break-word">init()方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Public void init(ServletConfig config) throws ServletException</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              被servlet容器调用 , 表名一个servlet被置入服务 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              这个方法是在浏览器访问servlet的java类之后 , 调用service()方法之前执行的 , 在服务器启动之后 , 该init()方法只调用一次 , 并且在调用service之前必须退出 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           2) <span style="word-wrap:break-word">service()方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Servlet容器调用这个方法 , 允许servlet响应请求 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           3) <span style="word-wrap:break-word">destroy()方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Servlet容器调用这个方法 , 将servlet从服务器中移出 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           4) <span style="word-wrap:break-word">getServletConfig()方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              返回一个ServletConfig对象 , 这个对象包括这个这个servlet的初始化和启动参数 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           5) <span style="word-wrap:break-word">getServletInfo()方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              返回这个servlet信息 , 例如作者 , 版本 , 版权等信息 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (3)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (3) GenericServlet实现类</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      (3) HttpServlet实现类</span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">                     </span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十四</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span><span style="font-family:宋体; word-wrap:break-word">四大作用域</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span></span><span style="font-family:Arial; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">     1. Context</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      一个应用(项目)拥有唯一的一个ServletContex对象 , 访问此应用的任何浏览器 , 共享一个ServletContex .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      一个应用是从服务器开启 , 到服务器关闭 , 指的是一个项目 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      获取方式 , servletConfig.getServletContex()方法 ,</span> </div> <span style="word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">     2. session</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      为每一个浏览器创建一个独有的会话 , 当前的用户访问任意的servlet都可以保存自己的数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      类 : HttpSession , 获取该类的方式 , httpServletRequest.getSession() .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      每一个HttpSession对象都有自己唯一的ID值 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">     3. request</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      用户请求Servlet , 当请求结束的时候request消失 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      类 HttpServletRequest .</span> </div> <span style="word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">     4. PageContext</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      </span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     5. </span><span style="font-family:黑体; word-wrap:break-word">相同点</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      ServletContex , HttpSession , HttpServletRequest 三个类都有以下两种方法 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">setAttribute(key , value)</span> , 用于将数据存在此范围内 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        <span style="word-wrap:break-word">getAttribute(key)</span> , 用于将数据从某范围内取出 .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">     6. </span><span style="font-family:黑体; word-wrap:break-word">比较</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      ServletContex , HttpSession , HttpServletRequest , PageContext 作用范围依次减小 , 但它们没有包含关系 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">      ServletContex一个项目中有一个 , HttpSession 一个会话有一个 , HttpServletRequest 一次请求有一个 , PageContext 一个页面有一个 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十五</span><span style="font-family:Times New Roman; word-wrap:break-word"> jdbc</span><span style="font-family:宋体; word-wrap:break-word">入门</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1.jdbc</span><span style="font-family:黑体; word-wrap:break-word">概念</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Jdbc Java Database Connectivity .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    这是Sun公司的对数据库进行操作的一套<span style="word-wrap:break-word">api</span> , 都是由<span style="word-wrap:break-word">接口</span>组成 , Sun公司没有实现 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    这些接口都是由数据库厂商进行实现的 , 这些<span style="word-wrap:break-word">实现的类</span> , 我们称之为<span style="word-wrap:break-word">驱动</span> .</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2.jdbc</span><span style="font-family:黑体; word-wrap:break-word">步骤详解</span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(1). </span><span style="font-family:宋体; word-wrap:break-word">注册驱动</span></span></span></span> <div style="word-wrap:break-word"> <span style="word-wrap:break-word">DriverManger类介绍 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">DriverManger使java.sql包下的类 , 作用使管理jdbc驱动用的 , 下面用到了DriverManger类的集中方法 , 其中 registerDriver()为注册驱动程序 ,  getConnection()为获得数据库连接 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">DriverManager.registerDriver( new com.mysql.jdbc.Driver() ) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面的语句会导致驱动加载两次 , com.mysql.jdbc.Driver 中由一个静态的代码块 , 该代码块中的语句是<span style="word-wrap:break-word">java.sql.DriverManager.registerDriver(new Driver());</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    在com.mysql.jdbc.Driver()中的静态代码块就将该驱动注册了 , 我们只需要加载这个类就可以了 , 不用在外部在使用一次 DriverManager.registerDriver(new com.mysql.jdbc.Driver())了 , 这样在静态代码块中加载了一次驱动 , 在外部我们又执行了一次加载 , 这样驱动就加载了两次了 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    我们只需要使类加载就可以了 , 我们使用 Class.forName(“com.mysql.jdbc.Driver”); 就可以实现驱动的注册了 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(2)</span><span style="font-family:宋体; word-wrap:break-word">创建数据库的连接</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connection conn = DriverManager.getConnection(url , user , password) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面是获得数据库连接的语句 , Connecttion对象就是数据库的连接 , 我们使用java.sql.DriverManger下的getConnection()方法可以获取数据库连接 , 传入的三个值都是字符串形式的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">1)url : 是数据库的地址 ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       格式范例 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">jdbc:mysql://localhost:3306/test?参数名1=参数值1&参数名2=参数值2</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">url个字段介绍 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              jdbc : 主协议</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              mysql : 子协议</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              localhost : 主机名 , 可以为ip地址</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">               3306 : 数据库的端口号</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              Test : 数据库名称</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">              参数名和参数值常为 数据库的用户名 , 密码 或者编码类型 , 常用的参数示例 user=root&password=root&characterEncoding=UTF-8</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">2)user :</span> 是数据库的用户名</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">3)password :</span> 数据库的密码</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    如果在url中带了用户名和密码的参数 , 可以不写 user和password .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    getConnection()可以传入两种参数 , 一个是 url , user, password 三个参数 ; 另一种是传入一个带用户名和密码的uri .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = DriverManger.getManager(“jdbc:mysql://localhost:3306/test” , root , root) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = DriverManger.getManager(“jdbc:mysql://localhost:3306/test?user=root&password=root”);</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(3)</span><span style="font-family:宋体; word-wrap:break-word">几个重要的类及其主要方法</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1)Connecttion</span><span style="font-family:黑体; word-wrap:break-word">类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    作用 : Connecttion对象用于表示对某个数据库的连接 , 所有的对数据库的操作都需要Connecttion对象来完成 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    createStatement() 创建向数据库发送sql语句的数据库对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span> <span style="word-wrap:break-word">prepareStatement(sql) </span> <span style="color:#000000; word-wrap:break-word">创建向数据库发送预编译sql的PrepareStatement对象 ;</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2)Statement</span><span style="font-family:黑体; word-wrap:break-word">类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    作用 : 用于向数据库发送sql语句 并返回生成的结果对象.</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Execute(String sql) 用于向数据库发送任意sql语句 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    executeQuery(String sql) 用于向数据库中发送查询sql语句 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    executeUpdate(String sql) 用于向数据库总发送增删改sql语句;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面的三个方法返回的都是ResultSet对象 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">3)PreparedStatement</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    作用 : 表示预编译的sql语句对象 , 也有Statement对象的三个方法 , 方法遇上面的Statement对象方法基本相同 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">4)ResultSet</span><span style="font-family:黑体; word-wrap:break-word">类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    作用 : 这个类的对象用于封装查询到的结果集 , 这个结果与我们看到的dos窗口查询到的结果一样 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       指针一开始指向的位置是第一行 , 就是表头 , 第一行只是列名 , 没有数据 , 取出数据要从第二行开始 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Next() : 指针指向下一行 , 如果没有下一行就返回false , 如果有就返回true ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">get()方法 </span>, 当我们将指针指向一行的时候 ,可以获取当前行某列的数据 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getBoolean()方法 , 获得数据库中的bit类型的数据 , 返回类型为boolean ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getByte()方法 , 获得数据库中的tinyint类型的数据 , 返回类型为byte ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getShort()方法 , 获得数据库中的smallint类型的数据 , 返回类型为short ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getInt()方法 , 获得数据库中的int类型的数据 , 返回类型为int ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getLong()方法 , 获得数据库中的bigint类型的数据 , 返回类型为long ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getString()方法 , 获得数据库中的char , varchar , longvarchar类型的数据 , 返回类型为String ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getClob()方法 , 获得数据库中的clob类型的数据 , 返回类型为clob ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getBlob()方法 , 获得数据库中的blob类型的数据 , 返回类型为blob ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getDate()方法 , 获得数据库中的date类型的数据 , 返回类型为java.sql.Date ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getTime()方法 , 获得数据库中的time类型的数据 , 返回类型为java.sql.Time ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       getTimeStamp()方法 , 获得数据库中的timestamp类型的数据 , 返回类型为java.sql.Timestamp ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    其中可以将列的信息当作参数传入上面的get方法中 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       get(int index) 获得第几列的数据, 列数从1开始 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       get(String columnName) 根据列名获得 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    previous() : 指针移到上一行 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    absolute(int index) : 移到指定行 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    beforeFirst() : 移动到ResultSet的最前面 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    afterLast() : 移动到ResultSet的最后面 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">用上面三个类处理对数据库的各种操作以及获得的结果 .</span></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(4)</span><span style="font-family:宋体; word-wrap:break-word">释放数据库资源</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面用于数据库连接和操作以及结果处理创建的对象必须要释放掉 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    需要释放的对象 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Connecttion对象 conn , 这个对象必须释放掉 , 因为数据库有并发连接数 , 如果一个连接没有释放 , 就会被占用这个连接 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Statement 对象 stmt ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet 对象 rs ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面的三个对象都需要释放掉 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    将释放对象的语句放在finally语句中</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">    语释放语句技巧 , 先判断是否为空 , 如果不为空我们就将其关闭 , 如果出现异常 , 打印之 , 执行完之后将conn=null ;</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    If(conn != null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Conn.close()</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(SQlException e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       E.printStackTrace();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    If(stmt != null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       stmt.close()</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(SQlException e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       E.printStackTrace();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">stmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    If(rs != null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       rs.close()</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(SQlException e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       E.printStackTrace();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">下面是</span><span style="font-family:Times New Roman; word-wrap:break-word">jdbc</span><span style="font-family:宋体; word-wrap:break-word">案例</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">十六</span><span style="font-family:Times New Roman; word-wrap:break-word"> JDBC</span><span style="font-family:宋体; word-wrap:break-word">案例介绍</span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1.</span><span style="font-family:黑体; word-wrap:break-word">需求</span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">实现一个简单的员工信息管理系统 , 并实现对其的增删改查</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">id varchar(40)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">name varchar(20)  </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">gender varchar(4)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">birthday date</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">idcard varchar(20)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">degree vachar(20)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">entrydate date</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">position varchar(40)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">department varchar(20)</span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2.</span><span style="font-family:黑体; word-wrap:break-word">步骤简介</span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(1)</span><span style="font-family:宋体; word-wrap:break-word">模式选择</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    java开发两种模式 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    jsp+javabean 只适合小型应用 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    servlet + jsp + javabean  mvc模式 jsp 用来显示 , 其中禁止调用方法 , 调用的方法都放在servlet中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    这里我们选择mvc模型 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(2)</span><span style="font-family:宋体; word-wrap:break-word">搭建开发环境</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    1) 建工程 建包</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    2) 导入相关jar包</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       BeanUtils先关jar包  commons-beanutils-1.8.0.jar 和 commons-logging.jar</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       jstl标签库 (这个包是自带的)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       mysql 相关jar包 mysql-connector-java-5.0.8-bin.jar</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    将上面的三个包复制到WEB-INF下面的lib文件夹下 , MyEclipse会自动将路径加到工程上 . 这个lib文件夹是工程自带的 .   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    3)创建数据库和表</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="font-family:Times New Roman; word-wrap:break-word">create database day12_employee;</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       use day12_employee;</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       create table employee</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       (</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              id varchar(40) primary key,</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              name varchar(20),</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              gender varchar(6),</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              birthday date,</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              idcard varchar(20),</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              degree varchar(20),</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              entrydate date,</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              department varchar(20),</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">              position varchar(40)</span></span> </div> <div style="word-wrap:break-word"> <span style="font-family:Times New Roman; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       );</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(3)</span><span style="font-family:宋体; word-wrap:break-word">设计</span><span style="font-family:Times New Roman; word-wrap:break-word">bean</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    employee.java</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(4)</span><span style="font-family:宋体; word-wrap:break-word">实现</span><span style="font-family:Times New Roman; word-wrap:break-word">dao</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(5)</span><span style="font-family:宋体; word-wrap:break-word">实现</span><span style="font-family:Times New Roman; word-wrap:break-word">service</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">简单的原封不动的调用dao中的方法</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(6)</span><span style="font-family:宋体; word-wrap:break-word">实现</span><span style="font-family:Times New Roman; word-wrap:break-word">web</span><span style="font-family:宋体; word-wrap:break-word">层</span><span style="font-family:Times New Roman; word-wrap:break-word"> .</span></span></span><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">3</span><span style="font-family:黑体; word-wrap:break-word">按照步骤进行详解</span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(1)</span><span style="font-family:宋体; word-wrap:break-word">设计</span><span style="font-family:Times New Roman; word-wrap:break-word">javabean</span></span></span></span> <div style="word-wrap:break-word"> 创建一个cn.itcast.myemp.domain 包 , 我们在后面包名统一前面加上 cn.itcast.myemp ; </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1)employee</span><span style="font-family:黑体; word-wrap:break-word">实体类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">将上面的九个字段一一实现 , 获得getter setter方法即可 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String id; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String name; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String gender; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String idcard; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String degree; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String department; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> String position; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> Date birthday; </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span> Date entrydate; </div> <div style="word-wrap:break-word"></div> <div style="word-wrap:break-word">     注意这个Date导入的是 java.util.Date包 </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2)Page</span><span style="font-family:黑体; word-wrap:break-word">实体类</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private</span>  <span style="word-wrap:break-word">List</span> pageData;   // 分页显示的数据 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> pageNum; // 当前页码 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> totalRecord; // 总记录数 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> totalPageNum;   // 总页数 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> firstPageNum;   // 起始页码 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> lastPageNum; // 结束页码 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    设置上面的一系列私有变量 , 获得getter和setter方法 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(2)</span><span style="font-family:宋体; word-wrap:break-word">创建配置文件</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    在src下创建一个jdbc.properties 的文件</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    输入以下数据</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    driverClass=</span>com.mysql.jdbc.Driver </div> <div style="word-wrap:break-word"> uri=jdbc:mysql://localhost:3306/emp </div> <div style="word-wrap:break-word"> user=root </div> <div style="word-wrap:break-word"> password=root </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    上面的四行是数据库连接相关的数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    这个配置文件的四个键值对 是jdbc的四要素 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(3)</span><span style="font-family:宋体; word-wrap:break-word">实现工具类</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1)WebUtils</span><span style="font-family:黑体; word-wrap:break-word">工具类</span><span style="font-family:Arial; word-wrap:break-word"> </span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">request2Bean()</span><span style="font-family:宋体; word-wrap:break-word">方法的概述</span><span style="font-family:Times New Roman; word-wrap:break-word"> :</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    先创建一个实体类对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    注册转换器 , 如果我们需要自动转换类型就需要这一步 , 在调用BeanUtils.setProperty()方法的时候会自动调用</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    获得request中的参数名枚举 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    遍历枚举 , 获得参数名和参数值 , 然后调用 BeanUtils.setProperty()方法 , 将参数值按照参数名封装到bean实体类中 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    返回封装好的bean实体类 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">注册日期转换器</span><span style="font-family:Times New Roman; word-wrap:break-word"> :</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    先创建一个日期转换器对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    设置这个转换器对象的格式 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    注册这个转换器 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      a. </span><span style="font-family:宋体; word-wrap:break-word">先私有化构造函数</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    private WebUtils(){}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    然后创建两个方法 request2Bean()方法 和 forward()方法 , 一个是用来将表单提交数据封装到javabean中 , 第二个是转发全据消息页面 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      b. </span><span style="font-family:宋体; word-wrap:break-word">创建</span><span style="font-family:Times New Roman; word-wrap:break-word">request2Bean()</span><span style="font-family:宋体; word-wrap:break-word">方法</span><span style="font-family:Times New Roman; word-wrap:break-word"> :</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public static <T> T request2Bean(HttpServletRequest request , Class<T> beanClass ){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       try{</span> </div> <div style="word-wrap:break-word">            //先创建一个bean对象 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           T bean = beanClass.newInstance();</span> </div> <div style="word-wrap:break-word">            //封装一个uuid作为其id , 这里是为了使id不会重复 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           BeanUtils.setProperty(bean , “id” , UUID.radomUUID().toString());</span> </div> <div style="word-wrap:break-word">            //注册转换器 , 这个转换器可以在调用BeranUtils.setProperty()方法的时候 , 自动调用 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           DateConvert convert = new DateConvert();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           convert.setPattern(“yyyy-MM-dd”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           ConvertUtils.register(convert , Date.class)   </span>//由字符串转换为date的时候调用这个方法 . </div> <div style="word-wrap:break-word">            //获得request中的参数名枚举 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           Enumeration e = request.getParameterNames();</span> </div> <div style="word-wrap:break-word">            //便利枚举 , 并调用request.getParameter()方法得到参数值 , 再将参数封装到bean中 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           while(e.hasMoreElement){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String name = (String)e.nextElement();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String value = request.getParameter(name);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    BeanUtils.setProperty(bean , name , value);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word">            //将bean返回 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           return bean ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    throw new RuntimeException(e);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      c. </span><span style="font-family:宋体; word-wrap:break-word">转发全据消息页面方法</span><span style="font-family:Times New Roman; word-wrap:break-word"> :</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span> <span style="word-wrap:break-word">注意转发的时候的路径是绝对地址 , 从应用的根目录开始 , / 表示应用的根目录 , 页面是在根目录下的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public static void forward(HttpServletRequest request , HttpServletResponse response , String message) throws ServletException , IOException{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       request.setAttribute(“message” , message);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       request.getRequestDispatcher(“/WEB-INF/pages/message.jsp”).forward(request , response);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">WebUtils</span><span style="font-family:宋体; word-wrap:break-word">工具类是否可用</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    验证request2Bean()方法可行性 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       a. 一个jsp页面不能跳转到另一个jsp页面 , 如果想要跳转 , 必须使用一个UiServlet进行跳转 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       b. 在首页中创建一个链接 , 直接链接到 “${pageContext.request.contextPath}/servlet/UiWebUtilsTest” ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">           el表达式不用导入标签库就可以使用 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">servlet/UiWebUtilsTest是一个中转页面 , 在这个页面中只有一句</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">request.getRequestDispatcher(“/WEB-INF/pages/webutilstest.jsp”).forward(request , response)语句 , 直接跳转到测试页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    创建一个Person类 , 有三个属性 name , birtjday , age ; 从表单提交这三个属性 , 其中birthday是Date类型的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    wenutilstest.jsp表单页 , 提交上面三个属性到WebUtilsTest页面 , 调用WebUtils.request2questBean()方法 , 看是否能将表单中的数据封装到Person实体类中 , 包括日期属性 , 如果成功 , 就说明验证成功了 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">验证全局消息转发页面可行性 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    a. 在上面的servlet/WebUtilsTest中调用forward()方法 ,传入request , response , “验证全局消息页面” , 如果最后提交完表单后 , 自动跳转到这个页面 , 说明验证成功</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2)JdbcUtils</span><span style="font-family:黑体; word-wrap:break-word">工具类</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:red; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">从配置文件中获取</span></span><span style="color:red; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">jdbc</span></span><span style="color:red; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">四要素步骤</span></span><span style="color:red; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"> :</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    设置静态代码块 , 在该类加载的时候就获取四要素 , 只获取依次就可以 , 以后就没必要调用了 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    创建Properties类的对象 , 用来接受配置文件中的数据 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    使用 JdbcUtils.class.getClassLoader.getResourceAsStream(“”)方法将配置文件传入输入流中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    关联Properties对象和输入流</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    从Properties对象中取数据 , 并进行操作 , 加载驱动也是在这一步完成的 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:red; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:10.5pt">释放资源方法</span></span></span> :</span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    一个if语句是一组 , 一共yao释放三个对象 , 这三个方法都是差不多的 , 只是变量不同 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    在每个if语句中 , 先判断变量是否为空 , 如果不为空就关闭 , 然后为了以防万一在将其指向null .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:red; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="word-wrap:break-word; font-size:10.5pt">导包问题</span></span></span> :</span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    注意 , 这个方法中的 Connection , PreparedStatement , ResultSet 类导入的包均为java.sql包下的 , 不是mysql下的 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">a. </span><span style="font-family:宋体; word-wrap:break-word">先私有化构造函数</span><span style="font-family:Times New Roman; word-wrap:break-word"> , </span><span style="font-family:宋体; word-wrap:break-word">工具类不允许创建对象</span><span style="font-family:Times New Roman; word-wrap:break-word"> .</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">private JdbcUtils(){}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">b. </span><span style="font-family:宋体; word-wrap:break-word">设置全局变量</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">将数据库路径 uri , 账号 uer , 密码 password 设置为类的全局变量 . 因为这些变量是在静态代码块中读取到的 , 然后在下面的数据库连接方法中还要使用 , 因此要设置为全局变量 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">static{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">c. </span><span style="font-family:宋体; word-wrap:break-word">设置静态代码块</span><span style="font-family:Times New Roman; word-wrap:break-word"> , </span><span style="font-family:宋体; word-wrap:break-word">处理四要素</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">设置一个静态代码块 , 在静态代码块中读取配置文件 , 注册驱动 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">Properties</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span>类表示了一个持久的属性集。<span style="font-family:宋体; word-wrap:break-word">Properties</span><span style="font-family:Times New Roman; word-wrap:break-word"> </span>可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    static{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //读取配置问文件 , 获取四要素</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Properties props = new Properties();   //创建一个Properties对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //将jdbc.Properties文件读取到输入流中</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    InputStream in = JdbcUtils.class.getClassLoader().getRespurceAsStream(“jdbc.Properties”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //相当于将文件与props对象关联 , 将文件中的键值对存到props对象中</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">props.load(in);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">//取出驱动名字 , 加载驱动</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">String driverClassName = props.getProperty(“DriverClass”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">Class.classForName(driverClassName);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">//取出数据库路径</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">uri = props.getProperty(“uri”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">//取出数据库的用户名</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">user = props.getProperty(“user”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">//取出数据库密码</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">password = props.getProperty(“password”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    throw new</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">d.</span><span style="font-family:宋体; word-wrap:break-word">创建连接方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word"></span>注意这里的<span style="font-family:Times New Roman; word-wrap:break-word">Connection</span>需要导入的包是<span style="font-family:Times New Roman; word-wrap:break-word"> java.sql.Connection .</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public static Connection getConnection() throws SQLException{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return DriverManger.getConnection(uri , user , password);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">e.</span><span style="font-family:宋体; word-wrap:break-word">释放资源方法</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public static void release(Connecttion conn , Statement stmt , ResultSet rs){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(conn != null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn.close();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.printStackTrace ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(stmt != null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt.close();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.printStackTrace ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">stmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(rs!= null){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    rs.close();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.printStackTrace ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       }</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(4)</span><span style="font-family:宋体; word-wrap:break-word">实现</span><span style="font-family:Times New Roman; word-wrap:break-word">Dao</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1)</span><span style="font-family:黑体; word-wrap:break-word">获得所有的员工</span></span></span><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">流程介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象放到方法的全局变量中 , 并赋值null , 这是因为在try finally两个区域都要用到这些对象 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得连接 , 调用 JdbcUtils.getConnection()来获得 , 得到conn对象;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用conn.PreparedStatement(sql语句字符串)方法获得 stmt对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    发送sql语句 , 调用stmt.executeQuery()方法 , 得到rs对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    处理rs对象中的数据 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">异常处理</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    在Dao中出现的异常 , 我们都将其抓起来 , 然后转为一个运行时异常抛出 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    先写一个异常 ,然后会报错 , 我们就ctrl+1 处理错误 , 创建这个异常 , 然后就将异常制定创建在Exception包中 , 继承RuntimeException , 并且继承所有的方法 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public List getAll(){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //由于有try catch 语句 , 这些变量除了在try中使用以外 , 还要在finally中使用 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement stmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();  //获得连接</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //预编译sql语句</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “select * from employees” ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //发送sql语句</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    rs = stmt.executeQuery();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //处理结果集 , 我们将取出的数据封装在employee对象中 , 将employee对象都放在list中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    List list = new ArrayList();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //遍历rs</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    while(rs.next()){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Employee e = new Employee(); //创建一个employee对象 , 用来封装结果</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setBirthday(rs.getDate(“birthday”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setEntryDate(rs.getDate(“entrydate”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setdegree(rs.getString(“degree”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setDepartment(rs.getString(“department”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setGender(rs.getString(“gender”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setId(rs.getString(“id”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setIdcard(rs.getString(“idcard”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setName(rs.getString(“name”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setPosition(rs.getString(“position”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    list.add(e);  //将封装好的对象加入到list中</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">return list;  //将list返回</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release(conn , stmt , rs);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2)</span><span style="font-family:黑体; word-wrap:break-word">根据</span><span style="font-family:Arial; word-wrap:break-word">id</span><span style="font-family:黑体; word-wrap:break-word">查找</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      </span><span style="font-family:宋体; word-wrap:break-word">流程介绍</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象设置为方法的全局变量 , 因为在try 和 finally区域中要使用这些变量 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得连接 , 调用JdbcUtils.getConnection()方法 , 得到Connecttion对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用conn.preparedStatement(sql语句)方法 , 预编译sql语句 , 得到PreparedStatement对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    发送sql语句 , 调用 stmt.executeQuery()方法 , 执行sql语句 , 返回ResultSet对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    处理结果集 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public Employee find(String id){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement stmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();  //获得连接</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //预编译sql语句</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “select * from employees where id=?” ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //替换占位符</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt.setString(1,id);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //发送sql语句</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    rs = stmt.executeQuery();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //遍历rs</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    while(rs.next()){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Employee e = new Employee(); //创建一个employee对象 , 用来封装结果</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setBirthday(rs.getDate(“birthday”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setEntryDate(rs.getDate(“entrydate”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setdegree(rs.getString(“degree”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setDepartment(rs.getString(“department”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setGender(rs.getString(“gender”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setId(rs.getString(“id”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setIdcard(rs.getString(“idcard”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setName(rs.getString(“name”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setPosition(rs.getString(“position”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return e ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">return null;  //将list返回</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release(conn , stmt , rs);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">3)</span><span style="font-family:黑体; word-wrap:break-word">添加</span><span style="font-family:Arial; word-wrap:break-word">employee</span><span style="font-family:黑体; word-wrap:break-word">对象到数据库</span></span></span><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">流程介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象设置为方法的全局变量 , 因为在try 和 finally 两个区域都用到了这三个对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得连接 , 调用 JdbcUtils.getConnection()方法 , 得到conn ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用conn.PreparedStatement(sql语句)方法 ,得到PreparedStatement对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    替换占位符</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    发送sql语句 , 调用stmt.executeUpdate()方法 , 得到一个int型数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">关于替换占位符</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    先进行预编译 , 先执行conn.preparedStatement(sql)方法 , 将sql语句与pstmt关联起来 , 我们才能使用PreparedStatement类下的替换占位符方法 ,</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">如果是字符串形式 , 我们可以使用setString(1 , “张三”) , 如果是日期形式 , 我们可以使用 setDate(1 , java.sql.Date对象) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    替换占位符的方法一般是 : set被替换的类型(占位符的索引 , 被替换的实体) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    如果被替换的是字符串  ,那么被替换的类型就是String , 方法就是 setString() ; 如果被替换的是日期 , 被替换的类型就是Date类型 , 不过这个Date是java.sql.Date , 一定要区分java.utils.Date , 方法就是setDate() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    关于替换Date的处理 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       我们使用setDate(index , new java.sql.Date(dateStamp)); 新建一个sql的Date对象 , 在构造函数中传入一个时间戳 , 时间戳就是从1970年到现在的毫秒数 ,在本程序中 , 我们是这样处理的 , 先取出utils的Date , 然后获得时间戳 , 再将时间戳传入sql的Date构造函数 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    setDate(index , new java.sql.Date(bean.getDate().getTime()));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public boolean save(employee bean){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement pstmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//获得连接 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//预编译sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “insert into employees (id,name,gender,birthday,idcard,degree,entrydate,department,position) values(?,?,?,?,?,?,?,?,?)”</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//替换占位符 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.preparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(1 , bean.getId());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(2 , bean.getName());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(3 ,bean.getGenter());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setDate(4 , new java.sql.Date(bean.getDate().getTime()));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(5 , bean.getIdcard());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(6 , bean.getDegree());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setDate(7 , new java.sql.Date(bean.getEntrydate().getTime()));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(8 , bean.getDepartment());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(9 , bean.getPosition());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//发送sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    int num = stmt.executeUpdate();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(num > 0)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       return true ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return false;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">4)</span><span style="font-family:黑体; word-wrap:break-word">修改数据库中的</span><span style="font-family:Arial; word-wrap:break-word">employee</span><span style="font-family:黑体; word-wrap:break-word">数据</span></span></span><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">流程介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement  , ResultSet ,三个类的对象 conn , pstmt , rs的声明提为该方法的全局变量 , 因为在try和finally两个区域中都要用到这三个对象 , 在try中是对数据库操作的需要 , 在finally中是在释放资源的时候 , 将这三个对象全部释放 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得数据库连接 , 调用JdbcUtils.getConnection()方法 , 获得conn对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用conn.PreparedStatement(sql)方法 , 获得PreparedStatement对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    替换占位符</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    发送sql语句 , 返回是否成功修改得到一个布尔值 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public boolean update(employee bean){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement pstmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//获得连接 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//预编译sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “update employees set name , gender=? , birthday=? , idcard=? , degree=? , entrydate=? , department =?, position where id =?”;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//替换占位符 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.preparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(1 , bean.getName());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(2 ,bean.getGenter());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setDate(3 , new java.sql.Date(bean.getDate().getTime()));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(4 , bean.getIdcard());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(5 , bean.getDegree());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setDate(6 , new java.sql.Date(bean.getEntrydate().getTime()));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(7 , bean.getDepartment());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(8 , bean.getPosition());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(9 , bean.getId());</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//发送sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    int num = stmt.executeUpdate();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(num > 0)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       return true ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return false;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">5)</span><span style="font-family:黑体; word-wrap:break-word">删除一个员工</span></span></span><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">流程介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象设置为方法的全局变量</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得数据库连接 , 调用JdbcUtils.getConnection()方法 , 获得conn ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql , conn.PreparedStatement(sql) , 得到pstmt对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    替换占位符</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    发送sql语句 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public boolean update(int id){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement pstmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//获得连接 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//预编译sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “delete from employees where id =?”;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//替换占位符 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.preparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt.setString(1 , id);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//发送sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    int num = stmt.executeUpdate();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(num > 0)</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       return true ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return false;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">6)</span><span style="font-family:黑体; word-wrap:break-word">查询记录数</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">流程介绍</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象设置为方法的全局变量  , 在try中需要这3个变量进行数据库操作  , 在finally中需要将这三个变量释放掉 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    得到数据库连接 , 调用JdbcUtils.getConnection()方法 , 得到conn对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用 conn.PreparedStatement(sql)方法 , 得到 pstmt对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    发送sql语句 , 调用pstmt.executeQuery()方法 , 得到rs对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    处理结果集</span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">注意</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">凡是查询返回的都是rs对象 , 增删改返回的都是int对象 .</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">    获得查询的数据 , 以dos窗口中的列名为准 , 例如这次查询 count(*) , 我们最后从rs中获取的时候也是用</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">rs.getString(“count(*)”)方法 .</span></span> </div> <div style="word-wrap:break-word"> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">   </span></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">代码</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public int getotalRecord(){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement pstmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//获得连接 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//预编译sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “select count(*) from employees”;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    pstmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//发送sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    rs = stmt.executeQuery();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    //处理结果集</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    if(rs.next()){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return getInt(“count(*)”);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">return 0;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">7)</span><span style="font-family:黑体; word-wrap:break-word">查询分页显示数据</span></span></span><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">流程介绍</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    将Connecttion , PreparedStatement , ResultSet 对象设置为方法的全局变量 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    获得连接 , 调用JdbcUtils.getConnection()方法 , 得到conn对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    预编译sql语句 , 调用conn.PreparedStatement(sql)方法 ,得到pstmt对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    发送sql语句 , 调用 pstmt.executeQuery()方法 ,得到rs对象 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    处理结果集 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public List getPageData(int start , int len){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//由于有try catch 语句 , 这些变量除了在try中使用以外 , 还要在finally中使用 . </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Connecttion conn = null;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    PreparedStatement stmt = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    ResultSet rs = null ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    try{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    conn = JdbcUtils.getConnection();  //获得连接</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//预编译sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    String sql = “select * from employees limite ?,?” ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt = conn.PreparedStatement(sql);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//替换占位符 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt.setInt(1, start);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    stmt.setInt(2, len);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//发送sql语句 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    rs = stmt.executeQuery();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//处理结果集 , 我们将取出的数据封装在employee对象中 , 将employee对象都放在list中 . </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    List list = new ArrayList();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span>//遍历rs </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    while(rs.next()){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    Employee e = new Employee(); </span>//创建一个employee对象 , 用来封装结果 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setBirthday(rs.getDate(“birthday”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setEntryDate(rs.getDate(“entrydate”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setdegree(rs.getString(“degree”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setDepartment(rs.getString(“department”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setGender(rs.getString(“gender”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setId(rs.getString(“id”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setIdcard(rs.getString(“idcard”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setName(rs.getString(“name”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    e.setPosition(rs.getString(“position”));</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    list.add(e);  </span>//将封装好的对象加入到list中 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">return list;  </span>//将list返回 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}catch(Exception e){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    throw</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}finally{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    JdbcUtils.release(conn , stmt , rs);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">8)</span><span style="font-family:黑体; word-wrap:break-word">验证是否可用</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      a. </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">findAll()</span><span style="font-family:宋体; word-wrap:break-word">和</span><span style="font-family:Times New Roman; word-wrap:break-word">JdbcUtils()</span><span style="font-family:宋体; word-wrap:break-word">方法</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">       第一种方法</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    在首页中链接到servlet/UiWebUitlsTest页面中去 , 我们在这个页面测试这个方法 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    在servlet/UiWebUitlsTest中调用JdbcUtils.findAll()方法 , 将返回的list打印出来 , 这种方法不好 , 验证起来很麻烦 , 我们只需要看看getAll()方法能不能将数据全部取出 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">第二种方法(推荐)</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">我们创建一个主函数类Test类 , 在主函数中调用getAll()方法 , 这样有很明显的提示 , 在这里出现了两个错误 , 第一个是将jdbc.properties配置文件中的url写错了 , 写成uri , 在这里注意 , 另外将sql语句中的表名写错了 , 改完这两个错误 , 成功将方法返回的list打印出来 , 并且能在list中查看相关的变量 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      b. </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">getById()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">        在Test中输入下面的代码 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Employee bean = </span> <span style="word-wrap:break-word">dao</span>.getById("1"); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println("test--> getById() : " + bean); </div> <div style="word-wrap:break-word">        执行 , 如果能打印出取出的代码 , 就说明该方法可行 </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      c. </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">insert()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       在Test中输入以下代码 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Employee bean2 = </span> <span style="word-wrap:break-word">new</span> Employee(); </div> <div style="word-wrap:break-word">        bean2.setId("2"); </div> <div style="word-wrap:break-word">        bean2. <span style="word-wrap:break-word">setBirthday</span>( <span style="word-wrap:break-word">new</span> Date()); </div> <div style="word-wrap:break-word">         bean2.setEntrydate( <span style="word-wrap:break-word">new</span> Date()); </div> <div style="word-wrap:break-word">         <span style="word-wrap:break-word">boolean</span> b =  <span style="word-wrap:break-word">dao</span>.insert(bean2); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println("test--> insert() : " + b); </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       这里只有id是必须的 , 不过在这里必须写上日期 , 我们在替换占位符的时候 , 使用的 new java.sql.Date(bean.getBirtiday().getTime())方法 , 如果我们不输入日期 , 那么就会出现空指针调用 , 抛出空指针异常 , 因此我们将两个日期加上去 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       这个方法我们不用的时候 , 将其注释掉 , 因为这个每次执行都要修改以下传入的参数 , 我们插入了id为1  ,下一次就不能再插入1 了 , 因为id是主键, 如果插入逐渐重复就会出现异常 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      d. </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">update()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">       </span></span>//测试EmployeeDao类中的update()方法是否可用 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Employee bean3 = </span> <span style="word-wrap:break-word">new</span> Employee(); </div> <div style="word-wrap:break-word">        bean3.setId("000fb8a5-7d13-460f-9ffb-f17cd8aa59b6"); </div> <div style="word-wrap:break-word">         bean3.setBirthday( <span style="word-wrap:break-word">new</span> Date()); </div> <div style="word-wrap:break-word">        bean3.setEntrydate( <span style="word-wrap:break-word">new</span> Date()); </div> <div style="word-wrap:break-word">         <span style="word-wrap:break-word">boolean</span> b1 =  <span style="word-wrap:break-word">dao</span>.update(bean3); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println("test--> update() : " + b1); </div> <div style="word-wrap:break-word">        使用上面的方法来验证是否更新成功 . </div> <span style="word-wrap:break-word"><span style="color:black; word-wrap:break-word"><span style="word-wrap:break-word; font-size:10pt"><span style="font-family:Times New Roman; word-wrap:break-word">         e. </span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">delete()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//测试EmployeeDao类中的delete()方法是否可用 </div> <div style="word-wrap:break-word">         <span style="word-wrap:break-word">boolean</span> b2 =  <span style="word-wrap:break-word">dao</span>.delete("2"); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println("test--> delete() : " + b2); </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">      f.</span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">getTotalRecord()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//测试EmployeeDao类中的getTotalRecord()方法是否可用 </div> <div style="word-wrap:break-word">         <span style="word-wrap:break-word">int</span> totalRecord =  <span style="word-wrap:break-word">dao</span>.getTotalRecord(); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println(totalRecord); </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">   g.<span style="font-family:Times New Roman; word-wrap:break-word"> </span><span style="font-family:宋体; word-wrap:break-word">验证</span><span style="font-family:Times New Roman; word-wrap:break-word">getPageData()</span><span style="font-family:宋体; word-wrap:break-word">方法是否可用</span></span></span></span> <div style="word-wrap:break-word">        //测试EmployeeDao类中的getPageData()方法是否可用 </div> <div style="word-wrap:break-word">         <span style="word-wrap:break-word">List</span> pageData =  <span style="word-wrap:break-word">dao</span>.getPageData(1, 5); </div> <div style="word-wrap:break-word">        System. <span style="word-wrap:break-word">out</span>.println(pageData); </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(5)</span><span style="font-family:宋体; word-wrap:break-word">实现</span><span style="font-family:Times New Roman; word-wrap:break-word">service</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    service是业务逻辑层 , 这层代码起着承上启下的作用 , web层调用service , service调用dao层的方法和成员 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    在service中 , 代码很简单 ,我们只需要创建一个私有的EmployeeDao成员变量 , 通过这个私有的对象调用EmployeeDao中的方法 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    代码 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public class service{</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//创建一个EmployeeDao实体类 , 我们通过这个实体类调用EmployeeDao中操作数据库的方法 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       private EmployeeDao dao = new EmployeeDao();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       </span>//得到所有员工信息 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       public List getAll(){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return dao.getAll();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> //根据id查找员工信息 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public Employee getById(String id){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return dao.getById(id) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> //插入员工信息 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public boolean insert(Employee bean){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return dao.insert(bean);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> //修改员工信息 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public boolean update(Employee bean){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return dao.update(bean);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> //删除员工信息 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">public boolean delete(String id){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    return dao.delete(id);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(6)</span><span style="font-family:宋体; word-wrap:break-word">几个页面链接</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    我们使用浏览器首先登陆的是首页 , 我们通过首页跳转到UiServlet , 在通过UiServlet跳转到其它页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    首页中所有的跳转都是跳转向UiServlet中 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    在index.jsp首页中设置两个链接 , 分别连接到查看所有的员工页 , 和添加员工页 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">首页中的代码</span> :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       <a href = “${pageContext.request.contextPath}/servlet/UiGetAllServlet”>查看所有的员工 </a></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       <a href = “${pageContext.request.contextPath}/servlet/UiAddServlet”>添加员工 </a></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    通过上面的链接能到相关的UiServlet页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">UiGetAllServlet页面代码</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       这个页面中我们调用service中的getAll()方法 , 将获得的List对象存入request中 .  跳转代码如下 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       request.getRequestDispather(“/WEB-INF/pages/getalldata.jsp”).forward(request , response);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       通过执行上面的语句 , 可以直接跳转到查看所有员工页面 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    <span style="word-wrap:break-word">UiAddServlet页面代码</span></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       这个是一个纯跳转页面 , 只实现跳转功能 . 代码如下 :</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       request.getRequestDispather(“/WEB-INF/pages/add.jsp”).forward(request , response);</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"><span style="word-wrap:break-word">    页面连接做完之后 ,我们就能够登陆首页 , 进行相应的页面跳转了 .</span></span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Times New Roman; word-wrap:break-word">(7) </span><span style="font-family:宋体; word-wrap:break-word">分页实现</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">1)</span><span style="font-family:黑体; word-wrap:break-word">分页需求</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">由于数据库中的数据量过大 , 在一个页面显示所有的数据用户体验不够好 , 因此我们使用了分页 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">   </span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    实现上图所示的需求 , 我们来逐条分析 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    除了上面的图片之外 , 我们还需要有显示的数据 , 这里每页显示10条信息 , 显示的数据都放在一个List中 , 显然我们需要一个List变量 , pageData来存放要显示的数据 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    显示当前的页数 , 当前第几页 , 我们根据页数来从数据库中查询相关信息 , 这个用一个String变量pageNum来表示 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    总记录数 , 我们使用count(*)可以得到 , String totalRecord ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    总页数 , 总记录数 除以每页显示的数据条数count , 注意这里的算法 totalPageNum = ( totalRecord + (count - 1) )/count ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    起始页码 , 总共显示10页的编号 , 一般来说 , 起始页码就是当前页减去5 , 如果当前页小于5 , 那就显示1-10 编号 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">f.    终止页码 , 当前页加上4 , 如果当前页是大于totalPageNum-4 , 那么就显示 totalPageNum-9 – totalPageNum编号 ;</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">2)</span><span style="font-family:黑体; word-wrap:break-word">创建</span><span style="font-family:Arial; word-wrap:break-word">page</span><span style="font-family:黑体; word-wrap:break-word">实体类</span><span style="font-family:Arial; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    </span> <span style="word-wrap:break-word">private</span>  <span style="word-wrap:break-word">List</span> pageData;   // 分页显示的数据 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> pageNum; // 当前页码 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> totalRecord; // 总记录数 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> totalPageNum;   // 总页数 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> firstPageNum;   // 起始页码 </div> <div style="word-wrap:break-word">      <span style="word-wrap:break-word">private int</span> lastPageNum; // 结束页码 </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    获得其getter和setter方法 .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:Arial; word-wrap:break-word">3)</span><span style="font-family:黑体; word-wrap:break-word">分页</span><span style="font-family:Arial; word-wrap:break-word">service</span><span style="font-family:黑体; word-wrap:break-word">实现</span></span></span><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">底层</span><span style="font-family:Times New Roman; word-wrap:break-word">dao</span><span style="font-family:宋体; word-wrap:break-word">实现</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">分页的底层是基于EmployeeDao的getTotaoRecord()方法和getPageDate()方法实现的 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    其中getTotaoRecord()方法是获得数据库中该表的总记录数 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    getPageDate()方法是获得从一个起始位置 , 制定长度的记录数 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word"></span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    这里主要解析service实现 , 分页的service主要是封装page .</span> </div> <span style="word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word">流程介绍</span><span style="font-family:Times New Roman; word-wrap:break-word"></span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">a.    创建Page对象 , 这个对象是要返回的 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">b.    设置count , 这个很重要 , 表示每页显示数据条数 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">c.    查询总记录数 , 创建一个EmployeeDao对象 , 通过这个对象调用getTotaoRecord()方法 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">d.    计算总页数 , 使用 ( TotalRecord + ( count - 1 ) ) / count 方法 .</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">e.    查询分页显示的数据 , 开始位置是 ( PageNum – 1 ) * count , 长度为count ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">f.    计算起始页码和结束页码 , 起始页码为当前页-5 , 终止页码为当前页+4 , 如果当前页是前5页 , 那么显示前10页页码 , 如果当前页是后4页 , 那么显示后10页页码 , 如果页面不足10页 , 那就第一页是当前页 , 最后一页是终止页 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">g.    PageNum是通过参数传递进来的 , 将上面的所有的数据封装起来返回 .</span> </div> <span style="word-wrap:break-word"><span style="font-family:宋体; word-wrap:break-word"><span style="font-size:24px; word-wrap:break-word"><span style="color:#000000; word-wrap:break-word">代码</span></span></span></span> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    public Page getPage( int pageNum ){</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //创建Page对象</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       Page page = new Page();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //设置count</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int count = 10 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //创建EmployeeDao对象 , 使用该对象操作数据库</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       EmployeeDao dao = new EmployeeDao() ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //查询总记录数</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int totalRecord = dao.getTotaoRecord();</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //计算总页数</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int totalPageNum = ( totalPageNum + ( count - 1 ) ) / count ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //查询分页显示数据</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int start = ( pageNum – 1 ) * 10 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int len = count ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       List list = getPageDate( start , len ) ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //计算页码显示起始页和终止页</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int firstPage = pageNum - 5 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       int lastPage = pageNum + 4 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       //将三种特殊情况筛选出来</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">       if(firstPage < 1){   //这种情况是当前页是前5页的情况</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    firstPage = 1 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    lastPage = 10 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">if(lastPage > pageNum){  //这种情况是当前页是后四页的情况</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    firstPage = totalPageNum -9 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    lastPage = totalPageNum ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">if(totalPageNum < 10){   //这种情况是总页数不足10页的情况</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    firstPage = 1 ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">    lastPage = totalPageNum ;</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> <div style="word-wrap:break-word"> <span style="color:#000000; word-wrap:break-word">}</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1274979526106955776"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(java web知识点总结)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835511912843014144.htm" title="理解Gunicorn:Python WSGI服务器的基石" target="_blank">理解Gunicorn:Python WSGI服务器的基石</a> <span class="text-muted">范范0825</span> <a class="tag" taget="_blank" href="/search/ipython/1.htm">ipython</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>理解Gunicorn:PythonWSGI服务器的基石介绍Gunicorn,全称GreenUnicorn,是一个为PythonWSGI(WebServerGatewayInterface)应用设计的高效、轻量级HTTP服务器。作为PythonWeb应用部署的常用工具,Gunicorn以其高性能和易用性著称。本文将介绍Gunicorn的基本概念、安装和配置,帮助初学者快速上手。1.什么是Gunico</div> </li> <li><a href="/article/1835509897106649088.htm" title="Long类型前后端数据不一致" target="_blank">Long类型前后端数据不一致</a> <span class="text-muted">igotyback</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问</div> </li> <li><a href="/article/1835509769822105600.htm" title="LocalDateTime 转 String" target="_blank">LocalDateTime 转 String</a> <span class="text-muted">igotyback</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassMain{publicstaticvoidmain(String[]args){//获取当前时间LocalDateTimenow=LocalDateTime.now();//定义日期格式化器DateTimeFormatterformat</div> </li> <li><a href="/article/1835509391361667072.htm" title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a> <span class="text-muted">13jjyao</span> <a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div> </li> <li><a href="/article/1835504218178416640.htm" title="Google earth studio 简介" target="_blank">Google earth studio 简介</a> <span class="text-muted">陟彼高冈yu</span> <a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a> <div>GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G</div> </li> <li><a href="/article/1835502578050363392.htm" title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a> <span class="text-muted">好看资源平台</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div> </li> <li><a href="/article/1835498925755297792.htm" title="DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理" target="_blank">DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理</a> <span class="text-muted">STU学生网页设计</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/%E6%9C%9F%E6%9C%AB%E7%BD%91%E9%A1%B5%E4%BD%9C%E4%B8%9A/1.htm">期末网页作业</a><a class="tag" taget="_blank" href="/search/html%E9%9D%99%E6%80%81%E7%BD%91%E9%A1%B5/1.htm">html静态网页</a><a class="tag" taget="_blank" href="/search/html5%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">html5期末大作业</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1/1.htm">网页设计</a><a class="tag" taget="_blank" href="/search/web%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web大作业</a> <div>️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程</div> </li> <li><a href="/article/1835498547785592832.htm" title="【华为OD机试真题2023B卷 JAVA&JS】We Are A Team" target="_blank">【华为OD机试真题2023B卷 JAVA&JS】We Are A Team</a> <span class="text-muted">若博豆</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>华为OD2023(B卷)机试题库全覆盖,刷题指南点这里WeAreATeam时间限制:1秒|内存限制:32768K|语言限制:不限题目描述:总共有n个人在机房,每个人有一个标号(1<=标号<=n),他们分成了多个团队,需要你根据收到的m条消息判定指定的两个人是否在一个团队中,具体的:1、消息构成为:abc,整数a、b分别代</div> </li> <li><a href="/article/1835496149843275776.htm" title="关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript" target="_blank">关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript</a> <span class="text-muted">二挡起步</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/%E9%A3%8E%E6%99%AF/1.htm">风景</a> <div>⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip</div> </li> <li><a href="/article/1835496148601761792.htm" title="HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动" target="_blank">HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动</a> <span class="text-muted">二挡起步</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/web%E8%AE%BE%E8%AE%A1%E7%BD%91%E9%A1%B5%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%BE%E8%AE%A1/1.htm">web设计网页规划与设计</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/dreamweaver/1.htm">dreamweaver</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线</div> </li> <li><a href="/article/1835495170972413952.htm" title="git - Webhook让部署自动化" target="_blank">git - Webhook让部署自动化</a> <span class="text-muted">大猪大猪</span> <div>我们现在有一个需求,将项目打包上传到gitlab或者github后,程序能自动部署,不用手动地去服务器中进行项目更新并运行,如何做到?这里我们可以使用gitlab与github的挂钩,挂钩的原理就是,每当我们有请求到gitlab与github服务器时,这时他俩会根据我们配置的挂钩地扯进行访问,webhook挂钩程序会一直监听着某个端口请求,一但收到他们发过来的请求,这时就知道用户有请求提交了,这时</div> </li> <li><a href="/article/1835493267907637248.htm" title="webpack图片等资源的处理" target="_blank">webpack图片等资源的处理</a> <span class="text-muted">dmengmeng</span> <div>需要的loaderfile-loader(让我们可以引入这些资源文件)url-loader(其实是file-loader的二次封装)img-loader(处理图片所需要的)在没有使用任何处理图片的loader之前,比如说css中用到了背景图片,那么最后打包会报错的,因为他没办法处理图片。其实你只想能够使用图片的话。只加一个file-loader就可以,打开网页能准确看到图片。{test:/\.(p</div> </li> <li><a href="/article/1835492740536823808.htm" title="node.js学习" target="_blank">node.js学习</a> <span class="text-muted">小猿L</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a> <div>node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行</div> </li> <li><a href="/article/1835476093189058560.htm" title="Java 重写(Override)与重载(Overload)" target="_blank">Java 重写(Override)与重载(Overload)</a> <span class="text-muted">叨唧唧的</span> <div>Java重写(Override)与重载(Overload)重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常IOExceptio</div> </li> <li><a href="/article/1835473830873755648.htm" title="简单了解 JVM" target="_blank">简单了解 JVM</a> <span class="text-muted">记得开心一点啊</span> <a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>目录♫什么是JVM♫JVM的运行流程♫JVM运行时数据区♪虚拟机栈♪本地方法栈♪堆♪程序计数器♪方法区/元数据区♫类加载的过程♫双亲委派模型♫垃圾回收机制♫什么是JVMJVM是JavaVirtualMachine的简称,意为Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统(如:JVM、VMwave、VirtualBox)。JVM和其他两个虚拟机</div> </li> <li><a href="/article/1835471058648526848.htm" title="1分钟解决 -bash: mvn: command not found,在Centos 7中安装Maven" target="_blank">1分钟解决 -bash: mvn: command not found,在Centos 7中安装Maven</a> <span class="text-muted">Energet!c</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1分钟解决-bash:mvn:commandnotfound,在Centos7中安装Maven检查Java环境1下载Maven2解压Maven3配置环境变量4验证安装5常见问题与注意事项6总结检查Java环境Maven依赖Java环境,请确保系统已经安装了Java并配置了环境变量。可以通过以下命令检查:java-version如果未安装,请先安装Java。1下载Maven从官网下载:前往Apach</div> </li> <li><a href="/article/1835470931783413760.htm" title="「豆包Marscode体验官」 | 云端 IDE 启动 & Rust 体验" target="_blank">「豆包Marscode体验官」 | 云端 IDE 启动 & Rust 体验</a> <span class="text-muted">张风捷特烈</span> <a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>theme:cyanosis我正在参加「豆包MarsCode初体验」征文活动MarsCode可以看作一个运行在服务端的远程VSCode开发环境。对于我这种想要学习体验某些语言,但不想在电脑里装环境的人来说非常友好。本文就来介绍一下在MarsCode里,我的体验rust开发体验。一、MarsCode是什么它的本质是:提供代码助手和云端IDE服务的web网站,可通过下面的链接访问https://www</div> </li> <li><a href="/article/1835469672334585856.htm" title="Java企业面试题3" target="_blank">Java企业面试题3</a> <span class="text-muted">马龙强_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1.break和continue的作用(智*图)break:用于完全退出一个循环(如for,while)或一个switch语句。当在循环体内遇到break语句时,程序会立即跳出当前循环体,继续执行循环之后的代码。continue:用于跳过当前循环体中剩余的部分,并开始下一次循环。如果是在for循环中使用continue,则会直接进行条件判断以决定是否执行下一轮循环。2.if分支语句和switch分</div> </li> <li><a href="/article/1835468916290318336.htm" title="JVM、JRE和 JDK:理解Java开发的三大核心组件" target="_blank">JVM、JRE和 JDK:理解Java开发的三大核心组件</a> <span class="text-muted">Y雨何时停T</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Java是一门跨平台的编程语言,它的成功离不开背后强大的运行环境与开发工具的支持。在Java的生态中,JVM(Java虚拟机)、JRE(Java运行时环境)和JDK(Java开发工具包)是三个至关重要的核心组件。本文将探讨JVM、JDK和JRE的区别,帮助你更好地理解Java的运行机制。1.JVM:Java虚拟机(JavaVirtualMachine)什么是JVM?JVM,即Java虚拟机,是Ja</div> </li> <li><a href="/article/1835464504918503424.htm" title="Java面试题精选:消息队列(二)" target="_blank">Java面试题精选:消息队列(二)</a> <span class="text-muted">芒果不是芒</span> <a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95%E9%A2%98%E7%B2%BE%E9%80%89/1.htm">Java面试题精选</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>一、Kafka的特性1.消息持久化:消息存储在磁盘,所以消息不会丢失2.高吞吐量:可以轻松实现单机百万级别的并发3.扩展性:扩展性强,还是动态扩展4.多客户端支持:支持多种语言(Java、C、C++、GO、)5.KafkaStreams(一个天生的流处理):在双十一或者销售大屏就会用到这种流处理。使用KafkaStreams可以快速的把销售额统计出来6.安全机制:Kafka进行生产或者消费的时候会</div> </li> <li><a href="/article/1835462485629562880.htm" title="白骑士的Java教学基础篇 2.5 控制流语句" target="_blank">白骑士的Java教学基础篇 2.5 控制流语句</a> <span class="text-muted">白骑士所长</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E5%AD%A6/1.htm">教学</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>欢迎继续学习Java编程的基础篇!在前面的章节中,我们了解了Java的变量、数据类型和运算符。接下来,我们将探讨Java中的控制流语句。控制流语句用于控制程序的执行顺序,使我们能够根据特定条件执行不同的代码块,或重复执行某段代码。这是编写复杂程序的基础。通过学习这一节内容,你将掌握如何使用条件语句和循环语句来编写更加灵活和高效的代码。条件语句条件语句用于根据条件的真假来执行不同的代码块。if语句‘</div> </li> <li><a href="/article/1835462232612368384.htm" title="python语法——三目运算符" target="_blank">python语法——三目运算符</a> <span class="text-muted">HappyRocking</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E7%9B%AE%E8%BF%90%E7%AE%97%E7%AC%A6/1.htm">三目运算符</a> <div>在java中,有三目运算符,如:intc=(a>b)?a:b表示c取两者中的较大值。但是在python,不能直接这样使用,估计是因为冒号在python有分行的关键作用。那么在python中,如何实现类似功能呢?可以使用ifelse语句,也是一行可以完成,格式为:aifbelsec表示如果b为True,则表达式等于a,否则等于c。如:c=(aif(a>b)elseb)同样是完成了取最大值的功能。</div> </li> <li><a href="/article/1835457442260021248.htm" title="ArrayList 源码解析" target="_blank">ArrayList 源码解析</a> <span class="text-muted">程序猿进阶</span> <a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><a class="tag" taget="_blank" href="/search/ArrayList/1.htm">ArrayList</a><a class="tag" taget="_blank" href="/search/List/1.htm">List</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/idea/1.htm">idea</a> <div>ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量capacity,表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添</div> </li> <li><a href="/article/1835455048277127168.htm" title="Python神器!WEB自动化测试集成工具 DrissionPage" target="_blank">Python神器!WEB自动化测试集成工具 DrissionPage</a> <span class="text-muted">亚丁号</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、前言用requests做数据采集面对要登录的网站时,要分析数据包、JS源码,构造复杂的请求,往往还要应付验证码、JS混淆、签名参数等反爬手段,门槛较高。若数据是由JS计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率</div> </li> <li><a href="/article/1835454921990828032.htm" title="Java爬虫框架(一)--架构设计" target="_blank">Java爬虫框架(一)--架构设计</a> <span class="text-muted">狼图腾-狼之传说</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BB%BB%E5%8A%A1/1.htm">任务</a><a class="tag" taget="_blank" href="/search/html%E8%A7%A3%E6%9E%90%E5%99%A8/1.htm">html解析器</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a> <div>一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast</div> </li> <li><a href="/article/1835454543471669248.htm" title="Java:爬虫框架" target="_blank">Java:爬虫框架</a> <span class="text-muted">dingcho</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>一、ApacheNutch2【参考地址】Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。Nutch致力于让每个人能很容易,同时花费很少就可以配置世界一流的Web搜索引擎.为了完成这一宏伟的目标,Nutch必须能够做到:每个月取几十亿网页为这些网页维护一个索引对索引文件进行每秒上千次的搜索提供高质量的搜索结果简单来说Nutch支持分</div> </li> <li><a href="/article/1835451016456269824.htm" title="MongoDB知识概括" target="_blank">MongoDB知识概括</a> <span class="text-muted">GeorgeLin98</span> <a class="tag" taget="_blank" href="/search/%E6%8C%81%E4%B9%85%E5%B1%82/1.htm">持久层</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数</div> </li> <li><a href="/article/1835450890077696000.htm" title="python怎么将png转为tif_png转tif" target="_blank">python怎么将png转为tif_png转tif</a> <span class="text-muted">weixin_39977276</span> <div>发国外的文章要求图片是tif,cmyk色彩空间的。大小尺寸还有要求。比如网上大神多,找到了一段代码,感谢!https://www.jianshu.com/p/ec2af4311f56https://github.com/KevinZc007/image2Tifimportjava.awt.image.BufferedImage;importjava.io.File;importjava.io.Fi</div> </li> <li><a href="/article/1835448239864770560.htm" title="JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)" target="_blank">JavaScript 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)</a> <span class="text-muted">跳房子的前端</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95/1.htm">前端面试</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>在JavaScript中,深拷贝(DeepCopy)和浅拷贝(ShallowCopy)是用于复制对象或数组的两种不同方法。了解它们的区别和应用场景对于避免潜在的bugs和高效地处理数据非常重要。以下是对深拷贝和浅拷贝的详细解释,包括它们的概念、用途、优缺点以及实现方式。1.浅拷贝(ShallowCopy)概念定义:浅拷贝是指创建一个新的对象或数组,其中包含了原对象或数组的基本数据类型的值和对引用数</div> </li> <li><a href="/article/1835444076007223296.htm" title="JAVA·一个简单的登录窗口" target="_blank">JAVA·一个简单的登录窗口</a> <span class="text-muted">MortalTom</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>文章目录概要整体架构流程技术名词解释技术细节资源概要JavaSwing是Java基础类库的一部分,主要用于开发图形用户界面(GUI)程序整体架构流程新建项目,导入sql.jar包(链接放在了文末),编译项目并运行技术名词解释一、特点丰富的组件提供了多种可视化组件,如按钮(JButton)、文本框(JTextField)、标签(JLabel)、下拉列表(JComboBox)等,可以满足不同的界面设计</div> </li> <li><a href="/article/95.htm" title="PHP,安卓,UI,java,linux视频教程合集" target="_blank">PHP,安卓,UI,java,linux视频教程合集</a> <span class="text-muted">cocos2d-x小菜</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>╔-----------------------------------╗┆                           </div> </li> <li><a href="/article/222.htm" title="zookeeper admin 笔记" target="_blank">zookeeper admin 笔记</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>  Required Software 1) JDK>=1.6 2)推荐使用ensemble的ZooKeeper(至少3台),并run on separate machines 3)在Yahoo!,zk配置在特定的RHEL boxes里,2个cpu,2G内存,80G硬盘   数据和日志目录 1)数据目录里的文件是zk节点的持久化备份,包括快照和事务日</div> </li> <li><a href="/article/349.htm" title="Spring配置多个连接池" target="_blank">Spring配置多个连接池</a> <span class="text-muted">easterfly</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>项目中需要同时连接多个数据库的时候,如何才能在需要用到哪个数据库就连接哪个数据库呢? Spring中有关于dataSource的配置:     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"   &nb</div> </li> <li><a href="/article/476.htm" title="Mysql" target="_blank">Mysql</a> <span class="text-muted">171815164</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI TH GRANT OPTION; 如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作</div> </li> <li><a href="/article/603.htm" title="CommonDAO(公共/基础DAO)" target="_blank">CommonDAO(公共/基础DAO)</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a> <div>        好久没有更新博客了,最近一段时间工作比较忙,所以请见谅,无论你是爱看呢还是爱看呢还是爱看呢,总之或许对你有些帮助。         DAO(Data Access Object)是一个数据访问(顾名思义就是与数据库打交道)接口,DAO一般在业</div> </li> <li><a href="/article/730.htm" title="直言有讳" target="_blank">直言有讳</a> <span class="text-muted">永夜-极光</span> <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E9%9A%8F%E7%AC%94/1.htm">随笔</a> <div>  1.转载地址:http://blog.csdn.net/jasonblog/article/details/10813313   精华: “直言有讳”是阿里巴巴提倡的一种观念,而我在此之前并没有很深刻的认识。为什么呢?就好比是读书时候做阅读理解,我喜欢我自己的解读,并不喜欢老师给的意思。在这里也是。我自己坚持的原则是互相尊重,我觉得阿里巴巴很多价值观其实是基本的做人</div> </li> <li><a href="/article/857.htm" title="安装CentOS 7 和Win 7后,Win7 引导丢失" target="_blank">安装CentOS 7 和Win 7后,Win7 引导丢失</a> <span class="text-muted">随便小屋</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>一般安装双系统的顺序是先装Win7,然后在安装CentOS,这样CentOS可以引导WIN 7启动。但安装CentOS7后,却找不到Win7 的引导,稍微修改一点东西即可。 一、首先具有root 的权限。      即进入Terminal后输入命令su,然后输入密码即可 二、利用vim编辑器打开/boot/grub2/grub.cfg文件进行修改 v</div> </li> <li><a href="/article/984.htm" title="Oracle备份与恢复案例" target="_blank">Oracle备份与恢复案例</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>Oracle备份与恢复案例 一. 理解什么是数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与</div> </li> <li><a href="/article/1111.htm" title="JavaEE开源快速开发平台G4Studio v5.0发布" target="_blank">JavaEE开源快速开发平台G4Studio v5.0发布</a> <span class="text-muted">無為子</span> <div>  我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V5.0版本已经正式发布。   访问G4Studio网站 http://www.g4it.org   2013-04-06 发布G4Studio_V5.0版本 功能新增 (1). 新增了调用Oracle存储过程返回游标,并将游标映射为Java List集合对象的标</div> </li> <li><a href="/article/1238.htm" title="Oracle显示根据高考分数模拟录取" target="_blank">Oracle显示根据高考分数模拟录取</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/oracle%E4%BE%8B%E5%AD%90/1.htm">oracle例子</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F%E9%AB%98%E8%80%83%E5%BD%95%E5%8F%96/1.htm">模拟高考录取</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E4%BA%A4%E6%B5%81/1.htm">学习交流</a> <div>题目要求: 1,创建student表和result表 2,pl/sql对学生的成绩数据进行处理 3,处理的逻辑是根据每门专业课的最低分线和总分的最低分数线自动的将录取和落选     1,创建student表,和result表 学生信息表; create table student( student_id number primary key,--学生id</div> </li> <li><a href="/article/1365.htm" title="优秀的领导与差劲的领导" target="_blank">优秀的领导与差劲的领导</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E9%A2%86%E5%AF%BC/1.htm">领导</a><a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86/1.htm">管理</a><a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F/1.htm">团队</a> <div>责任 优秀的领导:优秀的领导总是对他所负责的项目担负起责任。如果项目不幸失败了,那么他知道该受责备的人是他自己,并且敢于承认错误。 差劲的领导:差劲的领导觉得这不是他的问题,因此他会想方设法证明是他的团队不行,或是将责任归咎于团队中他不喜欢的那几个成员身上。 努力工作 优秀的领导:团队领导应该是团队成员的榜样。至少,他应该与团队中的其他成员一样努力工作。这仅仅因为他</div> </li> <li><a href="/article/1492.htm" title="js函数在浏览器下的兼容" target="_blank">js函数在浏览器下的兼容</a> <span class="text-muted">Bill_chen</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/IE/1.htm">IE</a><a class="tag" taget="_blank" href="/search/DWR/1.htm">DWR</a><a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a> <div>  做前端开发的工程师,少不了要用FF进行测试,纯js函数在不同浏览器下,名称也可能不同。对于IE6和FF,取得下一结点的函数就不尽相同:   IE6:node.nextSibling,对于FF是不能识别的;   FF:node.nextElementSibling,对于IE是不能识别的; 兼容解决方式:var Div = node.nextSibl</div> </li> <li><a href="/article/1619.htm" title="【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)" target="_blank">【JVM四】老年代垃圾回收:吞吐量垃圾收集器(Throughput GC)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/1.htm">垃圾回收</a> <div>吞吐量与用户线程暂停时间   衡量垃圾回收算法优劣的指标有两个: 吞吐量越高,则算法越好 暂停时间越短,则算法越好 首先说明吞吐量和暂停时间的含义。   垃圾回收时,JVM会启动几个特定的GC线程来完成垃圾回收的任务,这些GC线程与应用的用户线程产生竞争关系,共同竞争处理器资源以及CPU的执行时间。GC线程不会对用户带来的任何价值,因此,好的GC应该占</div> </li> <li><a href="/article/1746.htm" title="J2EE监听器和过滤器基础" target="_blank">J2EE监听器和过滤器基础</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a> <div> Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文。 监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听。   ServletContex监听器 ServletContex又叫application</div> </li> <li><a href="/article/1873.htm" title="博弈AngularJS讲义(16) - 提供者" target="_blank">博弈AngularJS讲义(16) - 提供者</a> <span class="text-muted">boyitech</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</a><a class="tag" taget="_blank" href="/search/Angular/1.htm">Angular</a><a class="tag" taget="_blank" href="/search/Provider/1.htm">Provider</a> <div>  Angular框架提供了强大的依赖注入机制,这一切都是有注入器(injector)完成. 注入器会自动实例化服务组件和符合Angular API规则的特殊对象,例如控制器,指令,过滤器动画等。   那注入器怎么知道如何去创建这些特殊的对象呢? Angular提供了5种方式让注入器创建对象,其中最基础的方式就是提供者(provider), 其余四种方式(Value, Fac</div> </li> <li><a href="/article/2000.htm" title="java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。" target="_blank">java-写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class CommonSubSequence { /** * 题目:写一函数f(a,b),它带有两个字符串参数并返回一串字符,该字符串只包含在两个串中都有的并按照在a中的顺序。 * 写一个版本算法复杂度O(N^2)和一个O(N) 。 * * O(N^2):对于a中的每个字符,遍历b中的每个字符,如果相同,则拷贝到新字符串中。 * O(</div> </li> <li><a href="/article/2127.htm" title="sqlserver 2000 无法验证产品密钥" target="_blank">sqlserver 2000 无法验证产品密钥</a> <span class="text-muted">Chen.H</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a><a class="tag" taget="_blank" href="/search/Microsoft/1.htm">Microsoft</a> <div>在 Service Pack 4 (SP 4), 是运行 Microsoft Windows Server 2003、 Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 服务器上您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体。 这样做, 收到以下错误信息CD KEY的 SQ</div> </li> <li><a href="/article/2254.htm" title="[新概念武器]气象战争" target="_blank">[新概念武器]气象战争</a> <span class="text-muted">comsci</span> <div>        气象战争的发动者必须是拥有发射深空航天器能力的国家或者组织....        原因如下:        地球上的气候变化和大气层中的云层涡旋场有密切的关系,而维持一个在大气层某个层次</div> </li> <li><a href="/article/2381.htm" title="oracle 中 rollup、cube、grouping 使用详解" target="_blank">oracle 中 rollup、cube、grouping 使用详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/grouping/1.htm">grouping</a><a class="tag" taget="_blank" href="/search/rollup/1.htm">rollup</a><a class="tag" taget="_blank" href="/search/cube/1.htm">cube</a> <div>oracle 中 rollup、cube、grouping 使用详解 -- 使用oracle 样例表演示 转自namesliu -- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景    --- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数  COUNT(SAL)   </div> </li> <li><a href="/article/2508.htm" title="技术资料汇总分享" target="_blank">技术资料汇总分享</a> <span class="text-muted">Dead_knight</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E8%B5%84%E6%96%99%E6%B1%87%E6%80%BB+%E5%88%86%E4%BA%AB/1.htm">技术资料汇总 分享</a> <div>本人汇总的技术资料,分享出来,希望对大家有用。 http://pan.baidu.com/s/1jGr56uE 资料主要包含: Workflow->工作流相关理论、框架(OSWorkflow、JBPM、Activiti、fireflow...) Security->java安全相关资料(SSL、SSO、SpringSecurity、Shiro、JAAS...) Ser</div> </li> <li><a href="/article/2635.htm" title="初一下学期难记忆单词背诵第一课" target="_blank">初一下学期难记忆单词背诵第一课</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a> <div>could 能够 minute 分钟 Tuesday 星期二 February 二月 eighteenth 第十八 listen 听 careful 小心的,仔细的 short 短的 heavy 重的 empty 空的 certainly 当然 carry 携带;搬运 tape 磁带 basket 蓝子 bottle 瓶 juice 汁,果汁 head 头;头部 </div> </li> <li><a href="/article/2762.htm" title="截取视图的图片, 然后分享出去" target="_blank">截取视图的图片, 然后分享出去</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a><a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a> <div>OS 7 has a new method that allows you to draw a view hierarchy into the current graphics context. This can be used to get an UIImage very fast. I implemented a category method on UIView to get the vi</div> </li> <li><a href="/article/2889.htm" title="MySql重置密码" target="_blank">MySql重置密码</a> <span class="text-muted">fanxiaolong</span> <a class="tag" taget="_blank" href="/search/MySql%E9%87%8D%E7%BD%AE%E5%AF%86%E7%A0%81/1.htm">MySql重置密码</a> <div>方法一:  在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库  然后进入mysql mysql>use mysql;  mysql>更新 user set password=password('新密码') WHERE User='root'; mysq</div> </li> <li><a href="/article/3016.htm" title="Ehcache(03)——Ehcache中储存缓存的方式" target="_blank">Ehcache(03)——Ehcache中储存缓存的方式</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/MemoryStore/1.htm">MemoryStore</a><a class="tag" taget="_blank" href="/search/DiskStore/1.htm">DiskStore</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E9%99%A4%E7%AD%96%E7%95%A5/1.htm">驱除策略</a> <div>Ehcache中储存缓存的方式   目录 1     堆内存(MemoryStore) 1.1     指定可用内存 1.2     驱除策略 1.3     元素过期 2   &nbs</div> </li> <li><a href="/article/3143.htm" title="spring mvc中的@propertysource" target="_blank">spring mvc中的@propertysource</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a> <div>  在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: @PropertySource  在spring 3.1中开始引入 比如有配置文件 config.properties mongodb.url=1.2.3.4 mongodb.db=hello 则代码中   @PropertySource(&</div> </li> <li><a href="/article/3270.htm" title="重学单例模式" target="_blank">重学单例模式</a> <span class="text-muted">lanqiu17</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Singleton/1.htm">Singleton</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%BC%8F/1.htm">模式</a> <div>最近在重新学习设计模式,感觉对模式理解更加深刻。觉得有必要记下来。 第一个学的就是单例模式,单例模式估计是最好理解的模式了。它的作用就是防止外部创建实例,保证只有一个实例。 单例模式的常用实现方式有两种,就人们熟知的饱汉式与饥汉式,具体就不多说了。这里说下其他的实现方式 静态内部类方式: package test.pattern.singleton.statics; publ</div> </li> <li><a href="/article/3397.htm" title=".NET开源核心运行时,且行且珍惜" target="_blank">.NET开源核心运行时,且行且珍惜</a> <span class="text-muted">netcome</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a> <div>背景 2014年11月12日,ASP.NET之父、微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET 扩展为可在 Linux 和 Mac OS 平台上运行。.NET核心运行时将基于MIT开源许可协议发布,其中将包括执行.NET代码所需的一切项目——CLR、JIT编译器、垃圾收集器(GC)和核心</div> </li> <li><a href="/article/3524.htm" title="使用oscahe缓存技术减少与数据库的频繁交互" target="_blank">使用oscahe缓存技术减少与数据库的频繁交互</a> <span class="text-muted">Everyday都不同</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/oscahe%E7%BC%93%E5%AD%98/1.htm">oscahe缓存</a> <div>此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。   缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——</div> </li> <li><a href="/article/3651.htm" title="Spring+Mybatis 手动控制事务" target="_blank">Spring+Mybatis 手动控制事务</a> <span class="text-muted">toknowme</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>@Override    public boolean testDelete(String jobCode) throws Exception {       boolean flag = false;  &nbs</div> </li> <li><a href="/article/3778.htm" title="菜鸟级的android程序员面试时候需要掌握的知识点" target="_blank">菜鸟级的android程序员面试时候需要掌握的知识点</a> <span class="text-muted">xp9802</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>熟悉Android开发架构和API调用 掌握APP适应不同型号手机屏幕开发技巧 熟悉Android下的数据存储  熟练Android Debug Bridge Tool 熟练Eclipse/ADT及相关工具  熟悉Android框架原理及Activity生命周期 熟练进行Android UI布局 熟练使用SQLite数据库; 熟悉Android下网络通信机制,S</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>