![JAR search and dependency download from the Maven repository](/logo.png)
javaxt.http.servlet.ServletContext Maven / Gradle / Ivy
package javaxt.http.servlet;
import java.net.MalformedURLException;
import java.util.EventListener;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.Filter;
import javax.servlet.FilterRegistration;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletRegistration;
import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.SessionCookieConfig;
import javax.servlet.SessionTrackingMode;
import javax.servlet.descriptor.JspConfigDescriptor;
import de.mhus.lib.core.MLog;
//******************************************************************************
//** ServletContext
//******************************************************************************
/**
* Provides a mechanism to store application data across servlets. The
* ServletContext is initialized when the web server is initialized. There is
* only one context per Java Virtual Machine.
*
*
* This class is a partial implementation of the javax.servlet.ServletContext
* interface defined in Version 2.5 of the Java Servlet API.
*
******************************************************************************/
public class ServletContext extends MLog implements javax.servlet.ServletContext {
private static final ConcurrentHashMap map = new ConcurrentHashMap();
private ConcurrentHashMap initParams = new ConcurrentHashMap();
private String contextPath = "";
private String contextName;
private String serverInfo;
private java.io.File jarFile;
// **************************************************************************
// ** Constructor
// **************************************************************************
protected ServletContext() {
}
// **************************************************************************
// ** getMajorVersion
// **************************************************************************
/**
* Returns the major version of the Java Servlet API that this servlet
* container supports.
*/
@Override
public int getMajorVersion() {
return 2;
}
// **************************************************************************
// ** getMinorVersion
// **************************************************************************
/**
* Returns the minor version of the Servlet API that this servlet container
* supports.
*/
@Override
public int getMinorVersion() {
return 5;
}
// **************************************************************************
// ** getAttribute
// **************************************************************************
/**
* Returns the servlet container attribute with the given name, or null if
* there is no attribute by that name.
*/
@Override
public Object getAttribute(String name) {
Object val = null;
synchronized (map) {
val = map.get(name);
}
return val;
}
// **************************************************************************
// ** setAttribute
// **************************************************************************
/**
* Binds an object to a given attribute name in this servlet context. If the
* name specified is already used for an attribute, this method will replace
* the attribute with the new to the new attribute. If a null value is
* passed, the effect is the same as calling removeAttribute(). If listeners
* are configured on the ServletContext the container notifies them
* accordingly.
*/
@Override
public void setAttribute(String name, Object value) {
if (value == null)
this.removeAttribute(name);
else {
synchronized (map) {
map.put(name, value);
map.notifyAll();
}
// TODO: Update listeners
}
}
// **************************************************************************
// ** removeAttribute
// **************************************************************************
/**
* Removes the attribute with the given name from the servlet context. If
* listeners are configured on the ServletContext the container notifies
* them accordingly.
*/
@Override
public void removeAttribute(String name) {
synchronized (map) {
map.remove(name);
map.notifyAll();
}
// TODO: Update listeners
}
// **************************************************************************
// ** getAttributeNames
// **************************************************************************
/**
* Returns an Enumeration containing the attribute names available within
* this servlet context. Use the getAttribute() method with an attribute
* name to get the value of an attribute.
*/
@Override
public java.util.Enumeration getAttributeNames() {
synchronized (map) {
return java.util.Collections.enumeration(map.keySet());
}
}
// **************************************************************************
// ** getContext
// **************************************************************************
/**
* Returns a ServletContext object that corresponds to a specified URL on
* the server, or null if either none exists or the container wishes to
* restrict this access.
*
*
* This method allows servlets to gain access to the context for various
* parts of the server, and as needed obtain {@link RequestDispatcher}
* objects from the context. The given path must be begin with "/", is
* interpreted relative to the server's document root and is matched against
* the context roots of other web applications hosted on this container.
*/
@Override
public ServletContext getContext(String uripath) {
// TODO: Implement getContext
return null;
}
// **************************************************************************
// ** getContextPath
// **************************************************************************
/** */
@Override
public String getContextPath() {
return contextPath;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
// **************************************************************************
// ** getServletContextName
// **************************************************************************
/**
* Returns the name of the web application or null if no name has been
* declared in the deployment descriptor.
*/
@Override
public String getServletContextName() {
return contextName;
}
public void setServletContextName(String contextName) {
this.contextName = contextName;
}
// **************************************************************************
// ** getMimeType
// **************************************************************************
/**
* Returns the MIME type of the specified file, or null
if the
* MIME type is not known. The MIME type is determined by the configuration
* of the servlet container, and may be specified in a web application
* deployment descriptor. Common MIME types are "text/html"
and
* "image/gif"
.
*/
@Override
public String getMimeType(String file) {
// TODO: Implement getMimeType
return null;
}
// **************************************************************************
// ** getResourcePaths
// **************************************************************************
/**
* Returns a directory-like listing of all the paths to resources within the
* web application whose longest sub-path matches the supplied path
* argument. Paths indicating subdirectory paths end with a '/'. The
* returned paths are all relative to the root of the web application and
* have a leading '/'. Consider, for example, a web application containing:
*
*
/welcome.html
/catalog/index.html
/catalog/products.html
/catalog/offers/books.html
/catalog/offers/music.html
/customer/login.jsp
/WEB-INF/web.xml
/WEB-INF/classes/com.acme.OrderServlet.class
*
*
* context.getResourcePaths("/") would return "/welcome.html", "/catalog/",
* "/customer/", "/WEB-INF/"
* context.getResourcePaths("/catalog/") would return "/catalog/index.html",
* "/catalog/products.html", "/catalog/offers/".
*
* @param path
* The partial path used to match the resources, which must start
* with a "/".
*/
@Override
public java.util.Set getResourcePaths(String path) {
// TODO: Implement getResourcePaths()
return null;
}
// **************************************************************************
// ** getResource
// **************************************************************************
/**
* Returns a URL to the resource that is mapped to a specified path. The
* path must begin with a "/" and is interpreted as relative to the current
* context root.
*
*
* This method allows the servlet container to make a resource available to
* servlets from any source. Resources can be located on a local or remote
* file system, in a database, or in a .war
file.
*
*
* The servlet container must implement the URL handlers and
* URLConnection
objects that are necessary to access the
* resource.
*
*
* This method returns null
if no resource is mapped to the
* pathname.
*
*
* Some containers may allow writing to the URL returned by this method
* using the methods of the URL class.
*
*
* The resource content is returned directly, so be aware that requesting a
* .jsp
page returns the JSP source code. Use a
* RequestDispatcher
instead to include results of an
* execution.
*
*
* This method has a different purpose than
* java.lang.Class.getResource
, which looks up resources based
* on a class loader. This method does not use class loaders.
*
* @param path
* a String
specifying the path to the resource
*
* @return the resource located at the named path, or null
if
* there is no resource at that path
*
* @exception MalformedURLException
* if the pathname is not given in the correct form
*/
@Override
public java.net.URL getResource(String path) throws java.net.MalformedURLException {
// TODO: implement getResource()
return null;
}
// **************************************************************************
// ** getResourceAsStream
// **************************************************************************
/**
* Returns the resource located at the named path as an InputStream.
*
*
* The data in the InputStream
can be of any type or length.
* The path must be specified according to the rules given in
* getResource
. This method returns null
if no
* resource exists at the specified path.
*
*
* Meta-information such as content length and content type that is
* available via getResource
method is lost when using this
* method.
*
*
* The servlet container must implement the URL handlers and
* URLConnection
objects necessary to access the resource.
*
*
* This method is different from
* java.lang.Class.getResourceAsStream
, which uses a class
* loader. This method allows servlet containers to make a resource
* available to a servlet from any location, without using a class loader.
*/
@Override
public java.io.InputStream getResourceAsStream(String path) {
// TODO: Implement getResourceAsStream()
return null;
}
// **************************************************************************
// ** getRequestDispatcher
// **************************************************************************
/**
* Returns a RequestDispatcher that acts as a wrapper for a resource located
* at the given path. A RequestDispatcher can be used to forward a request
* to the resource or to include the resource in a response. The resource
* can be dynamic or static.
*
*
* The pathname must begin with a "/" and is interpreted as relative to the
* current context root. Use getContext
to obtain a
* RequestDispatcher
for resources in foreign contexts. This
* method returns null
if the ServletContext
* cannot return a RequestDispatcher
.
*/
@Override
public RequestDispatcher getRequestDispatcher(String path) {
// TODO: Implement getRequestDispatcher
return null; // RequestDispatcher
}
// **************************************************************************
// ** getNamedDispatcher
// **************************************************************************
/**
* Returns a RequestDispatcher that acts as a wrapper for the named servlet.
* Returns a null if the ServletContext cannot return a RequestDispatcher
* for any reason.
*
* Servlets are given names programatically or via a web application
* deployment descriptor. A servlet instance can determine its name using
* ServletConfig.getServletName().
*
* @param name
* A String specifying the name of a servlet to wrap.
*/
@Override
public RequestDispatcher getNamedDispatcher(String name) {
// TODO: Implement getNamedDsipatcher
return null; // RequestDispatcher
}
// **************************************************************************
// ** getServlet
// **************************************************************************
/**
* @deprecated As of Java Servlet API 2.1, with no direct replacement. This
* method will be permanently removed in a future version of the
* Java Servlet API.
* @return null
*/
@Deprecated
@Override
public Servlet getServlet(String name) throws ServletException {
return null; // return Servlet
}
// **************************************************************************
// ** getServlets
// **************************************************************************
/**
* @deprecated As of Java Servlet API 2.0, with no replacement. This method
* will be permanently removed in a future version of the Java
* Servlet API.
* @return null
*/
@Deprecated
@Override
public java.util.Enumeration getServlets() {
return null;
}
// **************************************************************************
// ** getServletNames
// **************************************************************************
/**
* @deprecated As of Java Servlet API 2.1, with no direct replacement. This
* method will be permanently removed in a future version of the
* Java Servlet API.
* @return null
*/
@Deprecated
@Override
public java.util.Enumeration getServletNames() {
return null;
}
// **************************************************************************
// ** log
// **************************************************************************
/**
* Writes an exception's stack trace and an explanatory error message to the
* servlet log file.
*
* @deprecated As of Java Servlet API 2.1, use log(message, throwable)
* instead.
*/
@Deprecated
@Override
public void log(Exception exception, String msg) {
log().d(msg, exception);
}
// **************************************************************************
// ** log
// **************************************************************************
/**
* Writes an explanatory message and a stack trace for a given Throwable
* exception to the servlet log file.
*/
@Override
public void log(String message, Throwable throwable) {
// TODO: Implement logger
}
// **************************************************************************
// ** getRealPath
// **************************************************************************
/**
* Returns a String containing the real path for a given virtual path. For
* example, the path "/index.html" found in:
*
*
* http://localhost:8080/WebApplication/index.html
*
*
* might represent a physical file found in:
*
*
* D:\WebApps\WebApplication\index.html
*
*
* The real path returned will be in a form appropriate to the computer and
* operating system on which the servlet container is running, including the
* proper path separators. This method returns null if the servlet container
* cannot translate the virtual path to a real path for any reason .
*
* @param path
* A String specifying a virtual path (e.g. "/index.html").
*/
@Override
public String getRealPath(String path) {
// TODO: Implement getRealPath()
return null;
}
// **************************************************************************
// ** getServerInfo
// **************************************************************************
/**
* Returns the name and version of the servlet container on which the
* servlet is running. The form of the returned string is servername/
* versionnumber. Example:
*
*
* JavaServer Web Dev Kit/1.0
*
*
* The servlet container may return other optional information after the
* primary string, in parentheses. Example:
*
*
* JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT 4.0 x86)
*
*/
@Override
public String getServerInfo() {
// if (serverInfo!=null) return serverInfo;
// if (jarFile==null) jarFile = this.getJarFile();
//
// //Parse the jar file and try to find the server version number
// try{
// java.util.jar.JarFile jar = new java.util.jar.JarFile(jarFile);
// java.util.jar.Manifest manifest = jar.getManifest();
//
// String versionNumber = null;
// java.util.jar.Attributes attributes = manifest.getMainAttributes();
// if (attributes!=null){
// java.util.Iterator it = attributes.keySet().iterator();
// while (it.hasNext()){
// java.util.jar.Attributes.Name key = (java.util.jar.Attributes.Name)
// it.next();
// String keyword = key.toString();
// if (keyword.equals("Implementation-Version") ||
// keyword.equals("Bundle-Version")){
// versionNumber = (String) attributes.get(key);
// break;
// }
// }
// }
// jar.close();
// serverInfo = "JavaXT Web Server" +
// (versionNumber!=null?"/"+versionNumber:"");
// return serverInfo;
// }
// catch(Exception e){
// }
return "JavaXT Web Server";
}
// **************************************************************************
// ** getInitParameter
// **************************************************************************
/**
* Returns the value of the named context-wide initialization parameter, or
* null if the parameter does not exist.
*
* Initialization parameters are used to store configuration information for
* an entire "web application". For example, it can provide a webmaster's
* email address or the name of a system that holds critical data.
*/
@Override
public String getInitParameter(String name) {
String val = null;
synchronized (initParams) {
val = initParams.get(name);
}
return val;
}
// **************************************************************************
// ** getInitParameterNames
// **************************************************************************
/**
* Returns the names of the context's initialization parameters as an
* Enumeration of String objects, or an empty Enumeration if the context has
* no initialization parameters.
*/
@Override
public java.util.Enumeration getInitParameterNames() {
synchronized (initParams) {
return java.util.Collections.enumeration(initParams.keySet());
}
}
// **************************************************************************
// ** getJarFile
// **************************************************************************
/**
* Returns the jar file associated with the javaxt-server library.
*/
private java.io.File getJarFile() {
java.lang.Package Package = this.getClass().getPackage();
String path = Package.getName().replace(".", "/");
String url = this.getClass().getClassLoader().getResource(path).toString();
url = url.replace(" ", "%20");
try {
java.net.URI uri = new java.net.URI(url);
if (uri.getPath() == null) {
path = uri.toString();
if (path.startsWith("jar:file:")) {
// Update Path and Define Zipped File
path = path.substring(path.indexOf("file:/"));
path = path.substring(0, path.toLowerCase().indexOf(".jar") + 4);
if (path.startsWith("file://")) { // UNC Path
path = "C:/" + path.substring(path.indexOf("file:/") + 7);
path = "/" + new java.net.URI(path).getPath();
} else {
path = new java.net.URI(path).getPath();
}
return new java.io.File(path);
}
} else {
return new java.io.File(uri);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public int getEffectiveMajorVersion() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getEffectiveMinorVersion() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean setInitParameter(String name, String value) {
// TODO Auto-generated method stub
return false;
}
@Override
public Dynamic addServlet(String servletName, String className) {
// TODO Auto-generated method stub
return null;
}
@Override
public Dynamic addServlet(String servletName, Servlet servlet) {
// TODO Auto-generated method stub
return null;
}
@Override
public Dynamic addServlet(String servletName, Class extends Servlet> servletClass) {
// TODO Auto-generated method stub
return null;
}
@Override
public T createServlet(Class clazz) throws javax.servlet.ServletException {
// TODO Auto-generated method stub
return null;
}
@Override
public ServletRegistration getServletRegistration(String servletName) {
// TODO Auto-generated method stub
return null;
}
@Override
public Map getServletRegistrations() {
// TODO Auto-generated method stub
return null;
}
@Override
public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, String className) {
// TODO Auto-generated method stub
return null;
}
@Override
public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
// TODO Auto-generated method stub
return null;
}
@Override
public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Class extends Filter> filterClass) {
// TODO Auto-generated method stub
return null;
}
@Override
public T createFilter(Class clazz) throws javax.servlet.ServletException {
// TODO Auto-generated method stub
return null;
}
@Override
public FilterRegistration getFilterRegistration(String filterName) {
// TODO Auto-generated method stub
return null;
}
@Override
public Map getFilterRegistrations() {
// TODO Auto-generated method stub
return null;
}
@Override
public SessionCookieConfig getSessionCookieConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setSessionTrackingModes(Set sessionTrackingModes) {
// TODO Auto-generated method stub
}
@Override
public Set getDefaultSessionTrackingModes() {
// TODO Auto-generated method stub
return null;
}
@Override
public Set getEffectiveSessionTrackingModes() {
// TODO Auto-generated method stub
return null;
}
@Override
public void addListener(String className) {
// TODO Auto-generated method stub
}
@Override
public void addListener(T t) {
// TODO Auto-generated method stub
}
@Override
public void addListener(Class extends EventListener> listenerClass) {
// TODO Auto-generated method stub
}
@Override
public T createListener(Class clazz) throws javax.servlet.ServletException {
// TODO Auto-generated method stub
return null;
}
@Override
public JspConfigDescriptor getJspConfigDescriptor() {
// TODO Auto-generated method stub
return null;
}
@Override
public ClassLoader getClassLoader() {
// TODO Auto-generated method stub
return null;
}
@Override
public void declareRoles(String... roleNames) {
// TODO Auto-generated method stub
}
@Override
public String getVirtualServerName() {
// TODO Auto-generated method stub
return null;
}
@Override
public void log(String msg) {
log().d(msg);
}
}