UnderpantsGnome-sunspot 0.9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. data/History.txt +39 -0
  2. data/LICENSE +18 -0
  3. data/README.rdoc +154 -0
  4. data/Rakefile +9 -0
  5. data/TODO +4 -0
  6. data/VERSION.yml +4 -0
  7. data/bin/sunspot-configure-solr +46 -0
  8. data/bin/sunspot-solr +62 -0
  9. data/lib/light_config.rb +40 -0
  10. data/lib/sunspot.rb +470 -0
  11. data/lib/sunspot/adapters.rb +265 -0
  12. data/lib/sunspot/composite_setup.rb +186 -0
  13. data/lib/sunspot/configuration.rb +38 -0
  14. data/lib/sunspot/data_extractor.rb +47 -0
  15. data/lib/sunspot/date_facet.rb +36 -0
  16. data/lib/sunspot/date_facet_row.rb +17 -0
  17. data/lib/sunspot/dsl.rb +3 -0
  18. data/lib/sunspot/dsl/field_query.rb +72 -0
  19. data/lib/sunspot/dsl/fields.rb +86 -0
  20. data/lib/sunspot/dsl/query.rb +59 -0
  21. data/lib/sunspot/dsl/query_facet.rb +31 -0
  22. data/lib/sunspot/dsl/restriction.rb +25 -0
  23. data/lib/sunspot/dsl/scope.rb +193 -0
  24. data/lib/sunspot/dsl/search.rb +30 -0
  25. data/lib/sunspot/facet.rb +51 -0
  26. data/lib/sunspot/facet_row.rb +34 -0
  27. data/lib/sunspot/field.rb +157 -0
  28. data/lib/sunspot/field_factory.rb +126 -0
  29. data/lib/sunspot/indexer.rb +127 -0
  30. data/lib/sunspot/instantiated_facet.rb +38 -0
  31. data/lib/sunspot/instantiated_facet_row.rb +12 -0
  32. data/lib/sunspot/query.rb +190 -0
  33. data/lib/sunspot/query/base_query.rb +90 -0
  34. data/lib/sunspot/query/connective.rb +77 -0
  35. data/lib/sunspot/query/dynamic_query.rb +69 -0
  36. data/lib/sunspot/query/field_facet.rb +149 -0
  37. data/lib/sunspot/query/field_query.rb +57 -0
  38. data/lib/sunspot/query/pagination.rb +39 -0
  39. data/lib/sunspot/query/query_facet.rb +72 -0
  40. data/lib/sunspot/query/query_facet_row.rb +19 -0
  41. data/lib/sunspot/query/restriction.rb +225 -0
  42. data/lib/sunspot/query/scope.rb +165 -0
  43. data/lib/sunspot/query/sort.rb +36 -0
  44. data/lib/sunspot/query/sort_composite.rb +33 -0
  45. data/lib/sunspot/query_facet.rb +33 -0
  46. data/lib/sunspot/query_facet_row.rb +21 -0
  47. data/lib/sunspot/schema.rb +165 -0
  48. data/lib/sunspot/search.rb +222 -0
  49. data/lib/sunspot/search/hit.rb +62 -0
  50. data/lib/sunspot/session.rb +201 -0
  51. data/lib/sunspot/setup.rb +271 -0
  52. data/lib/sunspot/type.rb +200 -0
  53. data/lib/sunspot/util.rb +164 -0
  54. data/solr/etc/jetty.xml +212 -0
  55. data/solr/etc/webdefault.xml +379 -0
  56. data/solr/lib/jetty-6.1.3.jar +0 -0
  57. data/solr/lib/jetty-util-6.1.3.jar +0 -0
  58. data/solr/lib/jsp-2.1/ant-1.6.5.jar +0 -0
  59. data/solr/lib/jsp-2.1/core-3.1.1.jar +0 -0
  60. data/solr/lib/jsp-2.1/jsp-2.1.jar +0 -0
  61. data/solr/lib/jsp-2.1/jsp-api-2.1.jar +0 -0
  62. data/solr/lib/servlet-api-2.5-6.1.3.jar +0 -0
  63. data/solr/solr/conf/elevate.xml +36 -0
  64. data/solr/solr/conf/protwords.txt +21 -0
  65. data/solr/solr/conf/schema.xml +50 -0
  66. data/solr/solr/conf/solrconfig.xml +696 -0
  67. data/solr/solr/conf/stopwords.txt +57 -0
  68. data/solr/solr/conf/synonyms.txt +31 -0
  69. data/solr/start.jar +0 -0
  70. data/solr/webapps/solr.war +0 -0
  71. data/spec/api/adapters_spec.rb +33 -0
  72. data/spec/api/build_search_spec.rb +918 -0
  73. data/spec/api/indexer_spec.rb +311 -0
  74. data/spec/api/query_spec.rb +153 -0
  75. data/spec/api/search_retrieval_spec.rb +325 -0
  76. data/spec/api/session_spec.rb +157 -0
  77. data/spec/api/spec_helper.rb +1 -0
  78. data/spec/api/sunspot_spec.rb +18 -0
  79. data/spec/integration/dynamic_fields_spec.rb +55 -0
  80. data/spec/integration/faceting_spec.rb +169 -0
  81. data/spec/integration/keyword_search_spec.rb +83 -0
  82. data/spec/integration/scoped_search_spec.rb +188 -0
  83. data/spec/integration/spec_helper.rb +1 -0
  84. data/spec/integration/stored_fields_spec.rb +10 -0
  85. data/spec/integration/test_pagination.rb +32 -0
  86. data/spec/mocks/adapters.rb +32 -0
  87. data/spec/mocks/blog.rb +3 -0
  88. data/spec/mocks/comment.rb +19 -0
  89. data/spec/mocks/connection.rb +84 -0
  90. data/spec/mocks/mock_adapter.rb +30 -0
  91. data/spec/mocks/mock_record.rb +41 -0
  92. data/spec/mocks/photo.rb +8 -0
  93. data/spec/mocks/post.rb +70 -0
  94. data/spec/mocks/user.rb +8 -0
  95. data/spec/spec_helper.rb +47 -0
  96. data/tasks/gemspec.rake +25 -0
  97. data/tasks/rcov.rake +28 -0
  98. data/tasks/rdoc.rake +21 -0
  99. data/tasks/schema.rake +19 -0
  100. data/tasks/spec.rake +24 -0
  101. data/tasks/todo.rake +4 -0
  102. data/templates/schema.xml.haml +24 -0
  103. metadata +245 -0
@@ -0,0 +1,164 @@
1
+ module Sunspot
2
+ #
3
+ # The Sunspot::Util module provides utility methods used elsewhere in the
4
+ # library.
5
+ #
6
+ module Util #:nodoc:
7
+ class <<self
8
+ #
9
+ # Get all of the superclasses for a given class, including the class
10
+ # itself.
11
+ #
12
+ # ==== Parameters
13
+ #
14
+ # clazz<Class>:: class for which to get superclasses
15
+ #
16
+ # ==== Returns
17
+ #
18
+ # Array:: Collection containing class and its superclasses
19
+ #
20
+ def superclasses_for(clazz)
21
+ superclasses = [clazz]
22
+ superclasses << (clazz = clazz.superclass) while clazz.superclass != Object
23
+ superclasses
24
+ end
25
+
26
+ #
27
+ # Convert a string to snake case
28
+ #
29
+ # ==== Parameters
30
+ #
31
+ # string<String>:: String to convert to snake case
32
+ #
33
+ # ==== Returns
34
+ #
35
+ # String:: String in snake case
36
+ #
37
+ def snake_case(string)
38
+ string.scan(/(^|[A-Z])([^A-Z]+)/).map! { |word| word.join.downcase }.join('_')
39
+ end
40
+
41
+ #
42
+ # Convert a string to camel case
43
+ #
44
+ # ==== Parameters
45
+ #
46
+ # string<String>:: String to convert to camel case
47
+ #
48
+ # ==== Returns
49
+ #
50
+ # String:: String in camel case
51
+ #
52
+ def camel_case(string)
53
+ string.split('_').map! { |word| word.capitalize }.join
54
+ end
55
+
56
+ #
57
+ # Get a constant from a fully qualified name
58
+ #
59
+ # ==== Parameters
60
+ #
61
+ # string<String>:: The fully qualified name of a constant
62
+ #
63
+ # ==== Returns
64
+ #
65
+ # Object:: Value of constant named
66
+ #
67
+ def full_const_get(string)
68
+ string.split('::').inject(Object) do |context, const_name|
69
+ context.const_get(const_name)
70
+ end
71
+ end
72
+
73
+ #
74
+ # Evaluate the given proc in the context of the given object if the
75
+ # block's arity is non-positive, or by passing the given object as an
76
+ # argument if it is negative.
77
+ #
78
+ # ==== Parameters
79
+ #
80
+ # object<Object>:: Object to pass to the proc
81
+ #
82
+ def instance_eval_or_call(object, &block)
83
+ if block.arity > 0
84
+ block.call(object)
85
+ else
86
+ object.instance_eval(&block)
87
+ end
88
+ end
89
+
90
+ #
91
+ # Perform a deep merge of hashes, returning the result as a new hash.
92
+ # See #deep_merge_into for rules used to merge the hashes
93
+ #
94
+ # ==== Parameters
95
+ #
96
+ # left<Hash>:: Hash to merge
97
+ # right<Hash>:: The other hash to merge
98
+ #
99
+ # ==== Returns
100
+ #
101
+ # Hash:: New hash containing the given hashes deep-merged.
102
+ #
103
+ def deep_merge(left, right)
104
+ deep_merge_into({}, left, right)
105
+ end
106
+
107
+ #
108
+ # Perform a deep merge of the right hash into the left hash
109
+ #
110
+ # ==== Parameters
111
+ #
112
+ # left:: Hash to receive merge
113
+ # right:: Hash to merge into left
114
+ #
115
+ # ==== Returns
116
+ #
117
+ # Hash:: left
118
+ #
119
+ def deep_merge!(left, right)
120
+ deep_merge_into(left, left, right)
121
+ end
122
+
123
+ private
124
+
125
+ #
126
+ # Deep merge two hashes into a third hash, using rules that produce nice
127
+ # merged parameter hashes. The rules are as follows, for a given key:
128
+ #
129
+ # * If only one hash has a value, or if both hashes have the same value,
130
+ # just use the value.
131
+ # * If either of the values is not a hash, create arrays out of both
132
+ # values and concatenate them.
133
+ # * Otherwise, deep merge the two values (which are both hashes)
134
+ #
135
+ # ==== Parameters
136
+ #
137
+ # destination<Hash>:: Hash into which to perform the merge
138
+ # left<Hash>:: One hash to merge
139
+ # right<Hash>:: The other hash to merge
140
+ #
141
+ # ==== Returns
142
+ #
143
+ # Hash:: destination
144
+ #
145
+ def deep_merge_into(destination, left, right)
146
+ left.each_pair do |name, left_value|
147
+ right_value = right[name]
148
+ destination[name] =
149
+ if right_value.nil? || left_value == right_value
150
+ left_value
151
+ elsif !left_value.respond_to?(:each_pair) || !right_value.respond_to?(:each_pair)
152
+ Array(left_value) + Array(right_value)
153
+ else
154
+ merged_value = {}
155
+ deep_merge_into(merged_value, left_value, right_value)
156
+ end
157
+ end
158
+ left_keys = Set.new(left.keys)
159
+ destination.merge!(right.reject { |k, v| left_keys.include?(k) })
160
+ destination
161
+ end
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,212 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
3
+
4
+ <!-- =============================================================== -->
5
+ <!-- Configure the Jetty Server -->
6
+ <!-- -->
7
+ <!-- Documentation of this file format can be found at: -->
8
+ <!-- http://docs.codehaus.org/display/JETTY/jetty.xml -->
9
+ <!-- -->
10
+ <!-- =============================================================== -->
11
+
12
+
13
+ <Configure id="Server" class="org.mortbay.jetty.Server">
14
+
15
+ <!-- Increase the maximum POST size to 1 MB to be able to handle large shard requests -->
16
+ <Call class="java.lang.System" name="setProperty">
17
+ <Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg>
18
+ <Arg>1000000</Arg>
19
+ </Call>
20
+
21
+ <!-- =========================================================== -->
22
+ <!-- Server Thread Pool -->
23
+ <!-- =========================================================== -->
24
+ <Set name="ThreadPool">
25
+ <!-- Default bounded blocking threadpool
26
+ -->
27
+ <New class="org.mortbay.thread.BoundedThreadPool">
28
+ <Set name="minThreads">10</Set>
29
+ <Set name="lowThreads">50</Set>
30
+ <Set name="maxThreads">10000</Set>
31
+ </New>
32
+
33
+ <!-- Optional Java 5 bounded threadpool with job queue
34
+ <New class="org.mortbay.thread.concurrent.ThreadPool">
35
+ <Arg type="int">0</Arg>
36
+ <Set name="corePoolSize">10</Set>
37
+ <Set name="maximumPoolSize">250</Set>
38
+ </New>
39
+ -->
40
+ </Set>
41
+
42
+
43
+
44
+ <!-- =========================================================== -->
45
+ <!-- Set connectors -->
46
+ <!-- =========================================================== -->
47
+ <!-- One of each type! -->
48
+ <!-- =========================================================== -->
49
+
50
+ <!-- Use this connector for many frequently idle connections
51
+ and for threadless continuations.
52
+ <Call name="addConnector">
53
+ <Arg>
54
+ <New class="org.mortbay.jetty.nio.SelectChannelConnector">
55
+ <Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>
56
+ <Set name="maxIdleTime">30000</Set>
57
+ <Set name="Acceptors">2</Set>
58
+ <Set name="confidentialPort">8443</Set>
59
+ </New>
60
+ </Arg>
61
+ </Call>
62
+ -->
63
+
64
+ <!-- Use this connector if NIO is not available. -->
65
+ <!-- This connector is currently being used for Solr because the
66
+ nio.SelectChannelConnector showed poor performance under WindowsXP
67
+ from a single client with non-persistent connections (35s vs ~3min)
68
+ to complete 10,000 requests)
69
+ -->
70
+ <Call name="addConnector">
71
+ <Arg>
72
+ <New class="org.mortbay.jetty.bio.SocketConnector">
73
+ <Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>
74
+ <Set name="maxIdleTime">50000</Set>
75
+ <Set name="lowResourceMaxIdleTime">1500</Set>
76
+ </New>
77
+ </Arg>
78
+ </Call>
79
+
80
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
81
+ <!-- To add a HTTPS SSL listener -->
82
+ <!-- see jetty-ssl.xml to add an ssl connector. use -->
83
+ <!-- java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml -->
84
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
85
+
86
+ <!-- =========================================================== -->
87
+ <!-- Set up global session ID manager -->
88
+ <!-- =========================================================== -->
89
+ <!--
90
+ <Set name="sessionIdManager">
91
+ <New class="org.mortbay.jetty.servlet.HashSessionIdManager">
92
+ <Set name="workerName">node1</Set>
93
+ </New>
94
+ </Set>
95
+ -->
96
+
97
+ <!-- =========================================================== -->
98
+ <!-- Set handler Collection Structure -->
99
+ <!-- =========================================================== -->
100
+ <Set name="handler">
101
+ <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
102
+ <Set name="handlers">
103
+ <Array type="org.mortbay.jetty.Handler">
104
+ <Item>
105
+ <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
106
+ </Item>
107
+ <Item>
108
+ <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
109
+ </Item>
110
+ <Item>
111
+ <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>
112
+ </Item>
113
+ </Array>
114
+ </Set>
115
+ </New>
116
+ </Set>
117
+
118
+ <!-- =========================================================== -->
119
+ <!-- Configure the context deployer -->
120
+ <!-- A context deployer will deploy contexts described in -->
121
+ <!-- configuration files discovered in a directory. -->
122
+ <!-- The configuration directory can be scanned for hot -->
123
+ <!-- deployments at the configured scanInterval. -->
124
+ <!-- -->
125
+ <!-- This deployer is configured to deploy contexts configured -->
126
+ <!-- in the $JETTY_HOME/contexts directory -->
127
+ <!-- -->
128
+ <!-- =========================================================== -->
129
+ <Call name="addLifeCycle">
130
+ <Arg>
131
+ <New class="org.mortbay.jetty.deployer.ContextDeployer">
132
+ <Set name="contexts"><Ref id="Contexts"/></Set>
133
+ <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
134
+ <Set name="scanInterval">1</Set>
135
+ </New>
136
+ </Arg>
137
+ </Call>
138
+
139
+ <!-- =========================================================== -->
140
+ <!-- Configure the webapp deployer. -->
141
+ <!-- A webapp deployer will deploy standard webapps discovered -->
142
+ <!-- in a directory at startup, without the need for additional -->
143
+ <!-- configuration files. It does not support hot deploy or -->
144
+ <!-- non standard contexts (see ContextDeployer above). -->
145
+ <!-- -->
146
+ <!-- This deployer is configured to deploy webapps from the -->
147
+ <!-- $JETTY_HOME/webapps directory -->
148
+ <!-- -->
149
+ <!-- Normally only one type of deployer need be used. -->
150
+ <!-- -->
151
+ <!-- =========================================================== -->
152
+ <Call name="addLifeCycle">
153
+ <Arg>
154
+ <New class="org.mortbay.jetty.deployer.WebAppDeployer">
155
+ <Set name="contexts"><Ref id="Contexts"/></Set>
156
+ <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>
157
+ <Set name="parentLoaderPriority">false</Set>
158
+ <Set name="extract">true</Set>
159
+ <Set name="allowDuplicates">false</Set>
160
+ <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>
161
+ </New>
162
+ </Arg>
163
+ </Call>
164
+
165
+ <!-- =========================================================== -->
166
+ <!-- Configure Authentication Realms -->
167
+ <!-- Realms may be configured for the entire server here, or -->
168
+ <!-- they can be configured for a specific web app in a context -->
169
+ <!-- configuration (see $(jetty.home)/contexts/test.xml for an -->
170
+ <!-- example). -->
171
+ <!-- =========================================================== -->
172
+ <Set name="UserRealms">
173
+ <Array type="org.mortbay.jetty.security.UserRealm">
174
+ <!--
175
+ <Item>
176
+ <New class="org.mortbay.jetty.security.HashUserRealm">
177
+ <Set name="name">Test Realm</Set>
178
+ <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
179
+ </New>
180
+ </Item>
181
+ -->
182
+ </Array>
183
+ </Set>
184
+
185
+ <!-- =========================================================== -->
186
+ <!-- Configure Request Log -->
187
+ <!-- Request logs may be configured for the entire server here, -->
188
+ <!-- or they can be configured for a specific web app in a -->
189
+ <!-- contexts configuration (see $(jetty.home)/contexts/test.xml -->
190
+ <!-- for an example). -->
191
+ <!-- =========================================================== -->
192
+ <Ref id="RequestLog">
193
+ <Set name="requestLog">
194
+ <!-- New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
195
+ <Arg><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Arg>
196
+ <Set name="retainDays">90</Set>
197
+ <Set name="append">true</Set>
198
+ <Set name="extended">false</Set>
199
+ <Set name="LogTimeZone">GMT</Set>
200
+ </New -->
201
+ </Set>
202
+ </Ref>
203
+
204
+ <!-- =========================================================== -->
205
+ <!-- extra options -->
206
+ <!-- =========================================================== -->
207
+ <Set name="stopAtShutdown">true</Set>
208
+ <!-- ensure/prevent Server: header being sent to browsers -->
209
+ <Set name="sendServerVersion">true</Set>
210
+
211
+ </Configure>
212
+
@@ -0,0 +1,379 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+
3
+ <!-- ===================================================================== -->
4
+ <!-- This file contains the default descriptor for web applications. -->
5
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
6
+ <!-- The intent of this descriptor is to include jetty specific or common -->
7
+ <!-- configuration for all webapps. If a context has a webdefault.xml -->
8
+ <!-- descriptor, it is applied before the contexts own web.xml file -->
9
+ <!-- -->
10
+ <!-- A context may be assigned a default descriptor by: -->
11
+ <!-- + Calling WebApplicationContext.setDefaultsDescriptor -->
12
+ <!-- + Passed an arg to addWebApplications -->
13
+ <!-- -->
14
+ <!-- This file is used both as the resource within the jetty.jar (which is -->
15
+ <!-- used as the default if no explicit defaults descriptor is set) and it -->
16
+ <!-- is copied to the etc directory of the Jetty distro and explicitly -->
17
+ <!-- by the jetty.xml file. -->
18
+ <!-- -->
19
+ <!-- ===================================================================== -->
20
+ <web-app
21
+ xmlns="http://java.sun.com/xml/ns/javaee"
22
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
23
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
24
+ metadata-complete="true"
25
+ version="2.5">
26
+
27
+ <description>
28
+ Default web.xml file.
29
+ This file is applied to a Web application before it's own WEB_INF/web.xml file
30
+ </description>
31
+
32
+
33
+ <!-- ==================================================================== -->
34
+ <!-- Context params to control Session Cookies -->
35
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
36
+ <!-- UNCOMMENT TO ACTIVATE
37
+ <context-param>
38
+ <param-name>org.mortbay.jetty.servlet.SessionDomain</param-name>
39
+ <param-value>127.0.0.1</param-value>
40
+ </context-param>
41
+
42
+ <context-param>
43
+ <param-name>org.mortbay.jetty.servlet.SessionPath</param-name>
44
+ <param-value>/</param-value>
45
+ </context-param>
46
+
47
+ <context-param>
48
+ <param-name>org.mortbay.jetty.servlet.MaxAge</param-name>
49
+ <param-value>-1</param-value>
50
+ </context-param>
51
+ -->
52
+
53
+ <context-param>
54
+ <param-name>org.mortbay.jetty.webapp.NoTLDJarPattern</param-name>
55
+ <param-value>start.jar|ant-.*\.jar|dojo-.*\.jar|jetty-.*\.jar|jsp-api-.*\.jar|junit-.*\.jar|servlet-api-.*\.jar|dnsns\.jar|rt\.jar|jsse\.jar|tools\.jar|sunpkcs11\.jar|sunjce_provider\.jar|xerces.*\.jar|</param-value>
56
+ </context-param>
57
+
58
+
59
+
60
+ <!-- ==================================================================== -->
61
+ <!-- The default servlet. -->
62
+ <!-- This servlet, normally mapped to /, provides the handling for static -->
63
+ <!-- content, OPTIONS and TRACE methods for the context. -->
64
+ <!-- The following initParameters are supported: -->
65
+ <!-- -->
66
+ <!-- acceptRanges If true, range requests and responses are -->
67
+ <!-- supported -->
68
+ <!-- -->
69
+ <!-- dirAllowed If true, directory listings are returned if no -->
70
+ <!-- welcome file is found. Else 403 Forbidden. -->
71
+ <!-- -->
72
+ <!-- redirectWelcome If true, redirect welcome file requests -->
73
+ <!-- else use request dispatcher forwards -->
74
+ <!-- -->
75
+ <!-- gzip If set to true, then static content will be served-->
76
+ <!-- as gzip content encoded if a matching resource is -->
77
+ <!-- found ending with ".gz" -->
78
+ <!-- -->
79
+ <!-- resoureBase Can be set to replace the context resource base -->
80
+ <!-- -->
81
+ <!-- relativeResourceBase -->
82
+ <!-- Set with a pathname relative to the base of the -->
83
+ <!-- servlet context root. Useful for only serving -->
84
+ <!-- static content from only specific subdirectories. -->
85
+ <!-- -->
86
+ <!-- useFileMappedBuffer -->
87
+ <!-- If set to true (the default), a memory mapped -->
88
+ <!-- file buffer will be used to serve static content -->
89
+ <!-- when using an NIO connector. Setting this value -->
90
+ <!-- to false means that a direct buffer will be used -->
91
+ <!-- instead. If you are having trouble with Windows -->
92
+ <!-- file locking, set this to false. -->
93
+ <!-- -->
94
+ <!-- cacheControl If set, all static content will have this value -->
95
+ <!-- set as the cache-control header. -->
96
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
97
+ <servlet>
98
+ <servlet-name>default</servlet-name>
99
+ <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
100
+ <init-param>
101
+ <param-name>acceptRanges</param-name>
102
+ <param-value>true</param-value>
103
+ </init-param>
104
+ <init-param>
105
+ <param-name>dirAllowed</param-name>
106
+ <param-value>true</param-value>
107
+ </init-param>
108
+ <init-param>
109
+ <param-name>redirectWelcome</param-name>
110
+ <param-value>false</param-value>
111
+ </init-param>
112
+ <init-param>
113
+ <param-name>maxCacheSize</param-name>
114
+ <param-value>2000000</param-value>
115
+ </init-param>
116
+ <init-param>
117
+ <param-name>maxCachedFileSize</param-name>
118
+ <param-value>254000</param-value>
119
+ </init-param>
120
+ <init-param>
121
+ <param-name>maxCachedFiles</param-name>
122
+ <param-value>1000</param-value>
123
+ </init-param>
124
+ <init-param>
125
+ <param-name>gzip</param-name>
126
+ <param-value>false</param-value>
127
+ </init-param>
128
+ <init-param>
129
+ <param-name>useFileMappedBuffer</param-name>
130
+ <param-value>false</param-value>
131
+ </init-param>
132
+ <!--
133
+ <init-param>
134
+ <param-name>cacheControl</param-name>
135
+ <param-value>max-age=3600,public</param-value>
136
+ </init-param>
137
+ -->
138
+ <load-on-startup>0</load-on-startup>
139
+ </servlet>
140
+
141
+ <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
142
+
143
+
144
+ <!-- ==================================================================== -->
145
+ <!-- JSP Servlet -->
146
+ <!-- This is the jasper JSP servlet from the jakarta project -->
147
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
148
+ <!-- The JSP page compiler and execution servlet, which is the mechanism -->
149
+ <!-- used by Glassfish to support JSP pages. Traditionally, this servlet -->
150
+ <!-- is mapped to URL patterh "*.jsp". This servlet supports the -->
151
+ <!-- following initialization parameters (default values are in square -->
152
+ <!-- brackets): -->
153
+ <!-- -->
154
+ <!-- checkInterval If development is false and reloading is true, -->
155
+ <!-- background compiles are enabled. checkInterval -->
156
+ <!-- is the time in seconds between checks to see -->
157
+ <!-- if a JSP page needs to be recompiled. [300] -->
158
+ <!-- -->
159
+ <!-- compiler Which compiler Ant should use to compile JSP -->
160
+ <!-- pages. See the Ant documenation for more -->
161
+ <!-- information. [javac] -->
162
+ <!-- -->
163
+ <!-- classdebuginfo Should the class file be compiled with -->
164
+ <!-- debugging information? [true] -->
165
+ <!-- -->
166
+ <!-- classpath What class path should I use while compiling -->
167
+ <!-- generated servlets? [Created dynamically -->
168
+ <!-- based on the current web application] -->
169
+ <!-- Set to ? to make the container explicitly set -->
170
+ <!-- this parameter. -->
171
+ <!-- -->
172
+ <!-- development Is Jasper used in development mode (will check -->
173
+ <!-- for JSP modification on every access)? [true] -->
174
+ <!-- -->
175
+ <!-- enablePooling Determines whether tag handler pooling is -->
176
+ <!-- enabled [true] -->
177
+ <!-- -->
178
+ <!-- fork Tell Ant to fork compiles of JSP pages so that -->
179
+ <!-- a separate JVM is used for JSP page compiles -->
180
+ <!-- from the one Tomcat is running in. [true] -->
181
+ <!-- -->
182
+ <!-- ieClassId The class-id value to be sent to Internet -->
183
+ <!-- Explorer when using <jsp:plugin> tags. -->
184
+ <!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] -->
185
+ <!-- -->
186
+ <!-- javaEncoding Java file encoding to use for generating java -->
187
+ <!-- source files. [UTF-8] -->
188
+ <!-- -->
189
+ <!-- keepgenerated Should we keep the generated Java source code -->
190
+ <!-- for each page instead of deleting it? [true] -->
191
+ <!-- -->
192
+ <!-- logVerbosityLevel The level of detailed messages to be produced -->
193
+ <!-- by this servlet. Increasing levels cause the -->
194
+ <!-- generation of more messages. Valid values are -->
195
+ <!-- FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
196
+ <!-- [WARNING] -->
197
+ <!-- -->
198
+ <!-- mappedfile Should we generate static content with one -->
199
+ <!-- print statement per input line, to ease -->
200
+ <!-- debugging? [false] -->
201
+ <!-- -->
202
+ <!-- -->
203
+ <!-- reloading Should Jasper check for modified JSPs? [true] -->
204
+ <!-- -->
205
+ <!-- suppressSmap Should the generation of SMAP info for JSR45 -->
206
+ <!-- debugging be suppressed? [false] -->
207
+ <!-- -->
208
+ <!-- dumpSmap Should the SMAP info for JSR45 debugging be -->
209
+ <!-- dumped to a file? [false] -->
210
+ <!-- False if suppressSmap is true -->
211
+ <!-- -->
212
+ <!-- scratchdir What scratch directory should we use when -->
213
+ <!-- compiling JSP pages? [default work directory -->
214
+ <!-- for the current web application] -->
215
+ <!-- -->
216
+ <!-- tagpoolMaxSize The maximum tag handler pool size [5] -->
217
+ <!-- -->
218
+ <!-- xpoweredBy Determines whether X-Powered-By response -->
219
+ <!-- header is added by generated servlet [false] -->
220
+ <!-- -->
221
+ <!-- If you wish to use Jikes to compile JSP pages: -->
222
+ <!-- Set the init parameter "compiler" to "jikes". Define -->
223
+ <!-- the property "-Dbuild.compiler.emacs=true" when starting Jetty -->
224
+ <!-- to cause Jikes to emit error messages in a format compatible with -->
225
+ <!-- Jasper. -->
226
+ <!-- If you get an error reporting that jikes can't use UTF-8 encoding, -->
227
+ <!-- try setting the init parameter "javaEncoding" to "ISO-8859-1". -->
228
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
229
+ <servlet id="jsp">
230
+ <servlet-name>jsp</servlet-name>
231
+ <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
232
+ <init-param>
233
+ <param-name>logVerbosityLevel</param-name>
234
+ <param-value>DEBUG</param-value>
235
+ </init-param>
236
+ <init-param>
237
+ <param-name>fork</param-name>
238
+ <param-value>false</param-value>
239
+ </init-param>
240
+ <init-param>
241
+ <param-name>xpoweredBy</param-name>
242
+ <param-value>false</param-value>
243
+ </init-param>
244
+ <!--
245
+ <init-param>
246
+ <param-name>classpath</param-name>
247
+ <param-value>?</param-value>
248
+ </init-param>
249
+ -->
250
+ <load-on-startup>0</load-on-startup>
251
+ </servlet>
252
+
253
+ <servlet-mapping>
254
+ <servlet-name>jsp</servlet-name>
255
+ <url-pattern>*.jsp</url-pattern>
256
+ <url-pattern>*.jspf</url-pattern>
257
+ <url-pattern>*.jspx</url-pattern>
258
+ <url-pattern>*.xsp</url-pattern>
259
+ <url-pattern>*.JSP</url-pattern>
260
+ <url-pattern>*.JSPF</url-pattern>
261
+ <url-pattern>*.JSPX</url-pattern>
262
+ <url-pattern>*.XSP</url-pattern>
263
+ </servlet-mapping>
264
+
265
+ <!-- ==================================================================== -->
266
+ <!-- Dynamic Servlet Invoker. -->
267
+ <!-- This servlet invokes anonymous servlets that have not been defined -->
268
+ <!-- in the web.xml or by other means. The first element of the pathInfo -->
269
+ <!-- of a request passed to the envoker is treated as a servlet name for -->
270
+ <!-- an existing servlet, or as a class name of a new servlet. -->
271
+ <!-- This servlet is normally mapped to /servlet/* -->
272
+ <!-- This servlet support the following initParams: -->
273
+ <!-- -->
274
+ <!-- nonContextServlets If false, the invoker can only load -->
275
+ <!-- servlets from the contexts classloader. -->
276
+ <!-- This is false by default and setting this -->
277
+ <!-- to true may have security implications. -->
278
+ <!-- -->
279
+ <!-- verbose If true, log dynamic loads -->
280
+ <!-- -->
281
+ <!-- * All other parameters are copied to the -->
282
+ <!-- each dynamic servlet as init parameters -->
283
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
284
+ <!-- Uncomment for dynamic invocation
285
+ <servlet>
286
+ <servlet-name>invoker</servlet-name>
287
+ <servlet-class>org.mortbay.jetty.servlet.Invoker</servlet-class>
288
+ <init-param>
289
+ <param-name>verbose</param-name>
290
+ <param-value>false</param-value>
291
+ </init-param>
292
+ <init-param>
293
+ <param-name>nonContextServlets</param-name>
294
+ <param-value>false</param-value>
295
+ </init-param>
296
+ <init-param>
297
+ <param-name>dynamicParam</param-name>
298
+ <param-value>anyValue</param-value>
299
+ </init-param>
300
+ <load-on-startup>0</load-on-startup>
301
+ </servlet>
302
+
303
+ <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
304
+ -->
305
+
306
+
307
+
308
+ <!-- ==================================================================== -->
309
+ <session-config>
310
+ <session-timeout>30</session-timeout>
311
+ </session-config>
312
+
313
+ <!-- ==================================================================== -->
314
+ <!-- Default MIME mappings -->
315
+ <!-- The default MIME mappings are provided by the mime.properties -->
316
+ <!-- resource in the org.mortbay.jetty.jar file. Additional or modified -->
317
+ <!-- mappings may be specified here -->
318
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
319
+ <!-- UNCOMMENT TO ACTIVATE
320
+ <mime-mapping>
321
+ <extension>mysuffix</extension>
322
+ <mime-type>mymime/type</mime-type>
323
+ </mime-mapping>
324
+ -->
325
+
326
+ <!-- ==================================================================== -->
327
+ <welcome-file-list>
328
+ <welcome-file>index.html</welcome-file>
329
+ <welcome-file>index.htm</welcome-file>
330
+ <welcome-file>index.jsp</welcome-file>
331
+ </welcome-file-list>
332
+
333
+ <!-- ==================================================================== -->
334
+ <locale-encoding-mapping-list>
335
+ <locale-encoding-mapping><locale>ar</locale><encoding>ISO-8859-6</encoding></locale-encoding-mapping>
336
+ <locale-encoding-mapping><locale>be</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
337
+ <locale-encoding-mapping><locale>bg</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
338
+ <locale-encoding-mapping><locale>ca</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
339
+ <locale-encoding-mapping><locale>cs</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
340
+ <locale-encoding-mapping><locale>da</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
341
+ <locale-encoding-mapping><locale>de</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
342
+ <locale-encoding-mapping><locale>el</locale><encoding>ISO-8859-7</encoding></locale-encoding-mapping>
343
+ <locale-encoding-mapping><locale>en</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
344
+ <locale-encoding-mapping><locale>es</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
345
+ <locale-encoding-mapping><locale>et</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
346
+ <locale-encoding-mapping><locale>fi</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
347
+ <locale-encoding-mapping><locale>fr</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
348
+ <locale-encoding-mapping><locale>hr</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
349
+ <locale-encoding-mapping><locale>hu</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
350
+ <locale-encoding-mapping><locale>is</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
351
+ <locale-encoding-mapping><locale>it</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
352
+ <locale-encoding-mapping><locale>iw</locale><encoding>ISO-8859-8</encoding></locale-encoding-mapping>
353
+ <locale-encoding-mapping><locale>ja</locale><encoding>Shift_JIS</encoding></locale-encoding-mapping>
354
+ <locale-encoding-mapping><locale>ko</locale><encoding>EUC-KR</encoding></locale-encoding-mapping>
355
+ <locale-encoding-mapping><locale>lt</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
356
+ <locale-encoding-mapping><locale>lv</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
357
+ <locale-encoding-mapping><locale>mk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
358
+ <locale-encoding-mapping><locale>nl</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
359
+ <locale-encoding-mapping><locale>no</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
360
+ <locale-encoding-mapping><locale>pl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
361
+ <locale-encoding-mapping><locale>pt</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
362
+ <locale-encoding-mapping><locale>ro</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
363
+ <locale-encoding-mapping><locale>ru</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
364
+ <locale-encoding-mapping><locale>sh</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
365
+ <locale-encoding-mapping><locale>sk</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
366
+ <locale-encoding-mapping><locale>sl</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
367
+ <locale-encoding-mapping><locale>sq</locale><encoding>ISO-8859-2</encoding></locale-encoding-mapping>
368
+ <locale-encoding-mapping><locale>sr</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
369
+ <locale-encoding-mapping><locale>sv</locale><encoding>ISO-8859-1</encoding></locale-encoding-mapping>
370
+ <locale-encoding-mapping><locale>tr</locale><encoding>ISO-8859-9</encoding></locale-encoding-mapping>
371
+ <locale-encoding-mapping><locale>uk</locale><encoding>ISO-8859-5</encoding></locale-encoding-mapping>
372
+ <locale-encoding-mapping><locale>zh</locale><encoding>GB2312</encoding></locale-encoding-mapping>
373
+ <locale-encoding-mapping><locale>zh_TW</locale><encoding>Big5</encoding></locale-encoding-mapping>
374
+ </locale-encoding-mapping-list>
375
+
376
+
377
+
378
+ </web-app>
379
+