java web.xml filter-fragment.xml和web.xml的区别

4382人阅读
servlet(14)
如果 监听器,servlets,过滤器调用的顺序对于一个应用程序很重要,那么必须使用部署描述符。如果必要,可以使用上述定义的排序元素。如同上述描述的一样,当使用注解定义监听器,servlets和过滤器时,其调用的顺序是没有指定的。下面的是一组规则,用于封装应用程序最终的部署描述符。
1 监听器,过滤器,servlet的排序,必须指定在web-fragment.xml或者web.xml中。
2 排序是基于定义在描述符中的顺序和基于web.xml中的absolute-ordering元素或者web-fragment.xml中的ordering元素,如果有的话。
过滤器链的顺序是在web.xml中声明servlets要不在请求处理时延迟初始化或者在部署期间初始化。在后面的情况下,其按照load-on-startup元素指定的顺序初始化。以前的版本中,上下文监听器以一个随机的顺序调用。在Servlet 3.0中,监听器的调用按照在web.xml中声明的顺序调用;& i. javax.servlet.ServletContextListener的实现类在contextInitialized方法中并以申明的顺序调用,并在contextDestroyed方法中以相反的顺序执行&ii. javax.servlet.ServletRequestListener的实现类在requestInitialized方法中按照已经声明的顺序调用,并在requestDestroyed方法中以相反的顺序调用&iii. javax.servlet.http.HttpSessionListener实现类在sessionCreated方法中按照已经声明的顺序调用,并在sessionDestroyed方法中以相反的顺序调用iv. 其他监听接口的调用顺序没有指定
3 如果一个Servlet在web.xml中使用enabled元素标示为不可用,那么这个Servlet在url-partten指定下是不可用的
4 web应用程序的web.xml在web.xml,web-fragment.xml和注解之间有最高的处理优先权。
5 如果metadata-complete不在描述符中指定,或者在部署描述符中设值为false,那么这个应用程序的实际元数据将来自于注解中的现有元数据和描述符。合并的规则指定如下:
&&&&a.& web fragments中的配置设置用于参数化主要web.xml中指定的设置,在这样的方式下,如果这些设置已经在同样的web.xml中已经指定
&&& b.& The order in which configuration settings of web fragments are added to those in the main web.xml is as specified above in Section 8.2.2, “Ordering of
web.xml and web-fragment.xml” on page 8-66
&&&c.& 在web.xml中的metadata-complete属性设置为true时,被认为完全扫描注解并且碎片不会在部署期间出现。absolute-ordering和ordering元素将会被忽略,如果有的话。当一个片段设置为true时,metadata-complete属性仅作用于指定jar的注解扫描。
&& d. web碎片插入到主要的web.xml中,除非metadata-complete设置为true。对应片段上的注解处理后,合并就执行了。
&& e. 当参数化web.xml和web片段时,会有配置冲突:
&有相同的&param-name&但是不同的&param-value&的重复的&init-param&元素有相同的&extension&但是不同的&mime-type&的重复的&mime-mapping&元素
&&& f. 上述的配置冲突通过下面的解决
在主要web.xml和一个web片段之间的配置冲突,以web.xml的配置为主两个web片段之间的冲突,并且冲突的元素在主要的web.xml中没有,将导致一个错误。必须记录提示性消息,并且应用程序必将部署失败。
&& g. 上述的冲突解决后,需要用到一下规则:
&&&&&& 元素,可能声明为许多次,在web.xml的web-fragments中是可添加的。例如,有许多不同的&param-name&的&context-param&元素时可添加的。&&&&&& 可以声明多次的元素,如果在web.xml中指定了,并重写了在web-fragments内的值,其拥有相同的名字&&&&& 如果一个元素,with a minimum occurrence of zero, and a maximum occurrence of one,在web fragment中有,但在主要的web.xml中没有,主要的web.xml继承了web fragment的设置。如果这个元素在web fragment和主要的web.xml中都有,主要的web.xml的配置设置优先。例如,如果主要的web.xml和一个web片段都声明了相同的Servlet,并且web片段的的Servlet声明指定了一个&load-on-startup&元素,然而,主要的web.xml中没有指定这个元素,那么来自web片段中的&load-on-startup&将合并到web.xml中。如果一个元素在两个web片段中分别指定,同时在主要的web.xml中没有指定,会引发一个错误。例如,如果两个web片段声明了相同的Servlet,但是有两个不同的&load-on-startup&元素,并且同样的Servlet也在主要的web.xml中声明,但其没有指定&load-on-startup&,这样将引发错误。&welcome-file&声明式可添加的拥有相同&servlet-name&的&servlet-mapping&在web片段中是可添加的。web.xml中指定的&servlet-mapping&重写了web片段中有相同&servlet-name&的值拥有相同&filter-name&的&filter-mapping&整个web片段中是可添加的。web.xml中指定的&filter-mapping&重写了web片段中有相同&filter-name&的值拥有相同&listener-class&的多个&listener&元素被当做单一一个&listener&声明来自合并后的web.xml仅当它的所有web片段都标记为&distributable&,才认为是&distributable&。顶层&icon&和其子元素,&display-name&和一个web片段中的&description&元素是可忽略的jsp-property-group是可添加的。当在一个jar文件中的META-INF/resources的目录中绑定静态资源文件时,相较于拓展映射,推荐jsp-config元素使用url-pattern.对于一个片段中的更多的JSP资源,应该如同片段名称一样,在子目录中,如果存在的话。这有利于防止web片段的jsp-property-group影响应用程序docroot的jsp文件和防止jsp-property-group影响一个片段内的META-INF/resources的目录的jsp文件。
&& h.&对于所有的资源依赖元素(env-entry,ejb-ref,ejb-local-ref,service-ref,resource-ref,resource-env-ref,message-destination-ref,persistence-context-ref和persistence-unit-ref),应用下面的规则:
&&&&&&&& 如果在一个web 片段中有资源依赖元素,并且在主要的web.xml中没有这个元素,主要的web.xml继承web片段的值。如果这个元素在主要的web.xml和web片段中都有,并且有相同的名字,优先使用web.xml中的值。片段的任何子元素不会结合到主要的web.xml中,除非下面指定的injection-target。例如,如果主要的web.xml和web片段中都声明了相同的&resource-ref-name&元素的&resource-ref&,将使用主要的web.xml中的额&resource-ref&,无需使用web片段中的任何子元素,除了如下描述的&injection-target&&&&&&&& 如果在两个片段中都指定了资源依赖元素,而主要的web.xml中没有指定,并且资源依赖元素的所有的属性和子元素,都是完全相同的,那么这个资源依赖将整合到主要的web.xml中。如果一个资源依赖元素在两个片段中有相同的名字,但在主要的web.xml中没有指定,并且属性和子元素在两个片段中不是同一的,这样会引发一个错误。必须报告这个错误并且应用程序必将部署失败。例如,如果两个web片段声明了相同的&resource-ref-name&元素的一个&resource-ref&,但是其中一个的类型指定为javax.sql.DataSource,而另一个指定为JavaMail资源,这就是一个错误并会部署失败。对于web片段中相同名的&injection-target&的资源依赖元素,将整合到主要的web.xml中
& i.& 除了上述针对web-fragment.xml的整合规则外,当使用资源依赖注解时,应用下面的规则(@Resource, @Resources, @EJB, @EJBs, @WebServiceRef,
@WebServiceRefs, @PersistenceContext,@PersistenceContexts,@PersistenceUnit, )
&&&& 如果一个类应用了一个资源依赖注解,等效于定义一个资源,然而其不等效于定义一个injection-target.这种情况下使用injection-target。
&&& 如果一个字段应用了资源依赖注解,其等效于在web.xml中定义了injection-target元素。然而,如果在描述符中没有injection-target元素,那么来自片段中的injection-target仍将按照如上定义一样整合到web.xml中。
&& 另一方面,如果在主要的web.xml中定义了一个injection-target,并且有相同资源名的资源依赖注解,那么可被认为是覆盖了资源依赖注解。在这样的情况下,因为在描述符中指定了一个injection-target,此时就要应用上述定义的规则,除了重写资源依赖注解的值。
&j.& 如果两个web片段中都指定了data-source,但在web.xml中没有指定,并且data-source的所有属性和子元素都是同一的,那么data-source将被整合到web.xml中。如果一个data-source在两个片段中指定了相同名,但在主要的web.xml中没有指定,并且两个片段中的那个属性和子元素没有同一,这样会引发一个错误。这种情形下,必须报告错误并且应用程序必将部署失败。
下面的例子显示了不同情况下的结果
code 例子 8-4
web.xml----没有resource-ref定义
web-fragment.xml
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&&/pre&&pre class=&html& name=&code& snippet_file_name=&blog__4523235& code_snippet_id=&539589&&实际的元数据是:&pre class=&html& name=&code&&&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&

code 例子 8-5
&resource-ref&
&resource-ref-name=&foo&&
&/resource-ref&

Fragment 1
web-fragment.xml
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
Fragment 2
web-fragment.xml
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar2.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
实际的元数据是:
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&injection-target&
&injection-target-class&
com.foo.Bar2.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
code例子 8-6
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar3.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/resource-ref&
Fragment 1
web-fragment.xml&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
Fragment 2
web-fragment.xml
xml&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar2.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
实际的元数据是:
&resource-ref&
&resource-ref-name=&foo&&
&injection-target&
&injection-target-class&
com.foo.Bar3.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&&injection-target-class&
com.foo.Bar.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&injection-target-class&
com.foo.Bar2.class
&/injection-target-class&
&injection-target-name&
&/injection-target-name&
&/injection-target&
&/resource-ref&
片段1和片段2中的&injection-target&将被整合到主要的web.xml中。
&& k.& 如果主web.xml没有指定任何&post-construct&元素,并且web-fragments指定了&post-construct&,那么片段中的&post-construct&将被整合到主web.xml中。然而,如果在主web.xml中至少指定了一个&post-construct&元素,那么片段中的&post-construct&将被覆盖。
&&l.&& 如果主web.xml中没有指定任何&pre-destroy&元素,并且web-fragments有指定的&pre-destroy&,那么片段中的&pre-destroy&将被整合到主web.xml中。然而,如果在主web.xml中至少指定了一个&pre-destroy&,那么片段中的&pre-destroy&元素将不被覆盖。
&m.& 在处理web-fragment.xml后,在处理下一个片段前,来自对应片段的注解被处理成这个片段的有效元数据。下面的规则用于处理注解:
&n.&& 借助注解指定的元数据,在描述符中不存在,用于参数化有效的描述符。
在主web.xml或一个web片段中的指定配置优先于注解指定的配置
对于一个Servlet,通过@WebServlet注解定义,借助描述符重写值,描述符中的servlet的名字必须匹配注解指定的servlet的名字(显示地指定或者默认的名字,如果没有通过注解指定)。
通过注解定义的servlets和Filters的Init参数,将在描述符中重写,如果init参数的名字确实匹配了注解指定的名字。Init参数在注解和描述符中是可添加的。
url-patterns,当在描述符中指定了一个给定的servlet的名字重写由注解指定的url模式。
对于借助@WebFilter注解定义的过滤器,通过描述符重写了值,描述符中的过滤器名,必须匹配通过注解指定的过滤器的名字(显示指定或默认名,如果没有通过注解指定的话)。



参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149784次
积分:2841
积分:2841
排名:第10718名
原创:19篇
转载:22篇
译文:119篇
(3)(2)(1)(2)(1)(2)(2)(4)(27)(5)(14)(42)(9)(51)15407人阅读
Fragment(10)
先看这样一段代码
&LinearLayout xmlns:android=&/apk/res/android&
& & & & android:layout_width=&match_parent&
& & & & android:layout_height=&match_parent&
& & & & android:background=&#555555&&
& & &fragment class=&com.androidbook.fragments.bard.TitlesFragment&
& & & & & & android:id=&@+id/titles&&
& & & & & & android:layout_weight=&1&
& & & & & & android:layout_width=&0px&
& & & & & & android:layout_height=&match_parent&
& & & & & & android:background=&#& /&
& & &FrameLayout & android:id=&@+id/details&&
& & & & android:layout_weight=&2&
& & & & & & android:layout_width=&0px&
& & & & & & android:layout_height=&match_parent& /&
&/LinearLayout&
程序运行图片如下:
这里有一个名为&fragment& &的新标记,此标记拥有一个名为 &class 的新特性, &注意: 碎片不是视图组件! &所以会有这样的XML布局写法
&fragment& 标记只是此布局中的一个占位符,不能将子标记放在&fragment& 标记内
&fragment&标记的class特性指定应用程序 的标题的扩展类, 也就是必须写一个类 继承Fragment, &碎片拥有自己的视图层次结构,该结构将由碎片在以后创建.
这里下一个标记是 FrameLayout, 而不是 再写一个&fragment& &标记. 为什么是这样呢?
稍后作讲解,首先应知道,将在详情文本上执行一些过渡,将一个碎片切换到另一个。使用FrameLayout 作为视图容器来持有当前的文本碎片,& 对于标题碎片,只需一个碎片,没有切换和过渡,& 对于显示详情的区域, 将有多个碎片!
&在这个应用中,要确定使用碎片,只需判断设备的方向, 如果处于横向模式, 则拥有多个窗格,那么将使用碎片来显示文本,将碎片定义为DetailsFragment, 使用一种工厂方法来创建带有索引的Fragment,如果处于纵向模式,则没有多个窗格
public boolean isMultiPane() {
根据是否横屏,判断是否多个碎片
return getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE;
用于显示选中条目的详情的方法,
* displaying a fragment in-place in the current UI, or starting a
* whole new activity in which it is displayed.
public void showDetails(int index) {
Log.v(TAG, &in MainActivity showDetails(& + index + &)&);
if (isMultiPane()) {
// Check what fragment is shown, replace if needed.
DetailsFragment details = (DetailsFragment)
getSupportFragmentManager().findFragmentById(R.id.details);
if (details == null || details.getShownIndex() != index) {
// Make new fragment to show this selection.
details = DetailsFragment.newInstance(index);
// Execute a transaction, replacing any existing
// fragment with this one inside the frame.
FragmentTransaction ft
= getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
//ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.details, details);
//ft.addToBackStack(TAG);
ft.commit();
//getSupportFragmentManager().executePendingTransactions();
// 否则加载一个新的Activity用于显示被选中文本的对话框碎片
Intent intent = new Intent();
intent.setClass(this, DetailsActivity.class);
intent.putExtra(&index&, index);
startActivity(intent);
具体代码请参见: &
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:462739次
积分:7563
积分:7563
排名:第2329名
原创:320篇
评论:62条
阅读:1293
文章:13篇
阅读:12719
阅读:4793
(1)(1)(1)(3)(2)(1)(2)(1)(1)(2)(2)(1)(1)(1)(8)(6)(3)(4)(9)(12)(4)(1)(8)(1)(2)(2)(2)(14)(4)(5)(1)(1)(1)(4)(1)(1)(1)(1)(3)(1)(1)(1)(2)(2)(6)(3)(7)(7)(3)(6)(4)(12)(8)(7)(30)(10)(7)(19)(11)(2)(1)(1)(5)(2)(2)(2)(4)(4)(1)(2)(1)(13)(11)(9)(2)Servlet 3.0 PFD 现在发布 - 以及有关 web-fragment.xml 的信息 (水族馆(Aquarium 中文版))
Servlet 3.0 PFD 现在发布 - 以及有关 web-fragment.xml 的信息
By leonfan on
Servlet 3.0 最终草案版现在可从官方的
页面获取。该版本将在 GlassFish v3 EA 中执行 (\*)(也称为
发行版)。
关于同一个话题,Shing Wai 也在说明中解释了 。这个新功能旨在提供库 jar 的可插入性。
(\*) 模错误和(根据 Rajiv)文件上载。
该日志评论功能被禁用了。
Recent Posts
Categories
四月 2017星期日星期一星期二星期三星期四星期五星期六&&&&&&123456789101112131415161718192021222324252627282930&&&&&&您所在的位置: &
使用web-fragment.xml
使用web-fragment.xml
清华大学出版社
《JSP & Servlet学习笔记(第2版)》第2章编写与设置Servlet,本章正式学习Servlet/JSP的编写,如果想要打好坚实基础,就别急着从JSP开始学,要先从Servlet开始了解。正如第1章谈过的,JSP终究会转译为Servlet,了解Servlet,JSP也就学了一半了,而且不会被看似奇怪的JSP错误搞得稀里糊涂。本节为大家介绍使用web-fragment.xml。
2.3.3& 使用web-fragment.xml
在Servlet 3.0中,可以使用标注来设置Servlet的相关信息。实际上,Web容器并不仅读取/WEB-INF/classes中的Servlet标注信息,如果一个JAR文件中有使用标注的Servlet,Web容器也可以读取标注信息、载入类并注册为Servlet进行服务。
在Servlet 3.0中,JAR文件可用来作为Web应用程序的部分模块。事实上,不仅是Servlet,监听器、过滤器等也可以在编写、定义标注完毕后,封装在JAR文件中,视需要放置至Web应用程序的/WEB-INF/lib中,弹性抽换Web应用程序的功能性。
1. web-fragment.xml
一个JAR文件中,除了可使用标注定义的Servlet、监听器、过滤器外,也可以拥有自己的部署描述文件,这个文件的名称是web-fragment.xml,必须放置在JAR文件的META-INF目录中。基本上,web.xml中可定义的元素,在web-fragment.xml中也可以定义。举个例子来说,可以在web-fragment.xml中定义如下内容:&version="1.0"&encoding="UTF-8"&&xmlns="/xml/ns/javaee"&&&&&&&xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&&&&&&&xsi:schemaLocation="/xml/ns/javaee &&&&&/xml/ns/javaee/web-fragment_3_0.xsd" &&&&&&version="3.0"&&&&&WebFragment1&&&&&&&&&&&&&&hi&&&&&&&&&cc.openhome.HiServlet&&&&&&&&&&&&&&&&&&&hi&&&&&&&&&/hi.view&&&&&&&
web-fragment.xml的根标签是&web-fragment&而不是&web-app&。实际上,web-fragment.xml中所指定的类,不一定要在JAR文件中,也可以是在web应用程序的/WEB-INF/classes中。
在Eclipse中内置Web Fragment Project,如果想要尝试使用JAR文件部署Servlet,或者使用web-fragment.xml部署的功能,可以按照以下步骤练习:
(1) 选择File | New | Other命令,在出现的对话框中选择Web节点中的Web Fragment Project节点,单击Next按钮。
(2) 在New Web Project Fragment Project对话框中,注意可以设置Dynamic Web Project membership。这里可以选择Web Fragment Project产生的JAR文件,将会部署于哪一个项目中,这样就不用手动产生JAR文件,并将之复制至另一应用程序的WEB-INF/lib目录中。
(3) 在Project name文本框中输入FirstWebFrag,单击Finish按钮。
(4) 展开新建立的FirstWebFrag项目中src/META-INF节点,可以看到预先建立的web-fragment.xml。可以在这个项目中建立Servlet等资源,并设置web-fragment.xml的内容。
(5) 在FirstServlet项目上右击(刚才Dynamic Web Project membership设置的对象),从弹出的快捷菜单中选择Properties命令,展开Deployment Assembly节点,可以看到FirstWebFrag项目建构而成的FirstWebFrag.jar,将会自动部署至FirstServlet项目WEB-INF/ib中。
接着可以在FirstWebFrag中新增Servlet并设置标注,看看运行结果是什么,再在web-fragment.xml中设置相关信息,并再次实验运行结果是什么。
2. web.xml与web-fragment.xml
Servlet 3.0对web.xml与标注的配置顺序并没有定义,对web-fragment.xml及标注的配置顺序也没有定义,然而可以决定web.xml与web-fragment.xml的配置顺序,其中一个设置方式是在web.xml中使用&absolute-ordering&定义绝对顺序。例如,在web.xml中定义:&...&&&&&&& &&&&&&&&&WebFragment1&& &&&&&&&&&WebFragment2&& &&&&&&&&&& &&&&&... &&
各个JAR文件中web-fragment.xml定义的名称不得重复,若有重复,则会忽略掉重复的名称。另一个定义顺序的方式,是直接在每个JAR文件的web- fragment.xml中使用,在其中使用或来定义顺序。以下是一个例子,假设有三个web-fragment.xml分别存在于三个JAR文件中: &...&&&&&WebFragment1&&&&&&&&&&&&&&MyFragment2&&&&&&&&&&... &&&&...&&&&&WebFragment2&&&&&... &&&&...&&&&&WebFragment3&&&&&&&&&&&&&&&&&&&&&&&&... &&
而web.xml没有额外定义顺序信息:&...&&&&&... &&
则载入定义的顺序是web.xml,&name&名称为WebFragment3、WebFragment2、WebFragment1的web-fragment.xml中的定义。
3. metadata-complete属性
如果将web.xml中&web-app&的metadata-complete属性设置为true(默认是false),则表示web.xml中已完成Web应用程序的相关定义,部署时将不会扫描标注与web-fragment.xml中的定义,如果有&absolute-ordering&与&ordering&也会被忽略。例如:&xmlns="/xml/ns/javaee"&&&xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&&&xsi:schemaLocation="/xml/ns/javaee &&&&&&/xml/ns/javaee/web-app_3_0.xsd"&version="3.0"&&&&&&&&&&metadata-complete="true"&&&&&... &&
如果web-fragment.xml中指定的类可以在web应用程序的/WEB-INF/classes中找到,就会使用该类。要注意的是,如果该类本身有标注,而web-fragment.xml又定义该类为Servlet,则此时会有两个Servlet实例。如果将&web-fragment&的metadata-complete属性设置为true(默认是false),就只会处理自己JAR文件中的标注信息。
可以参考Servlet 3.0说明书(JSR 315)中第8章内容,其中有更多的web.xml、web-fragment.xml的定义范例。
【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
随着技术的日新月异 ,JSP的新技术也层出不穷,为了方面大家的学
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
多年来,Imar Spaanjaars一直是ASP.NET相关图书的畅销
《C#高级编程(第8版)》是C# 2012和.NET 4.5高级技术的
《Android 4 游戏入门经典(第3版)》将赋予您惊人的灵
本书第1版曾被KDnuggets的读者评选为最受欢迎的数据挖掘专著,是一本可读性极佳的教材。它从数据库角度全面系统地介绍了数据挖掘
51CTO旗下网站

我要回帖

更多关于 web fragment.xml 的文章

 

随机推荐