# repo1 **Repository Path**: zhbiao/repo1 ## Basic Information - **Project Name**: repo1 - **Description**: 新注册--测试仓库 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-02-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README TestJavaweb 是一个javaweb框架 没有使用其他类型的框架 包含功能如下: 1 在xdp.gacl.session包下面的 src.xdp.gacl.session.ListCartServlet.java src.xdp.gacl.session.IndexSerlvet.java src.xdp.gacl.session.BuyServlet.java 这3个文件是一个功能: 用于演示session的作用 分别在web.xml中配置以上3个servlet对应的 2 在xdp.gacl.session.mysession包下面的 MyBuyServlet.java MyIndexServlet.java MyListCartServlet.java 同样1的功能, 但是使用的是注解 没有在web.xml中配置servlet对应的 3 在xdp.gacl.token包下面 实现防止重复提交 DoFormServlet.java FormServlet.java TokenProcessor.java WEB-INF/form.jsp 解决的问题: 1 使用了jsp页面 ,在页面会由报错, 在D:\ChongDian\e-work\eworkLib下有jsp-api-2.1jar外部引用进来 Libraries->Add External JARS- 选择外部的 jsp-api-2.1jar(在tomcat中好像是有这个jar) 2 BASE64Encoder 是sun的内部类,没有在java api中公开过 一般情况下在eclipse中不能直接使用 项目--build path-- libraries --JRE SYSTEM library --Access rules 点击edit 选择 accessible 现在填 ** 即可使用这个方法 4 在xdp.gacl.config 包下面 ServletConfigDemo1.java 在web.xml中配置ServletConfigDemo1对应的Servlet,为Serlvet添加默认的初始化参数 在 name gacl 中 当servlet配置了初始化参数后,web容器在创建servlet实例对象时, 会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时, 将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以 得到当前servlet的初始化参数信息。 5 在xdp.gacl.context 包下面 ServletContextDemo1.java ServletContextDemo2.java 在web.xml文件中配置 对应的servlet 通过context实现多个servlet之间的传递数据 6 在xdp.gacl.context 包下面 ServletContextDemo3.java 在web.xml配置标签 和ServletContextDemo3的Servlet url 我的宝宝叫张译澜 这样实现WEB应用的初始化参数 这个和上面4不一样,这里是整个WEB级别的初始化,4是仅仅某个Servlet的初始化 7 在xdp.gacl.context 包下面 ServletContextDemo4.java ServletContextDemo5.java 在web.xml配置对应的Servlet 然后访问ServletContextDemo4 ,通过4中设置的请求转发 返回5中的内容 context 实现请求转发 8 在xdp.gacl.context 包下面 ServletContextDemo6.java 在web.xml配置对应的Servlet 在应用的src目录下的,WebContent目录下,src目录下的db.config包中, src目录下的xdp.gacl.context分别添加db.properties文件,然后访问应用 http://localhost:8080/TestJavaweb/servlet/ServletContextDemo6 返回properties中内容 context读取文件内容 9 在xdp.gacl.context 包下面 ServletContextDemo8.java 在web.xml配置对应的Servlet 然后使用IE浏览器访问http://localhost:8080/TestJavaweb/servlet/ServletContextDemo8 在浏览器的缓存文件夹中 C:\Users\admin\AppData\Local\Microsoft\Windows\INetCache中可以找到 ServletContextDemo8和对应的访问地址以及过期时间等内容 使用context设置缓存 10 在xdp.gacl.response包下面 ResponseDemo01.java 在web.xml配置对应的Servlet 使用response的outputStream 输出数据到浏览器。用那个字节码表输出的,浏览器就要用哪个字节码表打开,否则会出现乱码。 如下这样设置响应头控制浏览器以GB2312字节码打开数据 response.setHeader("content-type", "text/html;charset=GB2312"); 11 在xdp.gacl.response包下面 ResponseDemo02.java 在web.xml配置对应的Servlet 实现在固定位置下载图片功能 如果文件名包含中文,则需要 response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8")); 将文件名部分调整为Utf-8字节码 eclipse工程运行的程序包的位置是D:\ChongDian\e-work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\TestJavaweb 注意事项: 编写文件下载功能时推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流, 可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失 12 在xdp.gacl.response包下面 ResponseDemo04.java 在web.xml配置对应的Servlet 实现重定向 实现访问http://localhost:8080/TestJavaweb/servlet/ResponseDemo04 返回浏览器的结果是http://localhost:8080/TestJavaweb/servlet/FormServlet的结果,同时 地址栏也会变成http://localhost:8080/TestJavaweb/servlet/FormServlet sendRedirect方法内部调用了 response.setHeader("Location", "/TestJavaweb/servlet/FormServlet"); response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302); 13 在xdp.gacl.request 包下面 RequestDemo01 在web.xml中配置对应的Servlet http://localhost:8080/TestJavaweb/servlet/RequestDemo01 实现 通过request对象获取客户端请求信息 14 在xdp.gacl.request 包下面 RequestDemo02 在web.xml中配置对应的Servlet http://localhost:8080/TestJavaweb/servlet/RequestDemo02 实现 获取客户端请求头信息 15 在xdp.gacl.request 包下面 RequestDemo04 RequestDemo03 在web.xml配置对应的Servlet 实现对提交表单的数据在页面中显示 http://localhost:8080/TestJavaweb/servlet/RequestDemo04 通过请求转发 到WEB-INF/view/RequestDemo.jsp页面 在RequestDemo.jsp页面填写信息后提交表单,到RequestDemo04中 ,由RequestDemo04处理并显示到页面上 16 在xdp.gacl.request 包下面 RequestDemo05 在web.xml配置对应的Servlet WEB-INF/view/demo05.jsp 实现 request的请求转发功能 17 在xdp.gacl.cookie 包下面 CookieDemo01 在web.xml配置对应的Servlet 实现 使用Cookie取出浏览器中是数据 18 在xdp.gacl.jsp包下面 JspError.java 在web.xml配置对应的Servlet WEB-INF/view/Test01.jsp 和WEB-INF/view/error.jsp 在JspError 中实现请求转发到 Test01.jsp页面,此页面出现错误,由这个页面的跳转到预设错误处理页面error.jsp 19 在web.xml中添加 404 /WEB-INF/view/404Error.jsp 为整个WEB项目添加错误处理页面 /WEB-INF/view/404Error.jsp 20 在xdp.gacl.jsp包下面 jspPage.java 在web.xml配置对应的Servlet WEB-INF/view/page.jsp 在jspPage中实现请求转发到 page.jsp 测试pageContext中的方法 21 在xdp.gacl.jsp包下面 jspPage2.java 在web.xml配置对应的Servlet WEB-INF/view/page.jsp 在jspPage2 中实现请求转发到page2.jsp 实现pageContext 访问其它域 session 22 在xdp.gacl.scope 包下面 RequestScopeDemo1.java RequestScopeDemo4.java RequestScopeDemo5.java WEB-INF/view/RequestScopeDemo01.jsp RequestScopeDemo02.jsp RequestScopeDemo04.jsp RequestScopeDemo05.jsp 在web.xml中配置对应的Servlet RequestScopeDemo1 请求转发到RequestScopeDemo01.jsp页面,在这个页面 由由于使用标签跳转到 RequestScopeDemo02.jsp页面中 ,依然有在RequestScopeDemo01.jsp中设置的属性值, 将RequestScopeDemo01.jsp中的地址改成跳转RequestScopeDemo04 点击页面中的超链接 跳转到RequestScopeDemo05.jsp 没有在RequestScopeDemo01.jsp中的属性值 实现在requeset在一次服务器跳转中有效,session在服务器中会话级别有效 23 在xdp.gacl.tag包下面 ViewIPTag.java 标签处理器类 jspTagServlet.java web.xml中配置servlet 返回jspTag_1.jsp页面 WEB-INF 新建 gacl.tld文件 Eclipse下新建一个tld文件 New ----> XML ----> XML File ----> 输入test.tld ----> Create XML file from a DTD file ----> Select XML Catalog entry ----> -//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN ----> finish 实现使用jsp自定义标签库 代替jsp页面的java代码 输出ip地址 24 在xdp.gacl.tag包下面 TegDemo1.java 标签处理器类 TagDemo1Servlet.java web.xml中配置servlet 返回tagDemo01.jsp页面 WEB-INF tagDemo01.jsp 页面 在WEB-INF gacl.tld中添加 demo1 xdp.gacl.tag.TagDemo1 JSP 对标签的引用 修改TegDemo1.java中doStartTag方法的返回结果 控制 执行标签体 或是不执行标签体 25 在xdp.gacl.tag包下面 TegDemo2.java 标签处理器类 TagDemo2Servlet.java web.xml中配置servlet 返回tagDemo02.jsp页面 WEB-INF tagDemo02.jsp 页面 在WEB-INF gacl.tld中添加 demo2 xdp.gacl.tag.TagDemo2 empty 对标签的引用 修改TegDemo2.java中doStartTag方法的返回结果 控制 执行余下jsp页面内容 或是不执行余下的jsp页面内容 26 在xdp.gacl.tag包下面 TegDemo3.java 标签处理器类 TagDemo3Servlet.java web.xml中配置servlet 返回tagDemo03.jsp页面 WEB-INF tagDemo03.jsp 页面 在WEB-INF gacl.tld中添加 demo3 xdp.gacl.tag.TagDemo3 JSP 对标签的引用 TegDemo3.java中doAfterBody方法 实现了自定以标签的标签体内容循环执行 27 在xdp.gacl.tag包下面 TegDemo4.java 标签处理器类 TagDemo4Servlet.java web.xml中配置servlet 返回tagDemo04.jsp页面 WEB-INF tagDemo04.jsp 页面 在WEB-INF gacl.tld中添加 demo4 xdp.gacl.tag.TagDemo4 JSP 对标签的引用 TegDemo4.java中 doStartTag 方法中返回 EVAL_BODY_BUFFERED ; doEndTag方法中 调用了getBodyContent 方法 拿到标签体内容,对标签体内容进行了转大写操作 然后输出 实现了自定以标签修改标签体内容的功能 28 在 xdp.gacl.tag包下面 SimpleTagDemo1.java SimpleTagDemo1Servlet.java 在web.xml中配置servlet 返回simpleTagDemo01.jsp页面 在WEB-INF 下面创建 simpletag.tld 实现在SimpleTagDemo1.java中 doTag方法的变换 控制jsp页面中自定义标签的标签体内容是否执行 29 在 xdp.gacl.tag包下面 SimpleTagDemo2.java SimpleTagDemo2Servlet.java 在web.xml中配置servlet 返回simpleTagDemo02.jsp页面 simpletag.tld中添加 demo2 xdp.gacl.tag.SimpleTagDemo2 scriptless 实现 控制标签体的循环迭代 30 在 xdp.gacl.tag包下面 SimpleTagDemo3.java SimpleTagDemo3Servlet.java 在web.xml中配置servlet 返回simpleTagDemo03.jsp页面 simpletag.tld中添加 demo3 xdp.gacl.tag.SimpleTagDemo3 scriptless 实现修改标签体的内容 31 在 xdp.gacl.tag包下面 SimpleTagDemo4.java SimpleTagDemo4Servlet.java 在web.xml中配置servlet 返回simpleTagDemo04.jsp页面 simpletag.tld中添加 demo4 xdp.gacl.tag.SimpleTagDemo4 empty 通过修改 SimpleTagDemo4.java中的是否抛出SkipPageException 实现控制 是否继续执行标签后的jsp内容 32 在 xdp.gacl.tag包下面 SimpleTagDemo5.java SimpleTagDemo5Servlet.java 在web.xml中配置servlet 返回simpleTagDemo05.jsp页面 simpletag.tld中添加 demo5 me.gacl.web.simpletag.SimpleTagDemo5 scriptless 描述标签的count属性 count true true 实现自定义标签带属性 传递到标签处理器中 如果标签的属性值是8种基本数据类型,那么在JSP页面在传递字符串时,JSP引擎会自动转换成相应的类型, 但如果标签的属性值是复合数据类型,那么JSP引擎是无法自动转换的 33 在 xdp.gacl.tag包下面 SimpleTagDemo6.java SimpleTagDemo6Servlet.java 在web.xml中配置servlet 返回simpleTagDemo06.jsp页面 simpletag.tld中添加 demo6 me.gacl.web.simpletag.SimpleTagDemo6 empty 描述标签的date属性 date true true 在自定义标签的属性中使用java复合类型 使用表达式 34 在 xdp.gacl.tag包下面 IFTag.java 标签处理器类 IFTagServlet.java web.xml中配置servlet 指向ifTagDemo.jsp页面 新建tld文件 WEB-INF/TagLib.tld if标签 if xdp.gacl.tag.IFTag scriptless if标签的test属性 test true true 使用JSP的自定义标签 模拟jstl的标签 35 在 xdp.gacl.tag包下面 ChooseTag.java 父类 WhenTag.java when 子类 继承ChooseTag.java ChooseTag.java choose 子类 继承ChooseTag.java ChooseTagServlet.java web.xml中配置servlet 请求转发到chooseTagDemo.jsp WEB-INF/TagLib.tld choose标签 choose me.gacl.web.simpletag.ChooseTag scriptless when标签 when me.gacl.web.simpletag.WhenTag scriptless when标签的test属性 test true true otherwise标签 otherwise me.gacl.web.simpletag.OtherWiseTag scriptless 配置3个标签 实现 功能 36 在 xdp.gacl.tag包下面 ForEachTag.java ForEachTagServlet.java web.xml中配置servlet 请求转发到forEachTagDemo.jsp WEB-INF/TagLib.tld foreach标签 foreach me.gacl.web.simpletag.ForEachTag scriptless foreach标签的items属性 items true true foreach标签的var属性 var false true 实现 标签功能 37 在 xdp.gacl.tag包下面 HtmlEscapeTag.java HtmlEscapeTagServlet.java web.xml中配置servlet 请求转发到htmlEscapeTag.jsp WEB-INF/TagLib.tld HtmlEscape标签 htmlEscape me.gacl.web.simpletag.HtmlEscapeTag scriptless 实现将原来html标签 更改含义 38 在 xdp.gacl.tag包下面 OutTag.java 标签处理类 OutTagServlet.java web.xml中配置servlet 请求转发到outTagServlet.jsps WEB-INF/TagLib.tld out标签 out me.gacl.web.simpletag.OutTag empty out标签的content属性,表示要输出的内容 content true true out标签的escapeHtml属性,表示是否将内容中的html进行转义后输出 escapeHtml true false 自定义标签 对标签的功能做了根据参数不同 进行修改 39 在xdp.gacl.jstl包下面 OutServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/outDemo.jsp 实现 测试 标签 在 outDemo.jsp 页面中 需要配置 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 需要添加 jstl-1.2.jar standard-1.1.2.jar 两个jar包 测试标签的功能:用来输出数据对象(字符串、表达式)的内容或结果 40 在xdp.gacl.jstl包下面 Person.java SetServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/setDemo.jsp 测试标签用于把一个对象存在指定的域的范围内,或将某一个对象存储到Map或是javaBean中 41 在xdp.gacl.jstl包下面 CatchServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/catchDemo.jsp 测试标签用于捕获嵌套在标签体中的内容抛出的异常 42 在xdp.gacl.jstl包下面 ForEachServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/forEachDemo.jsp 测试 根据循环条件便利集合中的元素 43 在 在xdp.gacl.jstl包下面 ForTokensServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/forTokensDemo.jsp 测试 用于浏览字符串,并根据指定的字符将字符串截取 44 在xdp.gacl.jstl包下面 importServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/importDemo.jsp 测试标签 可以把其他静态或动态文件包含到本JSP页面, 与区别: 只能包含同一个 web应用中的文件。而可以包含其他web应用中的文件,甚至是网络上的资源 45 在xdp.gacl.jstl包下面 urlServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/urlDemo.jsp 测试 用于在JSP页面构造一个URL地址,其主要目的是实现URL重写 可以为URL添加参数 46 在xdp.gacl.jstl包下面 redirectServlet.java 在web.xml中配置servlet 跳转到WEB-INF/jstlView/redirectDemo.jsp 测试 用于实现请求的重定向,可以配合使用标签在url中加入指定的参数 47 在xdp.gacl.el包下面 ElServlet.java web.xml中配置servlet 跳转到WEB-INF/view/ElDemo.jsp 测试 el表达式默认的11个对象 48 在 xdp.gacl.el包下面 ElDemo2Servlet.java web.xml中配置servlet 跳转到WEB-INF/view/ElDemo02.jsp HtmlFilter.java 在WEB-INF下面新建 elFunction.tld文件 其中的内容如下 /ELFunction html标签转义处理方法 filter xdp.gacl.el.HtmlFilter java.lang.String filter(java.lang.String) 测试el自定义函数的功能 49 在xdp.gacl.el 包下面 User.java ElLibraryServlet.java web.xml中配置servlet 跳转到WEB-INF/view/ElLibraryDemo.jsp 工程中引入 jstl-impl-1.2.jar包 在ElLibraryDemo.jsp页面中 测试EL函数库的各种函数功能 50 在xdp.gacl.jdbc包下面 JdbcFirstDemo.java 工程中 引入 mysql-connector-java-5.17.jar包 在工程中 直接运行 JdbcFirstDemo.java 的main方法 首先在数据库中创建一个表 实现程序连接数据库并查询表内容 51 在xdp.gacl.jdbc包下面 JdbcUtils.java mysql链接工具类 JdbcOperaClob.java src下面 添加 db.properties db链接信息文件 和data.txt大文本数据 在 工程中 添加Junit的库文件 Add Library---->Junit 使用Junit测试运行 JdbcOperaClob 中的add 和read方法 运行测试sql create table testclob ( id int primary key auto_increment, resume longtext ); 实现向mysql数据库中的表 添加大文本数据 52 在xdp.gacl.jdbc包下面 JdbcUtils.java mysql链接工具类 JdbcOperaBlob.java 运行测试sql create table testblob ( id int primary key auto_increment, image longblob ); 实现向mysql数据库表中添加 一个图片 (保存blob二进制) 53 在xdp.gacl.jdbc包下面 JdbcBatchHandleByStatement.java 运行测试sql create table testbatch ( id int primary key, name varchar(20) ); 实现statement的批处理功能 54 在xdp.gacl.jdbc包下面 jdbcPool.java 数据库连接池 jdbcPoolUtils.java 链接池工具 src下 添加 db2.propertites 数据库连接文件 实现 简单数据库连接池 55 在xdp.gacl.jdbc包下面 JbcpPoolUtils_DPCP.java DbcpDataSourceTest.java 增加两个dbcp的lib包commons-dbcp-1.4.jar和commons-pool-1.6.jar 实现dbcp下的数据库链接池 使用 获取连接池中的数据库链接 然后向数据库表中添加数据 56 在xdp.gacl.jdbc包下面 jdbcPoolUtils_C3P0.java C3p0DataSourceTest.java 引入两个C3p0的jar包 mchange-commons-java-0.2.3.4.jar 和 c3p0-0.9.1.2.jar 优化了 C3p0DataSourceTest.java中preparedStatement执行sql的语句 使用statement 代替preparedStatement 获取数据库表自动生成的主键 避免mysql报错 实现C3p0下的数据库链接池 使用 获取连接池中的数据库链接 然后向数据库表中添加数据 57 在xdp.gacl.jdbc包下面 JdbcPoolUtils_JNDI.java JNDIDataSourceTest.java 在tomcat8的所在文件夹下面 E:\apache-tomcat-8.0.24\lib 添加 mysql-connector-java-5.1.22-bin.jar jar包 在web.xml 中添加 web.xml中配置servlet JNDIDataSourceTest.java 实现浏览器 调用servlet JNDI 保存数据库数据的功能 58 在xdp.gacl.jdbc包下面 QueryRunnerCRUDTest.java 在QueryRunnerCRUDTest.java由于使用QueryRunner 需要传递数据源 QueryRunner qr = new QueryRunner(JdbcPoolUtils_DBCP.getDataSource()); JdbcPoolUtils_DBCP中 添加 getDataSource函数 返回数据源 实现 测试 org.apache.commons.dbutils 工具包 59 在xdp.gacl.jdbc包下面 JdbcUtilsForThreadLocal.java Account.java AccountDao2.java AccountService2.java 在 JdbcUtilsForThreadLocal.java 中是用C3p0包链接数据库 使用ThreadLocal实现更加简洁的事务处理 同时 dao和service分层处理 dao处理sql service处理业务 程序运行中的数据在同一个线程内共享 60 在xdp.gacl.filter包下面 FilterDemo01.java 实现filter接口 在web.xml中配置 FilterDemo01 xdp.gacl.filter.FilterDemo01 FilterDemo01 /* 实现对应用所有的访问进行过滤 61 在xdp.gacl.filter包下面 FilterDemo02.java 在web.xml中配置 FilterDemo02过滤器 FilterDemo02 xdp.gacl.filter.FilterDemo02 配置FilterDemo02过滤器的初始化参数 name gacl 配置FilterDemo02过滤器的初始化参数 like java FilterDemo02 /* 实现 过滤器传递参数 62 在xdp.gacl.filter包下面 CharacterEncodingFilter.java ServletDemo1.java FilterlViewServlet.java 在web.xml中配置 FilterViewServlet对应的过滤器 ServletDemo1 对应的过滤器 CharacterEncodingFilter 过滤器 实现 通过 过滤器更改request的字符集 防止出现参数乱码的情况 63 在xdp.gacl.filter包下面 AdvancedFilter.java web.xml 中配置对应的过滤器 在WIB-INF下面添加 DirtyWord.txt 增加脏字过滤功能 64 在xdp.gacl.listener包下面 MyServletContextListener.java 监听 在web.xml中配置 ServletContextListener监听器 xdp.gacl.listener.MyServletContextListener 实现 监听ServletContext对象的创建和销毁 65 在xdp.gacl.listener包下面 MyHttpSessionListener.java 监听 在web.xml中配置 HttpSessionListener监听器 xdp.gacl.listener.MyHttpSessionListener 实现监听 ServletSession对象的创建和销毁 66 在xdp.gacl.listener包下面 MyServletRequestListener.java 监听 在web.xml中配置 ServletRequestListener监听器 xdp.gacl.listener.MyServletRequestListener 实现监听 request对象的创建和销毁 67 在xdp.gacl.listener包下面 Servlet3Filter.java 使用注解配置过滤器 68 在 xdp.gacl.upload 包下面 UploadHandleServlet.java 使用注解注册servlet uploadServlet.java 使用注解注册servlet WEB-INF/view/load/message.jsp 和upload.jsp 在lib中添加 两个jar commons-fileupload-1.3.1.jar commons-io-2.4.jar UploadHandleServlet中指定的上传位置是 D:\ChongDian\e-work\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\TestJavaweb\WEB-INF\upload 也就是this.getServletContext().getRealPath()下面的/WEB-INF/upload文件夹下面 实现上传文件到服务器文件夹的功能 69 在 xdp.gacl.download 包下面 实现文件的下载功能 70 在xdp.gacl.serializable 包下面 Person.java TestObjSerializeAndDeserialize.java 序列化Person成功后在E盘生成了一个Person.txt文件 实现对象的序列化功能 71 xdp.gacl.thread 包下面 TestThread1.java 实现线程的启动 实现 实现Runnable接口的线程 执行 执行run方法的 会在原来线程的基础上直接执行 使用Thread的 会启动新的线程,新的线程与当前线程会交替进行 72 xdp.gacl.thread 包下面 TestThread2.java 实现 继承Thread类的线程执行 73 xdp.gacl.thread 包下面 TestThread3.java 测试 sleep方法 74 xdp.gacl.thread 包下面 TestThread4.java 测试 join方法