Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts2:操作以增量方式执行多次_Java_Android_Tomcat_Struts2 - Fatal编程技术网

Java Struts2:操作以增量方式执行多次

Java Struts2:操作以增量方式执行多次,java,android,tomcat,struts2,Java,Android,Tomcat,Struts2,我正在使用Struts 2.3.16和Tomcat 7.0.47来处理机器上的请求。请求由Android应用程序以以下方式发送:- DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false)); HttpPost httppost = new HttpPos

我正在使用Struts 2.3.16和Tomcat 7.0.47来处理机器上的请求。请求由Android应用程序以以下方式发送:-

    DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
    HttpPost httppost = new HttpPost("http://--my server IP--:port/webAppName/struts-action-name");
    httppost.setEntity(new UrlEncodedFormEntity(Data_To_Be_Sent));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
然而,在服务器端,我注意到action类的执行次数越来越多。例如,在tomcat上部署webapp后,对于我的Android应用程序发送的第一个请求,struts的action类将按其应该的方式执行一次。对于第二个请求,action类执行两次,对于第三个请求,它执行三次,依此类推

下面是我编写的struts的action类:-

public class GetTagsAction extends ActionSupport {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private KrozonaLogger logger = new KrozonaLogger(this.getClass());
public String magazineName;
public InputStream inputStream;
public String xmlStream;
public byte[] incomingImageByte;
public String image;


public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
    toImageByte();
}

public String getMagazineName() {
    return magazineName;
}

public void setMagazineName(String magazineName) {
    this.magazineName = magazineName;
    logger.log("Magazine Name is: " + this.magazineName);
}

public byte[] getIncomingImageByte() {
    return incomingImageByte;
}

public void toImageByte() {
    this.incomingImageByte = Base64.decodeBase64(image);
    logger.log("Number of elements in incomingImage byte array: " + incomingImageByte.length);
}

public String getXmlStream() {
    return xmlStream;
}

public String execute() {
    try {
        this.xmlStream = DBAccessService.getXml(magazineName, incomingImageByte);
        if (xmlStream != null) {
            this.inputStream = IOUtils.toInputStream(xmlStream);
            return "success";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "failure";
}

public InputStream getInputStream() {
    return inputStream;
}
}
以下是揭示这种奇怪行为的日志:-

下面是struts.xml


为什么会有这种奇怪的行为?如何解决这个问题?

可能是您发送的数据越来越多,就像您在添加数据,而不是替换以前的值。在检查HTTP请求之前尝试输出要发送的数据,发送到服务器的数据没有问题…@k\u程序员:你熟悉struts吗?是的,有点熟悉。日志显示函数在一系列数据上进行迭代,因此数据要么在android应用程序中汇总,要么在java类中汇总。在控制台的两端转储数据,看看是否有与您期望的不同之处。正如您所看到的,在第一个请求之后,我不止一次地接收数据,而且,我的操作的execute方法在每个请求中被调用的次数越来越多。数据没有问题,但是接收数据的类不止一次地这样做。我认为这个问题与struts2中的上下文有关,但不能确切指出它是什么。
<---- for first request ----->
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 71739
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image


<---- for second request ----->
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 71458
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 71458
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image
INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image


 <---- for third request ----->
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 64528
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 64528
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Number of elements in incomingImage byte array: 64528
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
 INFO - class com.krozona.databaseaccess.gatewayService.GetTagsAction: Magazine Name is: Maxim
 INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image
 INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image
 INFO - class com.krozona.databaseaccess.service.DbService: Couldn't find a match for the input image
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd" >
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="Krozona" namespace="/" extends="struts-default" >

    <action name="GetTags" class="com.krozona.databaseaccess.gatewayService.GetTagsAction" method="execute">
        <result name="success" type="stream">
            <param name="contentType">text/plain</param>
            <param name="inputName">inputStream</param>
        </result>
        <result name="failure">/HelloWorld.jsp</result>
  </action>

  </package>
</struts>