A second round of fixes to simplify the web application setup code and provide for a connection context accessible by the application when handling web requests.
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package com.foundation.web;
|
||||
|
||||
import com.common.debug.Debug;
|
||||
import com.common.util.IHashMap;
|
||||
import com.common.util.LiteHashMap;
|
||||
import com.foundation.web.WebApplication.PathSubstitution;
|
||||
import com.foundation.web.interfaces.IConnectionContext;
|
||||
import com.foundation.web.interfaces.IRequest;
|
||||
import com.foundation.web.interfaces.IResponse;
|
||||
|
||||
public class DefaultResourceRequestHandler extends ResourceRequestHandler {
|
||||
private IHashMap nameSubstitutionMap = new LiteHashMap(10);
|
||||
private IHashMap pathSubstitutionMap = new LiteHashMap(10);
|
||||
public DefaultResourceRequestHandler() {
|
||||
|
||||
}//DefaultResourceRequestHandler()//
|
||||
/**
|
||||
* Adds a resource name subtitution mapping where the old resource name will be replaced by the new resource name automatically prior to the request being processed.
|
||||
* @param oldName The old resource name.
|
||||
* @param newName The new resource name.
|
||||
*/
|
||||
public void addResourceNameSubstitution(String oldName, String newName) {
|
||||
nameSubstitutionMap.put(oldName, newName);
|
||||
}//addResourceNameSubstitution()//
|
||||
/**
|
||||
* Adds a path subtitution mapping where the old path will be replaced by the new path automatically prior to the request being processed.
|
||||
* @param oldPath The old resource name. eg: "/"
|
||||
* @param newPath The new resource name. eg: "/subdir/index.html"
|
||||
* @param forward Whether the substitution should constitute a forward (where the client is told of the new path) versus a redirect.
|
||||
*/
|
||||
public void addPathSubstitution(String oldPath, String newPath, boolean forward) {
|
||||
pathSubstitutionMap.put(oldPath, new PathSubstitution(newPath, forward));
|
||||
}//addPathSubstitution()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.web.ResourceRequestHandler#performPathSubstitution(java.lang.String, com.foundation.web.interfaces.IRequest, com.foundation.web.interfaces.IResponse)
|
||||
*/
|
||||
protected String performPathSubstitution(String path, IRequest request, IResponse response) {
|
||||
PathSubstitution substitutePath = (PathSubstitution) pathSubstitutionMap.get(path);
|
||||
|
||||
//First attempt to find a substitute path, then check to see if there is a substitute resource.//
|
||||
if(substitutePath != null) {
|
||||
if(substitutePath.forward()) {
|
||||
//Update the Browser's URL if a substitute is found so that additional requests that are relative to the primary resource's path don't fail spectacularly.//
|
||||
response.setForwardUri(substitutePath.getPath() + (request.getParameterString() == null ? "" : request.getParameterString()));
|
||||
path = null;
|
||||
}//if//
|
||||
else {
|
||||
path = substitutePath.getPath();
|
||||
}//else//
|
||||
}//if//
|
||||
else {
|
||||
int lastForwardSlash = path.lastIndexOf('/');
|
||||
int lastBackSlash = path.lastIndexOf('\\');
|
||||
int lastSlash = Math.max(lastForwardSlash, lastBackSlash);
|
||||
//boolean hasDot = path.indexOf('.', lastSlash) != -1; //Note: This requires all accessed resources to have a dot in the name! Is this desired? Without this we can't tell if this is supposed to use the default resource in the directory though.
|
||||
//String resourceName = hasDot && lastSlash + 2 != path.length() ? path.substring(lastSlash + 1) : "";
|
||||
String resourceName = path.substring(lastSlash + 1);
|
||||
String newResourceName = (String) nameSubstitutionMap.get(resourceName);
|
||||
|
||||
if(newResourceName != null) {
|
||||
if(resourceName.length() > 0) {
|
||||
path = path.substring(0, lastSlash + 1) + newResourceName;
|
||||
}//if//
|
||||
else {
|
||||
path += newResourceName;
|
||||
}//else//
|
||||
}//if//
|
||||
}//else//
|
||||
|
||||
return path;
|
||||
}//performPathSubstitution()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.web.ResourceRequestHandler#getMaxMessageSize(com.foundation.web.interfaces.IRequest, com.foundation.web.SessionData, com.foundation.web.SecureSessionData)
|
||||
*/
|
||||
public int getMaxMessageSize(IRequest request, SessionData sessionData, SecureSessionData secureSessionData) {
|
||||
return 0;
|
||||
}//getMaxMessageSize()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.web.ResourceRequestHandler#processRequest(java.lang.String, com.foundation.web.interfaces.IRequest, com.foundation.web.interfaces.IResponse, com.foundation.web.SessionData, com.foundation.web.SecureSessionData, boolean, com.foundation.web.interfaces.IConnectionContext)
|
||||
*/
|
||||
public void processRequest(String requestPath, IRequest request, IResponse response, SessionData sessionData, SecureSessionData secureSessionData, boolean isSecure, IConnectionContext connectionContext) {
|
||||
try {
|
||||
int extensionDecimal = requestPath.lastIndexOf('.');
|
||||
boolean cacheIndefinately = false;
|
||||
|
||||
//Set images to cache indefinately.//
|
||||
if(extensionDecimal != -1) {
|
||||
String extension = requestPath.substring(extensionDecimal + 1).toLowerCase();
|
||||
|
||||
if(extension.equals("gif") || extension.equals("png") || extension.equals("jpg") || extension.equals("jpeg")) {
|
||||
cacheIndefinately = true;
|
||||
}//if//
|
||||
}//if//
|
||||
|
||||
FileContent.setContentResource(response, requestPath, request, request.getCacheDate(), null, cacheIndefinately);
|
||||
}//try//
|
||||
catch(Throwable e) {
|
||||
Debug.log(e);
|
||||
}//catch//
|
||||
}//processRequest()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.web.ResourceRequestHandler#processRequest(com.foundation.web.IWebRequestHandler, java.lang.String, com.foundation.web.interfaces.IRequest, com.foundation.web.interfaces.IResponse, com.foundation.web.SessionData, com.foundation.web.SecureSessionData, boolean, com.foundation.web.interfaces.IConnectionContext)
|
||||
*/
|
||||
public void processRequest(IWebRequestHandler handler, String requestPath, IRequest request, IResponse response, SessionData sessionData, SecureSessionData secureSessionData, boolean isSecure, IConnectionContext connectionContext) {
|
||||
try {
|
||||
handler.processRequest(request, response, sessionData, secureSessionData);
|
||||
}//try//
|
||||
catch(Throwable e) {
|
||||
Debug.log(e);
|
||||
}//catch//
|
||||
}//processRequest()//
|
||||
}//DefaultResourceRequestHandler//
|
||||
Reference in New Issue
Block a user