Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 1ea12b9c46a70f544556527d25ecb07d4a38252d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
 * Copyright (c) OSGi Alliance (2000, 2015). All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.osgi.service.http;

import java.util.Dictionary;
import javax.servlet.Servlet;
import javax.servlet.ServletException;

/**
 * The Http Service allows other bundles in the OSGi environment to dynamically
 * register resources and servlets into the URI namespace of Http Service. A
 * bundle may later unregister its resources or servlets.
 * 
 * @noimplement
 * @author $Id$
 * @see HttpContext
 */
public interface HttpService {
	/**
	 * Registers a servlet into the URI namespace.
	 * 
	 * <p>
	 * The alias is the name in the URI namespace of the Http Service at which
	 * the registration will be mapped.
	 * 
	 * <p>
	 * An alias must begin with slash ('/') and must not end with slash ('/'),
	 * with the exception that an alias of the form &quot;/&quot; is used to
	 * denote the root alias. See the specification text for details on how HTTP
	 * requests are mapped to servlet and resource registrations.
	 * 
	 * <p>
	 * The Http Service will call the servlet's {@code init} method before
	 * returning.
	 * 
	 * <pre>
	 * httpService.registerServlet(&quot;/myservlet&quot;, servlet, initparams, context);
	 * </pre>
	 * 
	 * <p>
	 * Servlets registered with the same {@code HttpContext} object will share
	 * the same {@code ServletContext}. The Http Service will call the
	 * {@code context} argument to support the {@code ServletContext} methods
	 * {@code getResource},{@code getResourceAsStream} and {@code getMimeType},
	 * and to handle security for requests. If the {@code context} argument is
	 * {@code null}, a default {@code HttpContext} object is used (see
	 * {@link #createDefaultHttpContext()}).
	 * 
	 * @param alias name in the URI namespace at which the servlet is registered
	 * @param servlet the servlet object to register
	 * @param initparams initialization arguments for the servlet or
	 *        {@code null} if there are none. This argument is used by the
	 *        servlet's {@code ServletConfig} object.
	 * @param context the {@code HttpContext} object for the registered servlet,
	 *        or {@code null} if a default {@code HttpContext} is to be created
	 *        and used.
	 * @throws NamespaceException if the registration fails because the alias is
	 *         already in use.
	 * @throws javax.servlet.ServletException if the servlet's {@code init}
	 *         method throws an exception, or the given servlet object has
	 *         already been registered at a different alias.
	 * @throws java.lang.IllegalArgumentException if any of the arguments are
	 *         invalid
	 */
	public void registerServlet(String alias, Servlet servlet, Dictionary<?, ?> initparams, HttpContext context) throws ServletException, NamespaceException;

	/**
	 * Registers resources into the URI namespace.
	 * 
	 * <p>
	 * The alias is the name in the URI namespace of the Http Service at which
	 * the registration will be mapped. An alias must begin with slash ('/') and
	 * must not end with slash ('/'), with the exception that an alias of the
	 * form &quot;/&quot; is used to denote the root alias. The name parameter
	 * must also not end with slash ('/') with the exception that a name of the
	 * form &quot;/&quot; is used to denote the root of the bundle. See the
	 * specification text for details on how HTTP requests are mapped to servlet
	 * and resource registrations.
	 * <p>
	 * For example, suppose the resource name /tmp is registered to the alias
	 * /files. A request for /files/foo.txt will map to the resource name
	 * /tmp/foo.txt.
	 * 
	 * <pre>
	 * httpservice.registerResources(&quot;/files&quot;, &quot;/tmp&quot;, context);
	 * </pre>
	 * 
	 * The Http Service will call the {@code HttpContext} argument to map
	 * resource names to URLs and MIME types and to handle security for
	 * requests. If the {@code HttpContext} argument is {@code null}, a default
	 * {@code HttpContext} is used (see {@link #createDefaultHttpContext()}).
	 * 
	 * @param alias name in the URI namespace at which the resources are
	 *        registered
	 * @param name the base name of the resources that will be registered
	 * @param context the {@code HttpContext} object for the registered
	 *        resources, or {@code null} if a default {@code HttpContext} is to
	 *        be created and used.
	 * @throws NamespaceException if the registration fails because the alias is
	 *         already in use.
	 * @throws java.lang.IllegalArgumentException if any of the parameters are
	 *         invalid
	 */
	public void registerResources(String alias, String name, HttpContext context) throws NamespaceException;

	/**
	 * Unregisters a previous registration done by {@code registerServlet} or
	 * {@code registerResources} methods.
	 * 
	 * <p>
	 * After this call, the registered alias in the URI name-space will no
	 * longer be available. If the registration was for a servlet, the Http
	 * Service must call the {@code destroy} method of the servlet before
	 * returning.
	 * <p>
	 * If the bundle which performed the registration is stopped or otherwise
	 * "unget"s the Http Service without calling {@link #unregister(String)}
	 * then Http Service must automatically unregister the registration.
	 * However, if the registration was for a servlet, the {@code destroy}
	 * method of the servlet will not be called in this case since the bundle
	 * may be stopped. {@link #unregister(String)} must be explicitly called to
	 * cause the {@code destroy} method of the servlet to be called. This can be
	 * done in the {@code BundleActivator.stop} method of the bundle registering
	 * the servlet.
	 * 
	 * @param alias name in the URI name-space of the registration to unregister
	 * @throws java.lang.IllegalArgumentException if there is no registration
	 *         for the alias or the calling bundle was not the bundle which
	 *         registered the alias.
	 */
	public void unregister(String alias);

	/**
	 * Creates a default {@code HttpContext} for registering servlets or
	 * resources with the HttpService, a new {@code HttpContext} object is
	 * created each time this method is called.
	 * 
	 * <p>
	 * The behavior of the methods on the default {@code HttpContext} is defined
	 * as follows:
	 * <ul>
	 * <li>{@code getMimeType} - Does not define any customized MIME types for
	 * the Content-Type header in the response, and always returns {@code null}.
	 * </li>
	 * <li>{@code handleSecurity} - Performs implementation-defined
	 * authentication on the request.</li>
	 * <li>{@code getResource} - Assumes the named resource is in the context
	 * bundle; this method calls the context bundle's {@code Bundle.getResource}
	 * method, and returns the appropriate URL to access the resource. On a Java
	 * runtime environment that supports permissions, the Http Service needs to
	 * be granted {@code org.osgi.framework.AdminPermission[*,RESOURCE]}.</li>
	 * </ul>
	 * 
	 * @return a default {@code HttpContext} object.
	 * @since 1.1
	 */
	public HttpContext createDefaultHttpContext();
}

Back to the top