Javascript ajax发布到jboss eap 7时没有编码器组件,代码凌乱

Javascript ajax发布到jboss eap 7时没有编码器组件,代码凌乱,javascript,ajax,tomcat,jboss,wildfly,Javascript,Ajax,Tomcat,Jboss,Wildfly,首先,该项目在tomcat(UTF-8)和jboss eap 6中运行良好,页面编码也是UTF-8。 其次,jboss配置有add 第三,当使用encodeURIComponent或serialize时,它工作得很好,但是,当使用serialize并附加一些参数时失败,如下所示: var params=$(“#form#u viewerupdateschedule”).serialize(); 参数+=”&recordId=“+recordId; 参数+=”&custName=“+custN

首先,该项目在tomcat(UTF-8)和jboss eap 6中运行良好,页面编码也是UTF-8。 其次,jboss配置有add

第三,当使用encodeURIComponent或serialize时,它工作得很好,但是,当使用serialize并附加一些参数时失败,如下所示:

var params=$(“#form#u viewerupdateschedule”).serialize();
参数+=”&recordId=“+recordId;
参数+=”&custName=“+custName;
参数+=”&startTime=“+startTime;
参数+=”&content=“+content;
params+=”&endTime=“+endTime;
params+=”&scheduleDate=“+getScheduleDate();
面罩();
$.ajax({
url:url,
类型:“POST”,
数据:params,
数据类型:“JSON”,
contentType:“application/x-www-form-urlencoded;charset=utf-8”,

成功:函数(数据){
您需要在http侦听器(和任何其他侦听器)上设置uri编码

例如:

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" url-charset="UTF-8"/>
同样,对于您可能正在使用的所有其他侦听器

值得注意的是,名为org.apache.catalina.*的系统属性是与tomcat相关的属性。因为使用的WildFly 8+和EAP7+web服务器是底层的,不再是基于tomcat的jbossweb。
因此,这些属性根本不会有任何影响。

通过研究它们的源代码,我找到了为什么它在tomcat中运行良好,但在WildFly中失败的答案

在WildFly中,您可以在
io.undertow.server.handlers.form.FormEncodedDataDefinition.FormEncodedDataParser.doParse(最终StreamSourceChannel频道)
中看到详细信息,其处理方式如下:

buffer.clear();
int c = channel.read(buffer);
if (c > 0) {
       buffer.flip();
       while (buffer.hasRemaining()) {
       byte n = buffer.get();
       builder.append((char) n);//the problem occurred here,[a][b][c] would be changed to [0][a][0][b][0][c]
在tomcat中,您可以在
org.apache.tomcat.util.http.Parameters.processParameters(byte bytes[],int start,int len,Charset Charset)中看到详细信息

它使用
新字符串(byte[]bytes,int offset,int length,Charset Charset)
将post内容从byte[]转换为字符串


因此,在这种情况下,默认编码是utf-8,没有js URIComponentEncoding,tomcat工作得很好。

项目使用字符过滤器将字符编码设置为“utf-8”可能是这样:。这说明wildfly使用jax rs而不是servlet,所以我的编码设置不可用。如果是这样,为什么我使用encodeURIComponent时它工作得很好?这没有道理。那么问题是tomcat可以和jboss(wildfly)如果没有encodeURIComponent或post数据的post不是js对象,那么为什么以及如何在wildFly中解决它?虽然我添加了您提到的行,但在我的情况下它不起作用。
buffer.clear();
int c = channel.read(buffer);
if (c > 0) {
       buffer.flip();
       while (buffer.hasRemaining()) {
       byte n = buffer.get();
       builder.append((char) n);//the problem occurred here,[a][b][c] would be changed to [0][a][0][b][0][c]