为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

比较好的基本资料

2010-08-18 50页 doc 599KB 18阅读

用户头像

is_267858

暂无简介

举报
比较好的基本资料首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 圈子 搜索 您还未登录 ! 我的应用 登录 注册 Swingchen 永久域名 http://swingchen.javaeye.com 2009-03-01 缩略显示 Tomcat5.5.12 实现Session持久化的配置 关键字: session manager配置     至于Session的基本知识这里就不仔细描述,Session在Web应用服务开发中广泛被应用,利用该内置对象可以传递(保存)用户数据(页面间的参数)等。          应用...
比较好的基本资料
首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 圈子 搜索 您还未登录 ! 我的应用 登录 注册 Swingchen 永久域名 http://swingchen.javaeye.com 2009-03-01 缩略显示 Tomcat5.5.12 实现Session持久化的配置 关键字: session manager配置     至于Session的基本知识这里就不仔细描述,Session在Web应用服务开发中广泛被应用,利用该内置对象可以传递(保存)用户数据(页面间的参数)等。          应用Session的web程序要求客户端开放cookie,在jsp技术中如果客户端浏览器为了安全关闭cookie,那么可以采用页面重发的机制来解决客户端Session ID丢失的问,从而保证程序的正确运行。          在客户端每个用户的Session对象存在Servlet容器中,如果Tomcat服务器重起/当机的话该session就会丢失,而客户端的操作应为session的丢失而造成数据丢失,而且当前用户访问量巨大,每个用户的Session里存放大量的数据的话,那么就很占用服务器大量的内存,从而是服务器的性能受到影响。          在Tomcat里,系统提供Session的持久化策略。其中对session的存储提供两种办法,一个是本地文件存储,一个是数据库存储,本文详细介绍Tomcat5.5.12里对session的本地存储配置。          笔者在调试时是在windowsXP sp2系统下进行,JDK1.5。          进入tomcat的配置文档目录/conf,可以看到context.xml文件,我们将在这里配置Session持久化,配置后将对所有的站点生效。 打开context.xml,在节点下添加如下节点:       debug=0;     saveOnRestart="true"     maxActiveSession="-1"     minIdleSwap="-1"     maxIdleSwap="-1"     maxIdleBackup="-1"       元素是专门用来配置Session的,该元素中的每个属性如下解释: l         className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。 l         debug:Session管理器的跟踪级别。 l         saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入。 l         maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。 l         minIdleSwap:Session不活动的最短时间,超过该时间,Session Manager 可能会把该Session对象转移到Session Store中,单位为秒。 l         maxidleSwap:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象转移到Session Store中,该Session将不在内存中。 l         maxidleBackup: Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。 l         指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的session文件夹(当然自己创建)   配置完后可以写一个简单的jsp页面,在页面上显示本次用户访问的Session ID,然后重起tomcat,再刷新该页面,可以看到该Session Id不变,而在/session目录下自动生成一个以session id为名,以“session”为扩展名的文件。该Session的持久化配置成功。 · 22:39 · 浏览 (459) · 评论 (1) · 分类: JAVA 2009-03-01 缩略显示 Tomcat中Context容器配置详解 关键字: tomcat Context元素代一个web应用,运行在某个特定的虚拟主机上。如Servlet Specification 2.2或以后版本中描述的那样,每个web应用基于一个Web Application Archive(WAR)文件,或者是一个目录,包含WAR文件解压后的内容。有关Web Application Archive的更多信息,可以参考Servlet Specification和Tomcat 应用程序开发者指南。 通过将请求URI的最长可能前缀与每个Context的context路径进行匹配,Catalina选择相应的web 应用处理HTTP请求。一旦选定,根据web application deployment descriptor 文件中定义的servlet映射,Context会选择一个正确的servlet来处理进来的请求。servlet映射必须定义在该web应用目录层次结构中的/WEB-INF/web.xml中。 你可以在一个Host元素中嵌套任意多的Context元素。每个Context的路径必须是惟一的,由path属性定义。另外,你必须定义一个context路径长度为0的Context,这个Context称为该虚拟主机的缺省web应用,用来处理那些不能匹配任何Context的Context路径的请求。 除了在Host元素中嵌套Context元素以外,你也可以将它们存储在单个文件中(以.xml为后缀),放在$CATALINA_HOME/conf/[enginename]/[hostname]/目录下面。有关这方面的更多信息,参考应用的自动发布。这种方法允许动态重新配置web应用,因为如果修改了conf/server.xml,就必须重新启动Tomcat。 除了明确指定Context元素以外,还有其他几种技术可以自动生成Context元素。参考Automatic Application Deployment 和 User Web Applications 以下的描述使用变量$CATALINA_HOME来指Tomcat 5安装的目录。大多数的相对路径都是以该目录为基准。但是,通过设置CATALINA_BASE目录,可以运行多个Tomcat 5实例,这时你应该使用$CATALINA_BASE来作为目录基准,而不是使用$CATALINA_HOME。 属性 通用属性 所有Context的实现支持如下属性: 属性 描述 backgroundProcessorDelay 这个值代表在context及其子容器(包括所有的wrappers)上调用backgroundProcess方法的延时,以秒为单位。如果延时值非负,子容器不会被调用,也就是说子容器使用自己的处理线程。如果该值为正,会创建一个新的线程。在等待指定的时间以后,该线程在主机及其 子容器上调用backgroundProcess方法。context利用后台处理session过期,监测类的变化用于重新载入。如果没有指定,该属性的缺省值是-1,说明context依赖其所属的Host的后台处理。 className 实现的Java类名。该类必须实现org.apache.catalina.Context接口。如果没有指定,使用实现(在下面定义)。 cookies 如果想利用cookies来传递session identifier(需要客户端支持cookies),设为ture。否则为false,这种情况下只能依靠URL Rewriting传递session identifier。   crossContext 如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他web application的request dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。 docBase 该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。   override 如果想利用该Context元素中的设置覆盖DefaultContext中相应的设置,设为true。缺省情况下使用DefaultContext中的设置。 privileged 设为true,允许context使用container servlets,比如manager servlet。   path web应用的context路径。catalina将每个URL的起始和context path进行比较,选择合适的web应用处理该请求。特定Host下的context path必须是惟一的。如果context path为空字符串(""),这个context是所属Host的缺省web应用,用来处理不能匹配任何context path的请求。   reloadable 如果希望Catalina监视/WEB-INF/classes/和/WEB-INF/lib下面的类是否发生变化,在发生变化的时候自动重载web application,设为true。这个特征在开发阶段很有用,但也大大增加了服务器的开销。因此,在发布以后,不推荐使用。但是,你可以使用Manager应用在必要的时候触发应用的重载。 wrapperClass org.apache.catalina.Wrapper实现类的名称,用于该Context管理的servlets。如果没有指定,使用标准的缺省值。 标准实现 Context的标准实现是org.apache.catalina.core.StandardContext.它还支持如下的附加属性: 属性 描述 debug 与这个Engine关联的Logger的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。   swallowOutput 如果该值为true,System.out和System.err的输出被重定向到web应用的logger。如果没有指定,缺省值为false useNaming 如果希望Catalina为该web应用使能一个JNDI InitialContext对象,设为true。该InitialialContext符合J2EE平台的约定,缺省值为true。 workDir Context提供的临时目录的路径,用于servlet的临时读/写。利用javax.servlet.context.tempdir属性,servlet可以访问该目录。如果没有指定,使用$CATALINA_HOME/work下一个合适的目录。 嵌套组件 下列元素可以嵌套在Context元素中,但每个元素至多只能嵌套一次。 · Loader-配置该web应用用来加载servlet和javabean的类加载器。正常情况下,使用缺省的类加载器就足够了; · Logger - 配置用来接收和处理所有日志消息的logger,包括调用ServletContext.log()函数记录的所有消息; · Manager -配置用于创建,销毁,维持HTTP session的session manager.正常情况下,使用缺省的session manager配置就足够了; · Realm - 配置Realm,该Realm的用户数据库以及相关的角色仅用于这个特定的web应用中。如果没有指定,该web应用使用所属的Host或Engine的Realm。 · Resources - 配置用于访问与这个web应用相关联的静态资源。正常情况下,使用缺省的resource manager就足够了。 专有特征 访问日志 正常情况下,运行web服务器会生成访问日志。访问日志以标准格式为每个请求输出一行信息。Catalina包含一个可选的Valve实现,可以用标准格式生成日志,还可以使用任意定制的格式。 通过在Engine,Host或者Context中嵌套一个Valve元素,Catalina会为该容器处理的所有请求创建访问日志,如下所示: ... ... 参考Access Log Valve,以获得更多配置属性的信息; Context的自动配置 如果使用标准的Context实现,当Catalina启动,或者重载web应用的时候,如下的配置步骤会自动发生,不需要特殊的配置来使能这个特征。 · 如果没有定义自己的Loader元素,将会配置一个标准的web应用class loader; · 如果没有定义自己的Manager元素,会配置一个标准的session manager; · 如果没有定义自己的Resources元素,使用标准的resource manager。 · 在conf/web.xml中列出的web应用的属性会当做该web应用的缺省的属性。这被用于建立缺省的映射(比如将.jsp映射成对应的JSP servlet),以及其他的标准属性。 · 列举在/WEB-INF/web.xml资源中的属性被处理(如果资源存在); · 如果web应用指定了安全限制,并且可能需要对用户进行认证,Catalina会配置选定的Authenticator,该Authenticator实现了login方法。 Context参数 可以在Context中元素中嵌套元素,配置带有名称的值,这些值作为servletcontext初始化参数,对整个web应用可见。比如,你可以像这样创建初始化参数: ... ... 这与在/WEB-INF/web.xml中包含如下元素相等: companyName My Company, Incorporated 区别是,前者不需要修改deployment descriptor来定制这个值。 元素的有效属性值如下: 属性 描述 description 关于该context初始化参数的文字描述(可选) name           要创建的context初始化参数的名称 override 如果不希望/WEB-INF/web.xml中具有相同参数名称的覆盖这里指定的值,设为false。缺省值为true。 value 调用ServletContext.getInitParameter()时,返回给应用的参数值。 环境条目 可以在Context中嵌套元素,配置命名的值,这些值作为环境条目资源(Environment Entry Resource),对整个web应用可见。比如,可以按照如下方法创建一个环境条目: ... ... 这与在/WEB-INF/web.xml中包含如下元素是等价的: maxExemptions 10 java.lang.Integer 区别是,前者不需要修改deployment descriptor来定制这个值。 元素的有效属性所如下: 属性 描述 description 环境条目的文字描述(可选) name 环境条目的名称,相对于java:comp/env context。 override 如果不希望/WEB-INF/web.xml中具有相同名称的覆盖这里指定的值,设为false。缺省值为true。 type 环境条目的Java类名的全称.在/WEB-INF/web.xml中,必须是如下的值:java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String. value 通过JNDI context请求时,返回给应用的参数值。这个值必须转换成type属性定义的Java类型   生命期Listeners 如果一个Java对象需要知道Context什么时候启动,什么时候停止,可以在这个对象中嵌套一个Listener元素。该Listener元素必须实现了org.apache.catalina.LifecycleListener接口,在发生对应的生命期事件的时候,通知该Listener。可以按照如下的格式配置这样的Listener: ... ... 注意,一个listener可以具有任意多的附加属性。属性名与JavaBean的属性名相对应,使用标准的属性命名方法。 请求过滤器(Request Filters) 对每个发送到Engine,Host或者Context的请求,可以要求Catalina检查IP地址或主机名称。Catalina使用一系列配置好的“接受”或者“拒绝”过滤器对客户端的地址或者主机名进行检查,过滤器是按照正则表达式语法定义的,由Jakarta Regexp正则表达式库支持。不被接受的请求会返回一个HTTP“Forbidden”错误。下面是过滤器的定义。 ... ... 资源定义(Resource Definitions) 可以在/WEB-INF/web.xml中定义资源的特性。使用JNDI查找元素时,这些特性被返回。对同一资源名称,还必须定义资源参数(见下面“资源参数”小节),这些参数用来配置对象工厂(object factory)以及对象工厂的属性。 比如,你可以按照如下方式创建资源定义: ... ... 这等价于在/WEB-INF/web.xml中包含如下元素: Employees Database for HR Applications jdbc/EmployeeDB javax.sql.DataSource Container 区别是,前者不需要修改deployment descriptor来定制这个值。 元素的有效属性如下: 属性 描述 auth 指定时web应用代码本身sign on到对应的resource mananger,还是由container代表web应用sign on到resource manager。该属性的值必须是Application或者Container。如果在web application deployment descriptor中使用,这个属性是必需的,如果使用,这个属性是可选的。 description 资源的文字描述(可选) name 资源的名称,相对于java:comp/env context scope 指定通过这个resource manager得到的连接是否共享。该属性的值必须是Shareable或者Unshareable。缺省情况下,假定连接是共享的。 type 当web应用查找该资源的时候,返回的Java类名的全称。 资源参数 资源参数用来配置资源管理器(resource manager,或对象工厂,object factory)。在做JNDI查找时,资源管理器返回查找的对象。在资源可以被访问之前,对元素的每个元素,或者/WEB-INF/web.xml中定义的每个元素,都必须定义资源参数。 资源参数是用名称定义的,使用的资源管理器(或者object factory)不同,参数名称的集合也不一样。这些参数名和工厂类的JavaBeans属性相对应。JNDI实现通过调用对应的JavaBeans属性设置函数来配置特定的工厂类,然后通过lookup()调用使得该实例可见。 一个JDBC数据源的资源参数可以按照如下方式定义: ... driverClassName org.hsql.jdbcDriver url jdbc:HypersonicSQL:database user dbusername password dbpassword ... 如果你需要为某个特定的资源类型指定工厂内的Java类名,在元素中嵌套一个叫做factory的条目。 元素的有效属性如下: 属性 描述 name 配置的资源名称,相对于java:comp/env context。这个名称必须与$CATALINA_HOME/conf/server.xml中某个元素定义的资源名称匹配,或者在/WEB-INF/web.xml中通过或者元素应用。 资源连接(Resource Links) 资源连接用于创建到全局JNDI资源的连接。在连接名称上进行JNDI查询会返回被连接的global 资源。 比如,你可以按照如下方法创建一个资源连接: ... 元素的有效属性如下: 属性 描述 global 被连接的连接全局资源的名称   name 创建的资源连接的名称,相对于java:comp/env context type 当web应用在该资源连接上进行查找时,返回的Java类名的全称 · 22:11 · 浏览 (258) · 评论 (0) · 分类: JAVA 2008-07-13 缩略显示 log4j 配置详解 关键字: log4j 配置     通常,我们都提供一个名为 log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。这个配置文件告诉Log4J以什么样的格式、把什么样的信息、输出到什么地方。   Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局),这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:      1、 Loggers   Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。 假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。      Java程序举例来说:      //建立Logger的一个实例,命名为“com.foo”    Logger logger = Logger.getLogger("com.foo"); //"com.foo"是实例进行命名,也可以任意   //设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。   logger.setLevel(Level.INFO);   Logger barlogger = Logger.getLogger("com.foo.Bar");   //下面这个请求可用,因为WARN >= INFO   logger.warn("Low fuel level.");   //下面这个请求不可用,因为DEBUG < INFO   logger.debug("Starting search for nearest gas station.");   //命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。因此,下面这个请求可用,因为INFO >= INFO   barlogger.info("Located nearest gas station.");   //下面这个请求不可用,因为DEBUG < INFO   barlogger.debug("Exiting gas station search");   这里“是否可用”的意思是能否输出Logger信息。     在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。比如:      static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());      2、Appenders   禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。      其语法表示为:      org.apache.log4j.ConsoleAppender(控制台)   org.apache.log4j.FileAppender(文件)   org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)     org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)   org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)      配置时使用方式为:   log4j.appender.appenderName = fully.qualified.name.of.appender.class   log4j.appender.appenderName.option1 = value1   …     log4j.appender.appenderName.option = valueN   这样就为日志的输出提供了相当大的便利。      3、Layouts   有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。      其语法表示为:      org.apache.log4j.HTMLLayout(以HTML表格形式布局),   org.apache.log4j.PatternLayout(可以灵活地指定布局模式),   org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),   org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)      配置时使用方式为:      log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class   log4j.appender.appenderName.layout.option1 = value1   …   log4j.appender.appenderName.layout.option = valueN  Log4j的配置      以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:      1、 建立Logger实例:   语法表示:public static Logger getLogger( String name)   实际使用:static Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;      2、 读取配置文件:   获得了Logger的实例之后,接下来将配置Log4j使用环境:   语法表示:   BasicConfigurator.configure():自动快速地使用缺省Log4j环境。   PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。   DOMConfigurator.configure(String filename):读取XML形式的配置文件。   实际使用:     PropertyConfigurator.configure("ServerWithLog4j.properties");      3、 插入日志信息   完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。   语法表示:   Logger.debug(Object message);//调试信息   Logger.info(Object message);//一般信息   Logger.warn(Object message);//警告信息   Logger.error(Object message);//错误信息   Logger.fatal(Object message);//致命错误信息   实际使用:logger.info("ServerSocket before accept: " + server);      配置过程  在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。     Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java properties(key=value)【Java特性文件(键=值)】。下面我们介绍使用Java特性文件做为配置文件的方法    具体如下:      1、配置根Logger,其语法为:   log4j.rootLogger = [ level ] , appenderName1, appenderName2, …          level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。        appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。    例如:log4j.rootLogger=info,A1,B2,C3      2、配置日志信息输出目的地,其语法为:   log4j.appender.appenderName = fully.qualified.name.of.appender.class  //     "fully.qualified.name.of.appender.class" 可以指定下面五个目的地中的一个:           1.org.apache.log4j.ConsoleAppender(控制台)           2.org.apache.log4j.FileAppender(文件)           3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)           4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)           5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)              1.ConsoleAppender选项                     Threshold=WARN:指定日志消息的输出最低层次。                     ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。                     Target=System.err:默认情况下是:System.out,指定输出控制台               2.FileAppender 选项                     Threshold=WARN:指定日志消息的输出最低层次。                     ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。                     File=mylog.txt:指定消息输出到mylog.txt文件。                     Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。             3.DailyRollingFileAppender 选项                     Threshold=WARN:指定日志消息的输出最低层次。                     ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。                      File=mylog.txt:指定消息输出到 mylog.txt文件。                     Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。                     DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:                     1)'.'yyyy-MM: 每月                     2)'.'yyyy-ww: 每周                      3)'.'yyyy-MM-dd: 每天                     4)'.'yyyy-MM-dd-a: 每天两次                     5)'.'yyyy-MM-dd-HH: 每小时                     6)'.'yyyy-MM-dd-HH-mm: 每分钟             4.RollingFileAppender 选项                      Threshold=WARN:指定日志消息的输出最低层次。                      ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。                     File=mylog.txt:指定消息输出到mylog.txt文件。                     Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。                     MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内
/
本文档为【比较好的基本资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索