📄 slashperiodresource.java
字号:
/*
Copyright 2006 Christian Gross http://www.devspace.com
From the book Ajax Patterns and Best Practices
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 devspace.ajax.permutations.implementations;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.servlet.FilterChain;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import devspace.ajax.permutations.ParseHeadersDisposable;
import devspace.ajax.permutations.ResourceRewriterBase;
import devspace.testDrivenDevelopment.tracer.GenerateOutput;
public class SlashPeriodResource extends ResourceRewriterBase< HttpServletRequest, HttpServletResponse, FilterChain> {
public SlashPeriodResource() {
}
public boolean isResource(HttpServletRequest request) {
GenerateOutput.Write( "SlashPeriodResource.IsResource", "Path (" + request.getPathTranslated() + ")");
GenerateOutput.Write( "SlashPeriodResource.IsResource", "URLPath (" + request.getRequestURI() + ")");
int findPeriod = request.getRequestURI().lastIndexOf( '.');
int findSlash = request.getRequestURI().lastIndexOf( '/');
GenerateOutput.Write( "SlashPeriodResource.IsResource", "findPeriod (" + findPeriod + ") findSlash ( " + findSlash + ")");
if( findPeriod == -1) {
return true;
}
if( findSlash > findPeriod) {
return true;
}
GenerateOutput.Write( "SlashPeriodResource.IsResource", "could not find anything");
return false;
}
public void RewritePath( String extension, HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
//String path = _context.Request.PhysicalPath + extension;
RequestDispatcher dispatcher = request.getRequestDispatcher( request.getRequestURI() + extension);
dispatcher.forward( request, response);
/*if( extension.CompareTo( ".aspx") == 0) {
// This should have to be coded, but it is because it seems xsp
// will not start the aspx compiler and return the aspx code as
// octets, even though when rewriting to HTML everything works well
// I don't like this because I am starting and ending the request right
// at the begining of the request leaving me to wonder what will
// happen with the session information etc.
GenerateOutput.Write("RewriterBase.RewritePath", "Manual page parse");
IHttpHandler handler = PageParser.GetCompiledPageInstance(
_context.Request.Path + extension, path, _context);
GenerateOutput.Write( "RewriterBase.RewritePath", "Handler class (" + handler.GetType().FullName + ")");
handler.ProcessRequest( _context);
_app.CompleteRequest();
//_context.Response.Redirect( _context.Request.Path + filename);
}
else {
GenerateOutput.Write("RewriterBase.RewritePath", "redirect");
_context.RewritePath(_context.Request.Path + extension);
}*/
}
private boolean doesFileExistAndRewrite(String fileExtension, HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
String path = _filterConfig.getServletContext().getRealPath( request.getRequestURI()) + fileExtension;
GenerateOutput.Write("SlashPeriodResource.DoesFileExistAndRewrite", "Path (" + path + ")");
File file = new File( path);
if( file.exists()) {
RewritePath( fileExtension, request, response, chain);
return true;
}
else {
return false;
}
}
private boolean writeRedirection( String mimetype, HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException{
GenerateOutput.Write("SlashPeriodResource.WriteRedirection", "Mimetype (" + mimetype + ")");
if( mimetype.indexOf( "xml") != -1) {
if( !doesFileExistAndRewrite( ".xhtml", request, response, chain)) {
return doesFileExistAndRewrite( ".jsp", request, response, chain);
}
else {
return true;
}
}
else if( mimetype.indexOf( "html") != -1) {
if( !doesFileExistAndRewrite( ".html", request, response, chain)) {
return doesFileExistAndRewrite( ".jsp", request, response, chain);
}
else {
return true;
}
}
else if( mimetype.indexOf( "txt") != -1) {
return doesFileExistAndRewrite( ".txt", request, response, chain);
}
else if( mimetype.indexOf( "*/*") != -1) {
if( !doesFileExistAndRewrite( ".html", request, response, chain)) {
return doesFileExistAndRewrite( ".jsp", request, response, chain);
}
else {
return true;
}
}
return false;
}
public void writeRepresentation(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException{
ArrayList elements = new ParseHeadersDisposable().parseHeaders( request.getHeader( "Accept"));
for( Object token : elements) {
StringTokenizer tokenizer = new StringTokenizer((String)token, ";");
if( writeRedirection( tokenizer.nextToken(), request, response, chain)) {
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -