我想知道为什么我没有得到任何东西。我有一个函数谁从SQL Server 2008返回一个字节数组但我没有得到任何东西,为什么? .getWhiteLabelingLogo()是一个函数,它返回一个byte [],其中包含我想在jsp页面显示的图像。我访问这个
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.rmi.RemoteException;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.axis.MessageContext;
import org.apache.struts2.ServletActionContext;
import org.datacontract.schemas._2004._07.CCIS_Web_Services_PublicApi.PapiAccountInfo;
import org.datacontract.schemas._2004._07.CCIS_Web_Services_PublicApi.PapiUserInfo;
import Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub;
import Services.Web.CCIS.PublicApiService_PortType;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ShowImageAction extends ActionSupport{
Map session;
private byte[] itemImage;
private InputStream str = null;
public String execute() throws RemoteException {
System.out.println("Estoy aquí");
HttpServletResponse response = ServletActionContext.getResponse();
session = ActionContext.getContext().getSession();
PublicApiService_PortType puerto=(PublicApiService_PortType) session.get("puerto");
((BasicHttpBinding_PublicApiServiceStub)puerto).setMaintainSession(true);
MessageContext ctx=(MessageContext) session.get("contexto");
PapiUserInfo[] users;
users = puerto.getUsers();
Long accountID=users[0].getID();
PapiAccountInfo info=puerto.getAccountInfo(accountID);
itemImage=info.getWhiteLabelingLogo();
str=new ByteArrayInputStream(itemImage);
return SUCCESS;
}
public void setItemImage(byte[] itemImage) {
this.itemImage = itemImage;
}
public InputStream getStr() {
return str;
}
public void setStr(InputStream str) {
this.str = str;
}
public byte[] getItemImage() {
return itemImage;
}
}
在index.jsp我有这个:
<img src="<s:url value="ShowImageAction" />" border="0" width="100" height="100">
在struts.xml中我有这个:
<action name="ShowImageAction">
<result name="success" type="stream">
<param name="inputName">str</param>
<param name="contentType">image/jpeg</param>
</result>
</action>
我做得不好,因为我什么都没有。非常感谢
答案 0 :(得分:1)
嗯,首先,你根本就没有行动方法。你做有一个名为execute
的方法,但它是静态的并返回void。 Action方法是非静态的,并返回一个String,它映射到struts.xml中的结果。
此外,在响应中设置内容类型后,您永远不会发送任何数据。
此操作还存在其他问题,例如在操作上使用可变静态字段,这不是线程安全的。
以下是一些步骤:
execute
方法更改为非静态方法并返回字符串return SUCCESS;
行示例:
<action name="ShowImageAction" class="package.for.ShowImageAction">
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">str</param>
</result>
</action>
然后,如果它仍然不适合你,请适当地修改你的问题。