无法获取服务器中的参数

时间:2014-06-20 01:29:05

标签: java jsp tomcat

当我尝试从请求中获取参数时出现问题,我只得到了NULL。 JSP文件是这样的:

    <%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="http://struts.apache.org/tags-html"  prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean"  prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html:html locale="true">
    <head>
        <META HTTP-EQUIV="pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="cache-control" CONTENT="no-cache">
        <META HTTP-EQUIV="expires" CONTENT="0">
        <META HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8">
        <META HTTP-EQUIV="Content-Script-Type" content="text/javascript">
        <META HTTP-EQUIV="Content-Style-Type"  content="text/css">
        <link rel="stylesheet" type="text/css" href="css/base.css">

        <title>Menu</title>
<SCRIPT language="JavaScript">
<!--
    function nextPage(url) {
        location.replace(url);
    }
    function setUrl(url) {
        document.forms[0].url.value = url;
    }
//-->
</SCRIPT>

    </head>
    <body tabindex="-1">
        <%-- ページ・ボディ --%>
        <html:form action="/select.do?apl500_p=1" method="post" target="_self" >
            <html:hidden property="url" value ="" />

            <table style="width:100%;" border="0">
                <tr>
                    <td style="width:100%;text-align:center">
                        <font size="5" color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <B>Menu</B></font>
                    </td>
                    <td style="text-align:right">
                        <html:submit property="submit_logout" value="Logout" tabindex="-1"/>
                    </td>
                </tr>
            </table>

            <hr><br>

            <div align="center" style="width:90%;height:482px;overflow:auto;margin-left:40px;">
            <table  border="0">
                <tr>
                    <td style="width:100%;text-align:center">
<html:submit property="btn1" value="アプリケーション1" onclick="setUrl('/aplXXX')" style="width:400px;height=150px;font-size:14pt;"/>
                    </td>
                </tr>
                <tr>
                    <td style="width:100%;text-align:center">
<html:submit property="btn2" value="新共通認証システム(ローカル環境用)テスト" onclick="setUrl('/authTest')" style="width:400px;height=150px;font-size:14pt;"/>
                    </td>
                </tr>
            </table>

            </div>

            <%-- ページ・フッダー --%>
            <%@ include file="/WEB-INF/jsp/footer.inc" %>

        </html:form>
    </body>
</html:html>
<% out.flush(); %>

当我使用“request.getParameterNames()”时,我只能得到“apl500_p”参数,我无法获取“url”参数。我使用的是tomcat7.0.41,但是如果我使用的是tomcat5.5.36,那就没关系了。 我不知道为什么。 tomcat7.0.41有什么问题吗? 我使用了Fiddler2,我确信“url”参数已发送到服务器。

2 个答案:

答案 0 :(得分:0)

尝试删除表单操作值

中的apl500_p = 1
 action="/select.do"

这样它会将所有表单元素传递给servlet。向表单操作添加参数可以防止这种情况。如果您需要apl500_p值,我建议您创建另一个隐藏字段,如:

 <html:hidden property="apl500_p" value ="1" />

答案 1 :(得分:0)

根据您的讨论,我怀疑参数url为NULL,因为浏览器使用的字符编码与服务器使用的字符编码不同。

在浏览器向服务器发送参数之前,它会对参数进行URL编码。该编码方法使用百分比编码对某些字符(例如,日文字符)进行编码。百分比编码方法的工作原理是首先根据指定的字符集将字符转换为字节。之后,它将这些字节编码为十六进制数字序列,前缀为“%”字符。我的意思是浏览器使用的字符编码。

然后,服务器将检索到的参数解码回原始形式。它通过首先将十六进制数字序列解码为序列字节来实现。之后,它根据指定的字符集将每个字节转换为一个字符。这里的问题是服务器需要使用与浏览器使用的字符集相同的字符集。通常,请求不包含有关浏览器使用的字符集的信息,从而导致服务器尽力猜测。如果猜测不正确,解码过程将无声地失败,并返回NULL,这就是您的情况。

不同的Web服务器有不同的猜测方式。 Web服务器可能会查看Content-Type标头,Content-Language标头,Accept标头,Accept Language标头,配置文件等。

由于我不熟悉两种Tomcat版本,因此我无法准确指出如何解决问题。但是,您可以从研究Tomcat如何计算字符编码开始。在WebSphere Application Server中,有一个配置文件可以修改,以指定服务器使用的默认字符编码。

参数apl500_p不为NULL,因为1的网址编码形式也是1。服务器解码后没有任何问题。