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 拥有所有请求信息甚至完全拥有请求,配置具有挑战性。甚至 Adob​​e 在发布后也不得不修补 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范围好吗?的主要内容,如果未能解决你的问题,请参考以下文章

表视图错误致命错误:加载文件时索引超出范围

可以使用外部代理工具篡改/修改请求范围变量吗?

SwiftUI:JSON 索引总是超出范围

使用 simple_form 和 bootstrap 在范围滑块上显示当前值

Laravel 雄辩的范围总是返回一个集合

在 twilio mp3 录制 url 上进行范围请求时,接受范围设置为无