FORM范围总是空的? URL范围好吗?
Posted
技术标签:
【中文标题】FORM范围总是空的? URL范围好吗?【英文标题】:FORM scope always empty? URL scope is fine? 【发布时间】:2012-12-06 21:12:09 【问题描述】:我在带有 Java 1.7 的 Mac OS X 10.8 上的带有 Jetty 8 的 Railo 4.0.2.002 Express 中运行旧版 CF Fusebox 5.5 应用程序。 我也在使用码头 urlrewrite http://tuckey.org/urlrewrite/(如果相关)
为什么在提交表单时FORM
范围总是空白?但如果我使用URL
范围,它就可以正常工作。
该应用在所有其他版本的 CF 中都可以正常运行,在这里也应该可以正常运行。
更新 1:
此外,当我在Application.cfc
内执行onRequestStart
并转储FORM
范围时,它也在那里是空的。
有人遇到过这个问题吗?我认为它不一定是“保险丝盒”,所以我想知道这是否是 Railo 4 兼容性问题?
更新 2: 当表单发布到 /admin/index.cfm?event=Main.Login 表单范围工作正常。但是当它发布到 /admin/event/Main.Login 时,表单范围就消失了。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
<rule>
<from>^/admin/event/(.*)</from>
<to last="false">/admin/index.cfm?event=$1</to>
</rule>
<rule>
<from>^/lms/event/(.*)</from>
<to last="false">/lms/index.cfm?event=$1</to>
</rule>
</urlrewrite>
更新 3: 还应该注意的是,Charles(代理)正在正确检测“POST”请求,其中包含正确发送到服务器的电子邮件/密码和其他表单元素。 Jetty 服务器根本看不到它们,或者没有正确地将它们转发到 Railo 引擎或其他什么?
更新 4:
这是他们告诉您放置在web.xml
中的 tukey 配置。我实际上将它放在 Railo Express 的 etc/
目录中的 webdefault.xml
中,我猜这可能只是 Jetty 文件。
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
【问题讨论】:
你能告诉我们一些不工作的代码吗? What have you tried? 我想我刚刚回答过了...我相信这是我的 URLrewrite 规则... 它们确实很棘手。如果您确实发现它是您的 URL 重写规则,请将之前和之后作为您的答案发布,以便其他人可以从解决方案中受益。 我从来没有用过Tuckey,但是如果它是做301或302重定向,那么它确实会失去FORM范围。如果您观察请求的 HTTP 流量(使用 Fiddler (fiddler2.com/fiddler2) 或 Charles (charlesproxy.com)),您会看到重定向发生吗? Tukey 是一个 servlet 过滤器(插入到 Tomcat 中),它重写 URL(不是 HTTP 重定向)——除非您使用type="redirect"
属性指示它,否则它不会执行 301/302。跨度>
【参考方案1】:
我在使用 Tuckey 时遇到了很多问题,最终使用 Apache 和 modrewrite 来实现 Tuckey 不支持的功能。话虽这么说,Railo + Tomcat/Jetty 不是带有 Jrun 的 ColdFusion,而且要确保 mod_rewrite 拥有所有请求信息甚至完全拥有请求,配置具有挑战性。甚至 Adobe 在发布后也不得不修补 CF10,因为它们缺少 CF9-+JRUN 连接器的原始功能。
但是,对于您的解决方案,您需要主动出击。请参阅此处的主题。
https://groups.google.com/forum/#!msg/railo/uw-U9hCFu5k/bEmr_I2Kl8sJ
其他人也有同样的问题,并通过将它放在 onRequestStart 中解决它:
<cfscript>
if(gethTTPRequestData().method eq "POST")
if(NOT structKeyExists(form,"fieldnames"))
var paramMap = getPageContext().getRequest().getParameterMap();
var paramMapKeys = structKeyList(paramMap);
form.fieldnames = paramMapKeys;
for(x =1; x lte listLen(paramMapKeys); x++)
param = listGetAt(paramMapKeys,x);
form[param] = paramMap[param][1];
</cfscript>
尚不清楚这是 Jetty、Railo 还是 Tuckey 中的错误。
【讨论】:
我从来没有遇到过 Tomcat 和 Railo 的 Apache RewriteRule 问题,所以我倾向于认为这是 Tuckey 和/或 Jetty 的问题,而不是 Railo 的问题。 肖恩,我肯定指的是连接器的配置。它与Railo 无关,只是Macromedia 的JRun 连接器开箱即用,如您所知。 Apache/Tomcat 连接器肯定有更多的动手能力(以真正的 Apache 组方式)。以上是关于FORM范围总是空的? URL范围好吗?的主要内容,如果未能解决你的问题,请参考以下文章