Java Struts2:操作以增量方式执行多次
我正在使用Struts 2.3.16和Tomcat 7.0.47来处理机器上的请求。请求由Android应用程序以以下方式发送:-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
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>