Struts2图像的结果类型

Struts2图像的结果类型,struts2,tags,Struts2,Tags,在Struts2应用程序中,我尝试使用自定义结果类型。但是我没有收到任何效果,我的基于JSP页面图像的操作没有被调用。我也没有收到任何异常。请纠正我哪里做错了。 HTTPFox说404,但我在JAVA控制台中没有得到任何东西 HTML: <img src=" <s:url action='ExternalImageAction' />" /> <package name="externalImage_package" extends="struts-defaul

在Struts2应用程序中,我尝试使用自定义结果类型。但是我没有收到任何效果,我的基于JSP页面图像的操作没有被调用。我也没有收到任何异常。请纠正我哪里做错了。 HTTPFox说404,但我在JAVA控制台中没有得到任何东西

HTML:

 <img src=" <s:url action='ExternalImageAction' />" />
<package name="externalImage_package" extends="struts-default">
        <result-types>
            <result-type name="myBytesResult" class="leo.struts.CustomeImageResult" />
        </result-types>

        <action name="ExternalImageAction" class="leo.struts.ExternalImageAction">
            <result name="myImageResult" type="myBytesResult">
            </result>
        </action>
</package>
00:18:06.762    0.044   432 1258    GET 404 text/html (NS_ERROR_FAILURE)    http://localhost:8888/Struts2Whole/%3Cs:url%20action=%27ExternalImageAction%27%20/%3E
public String execute()
{
    System.out.println("execute of the ExternalImageAction...........");
    setContentType("jpg");
    setImageInBytes(getFileBytes("C:/Users/Joseph.M/Desktop/ocwcd5.jpg"));
    return "myImageResult";
}
public static  byte[] getFileBytes(String filePath)
{
    File file = new File(filePath);

    System.out.println("file : "+file.getName());
    byte[] b = new byte[(int) file.length()];
    try {
          FileInputStream fileInputStream = new FileInputStream(file);
          fileInputStream.read(b);
          for (int i = 0; i < b.length; i++) {
                      System.out.print((char)b[i]);
           }
          fileInputStream.close();
     } catch (FileNotFoundException e) {
                 System.out.println("File Not Found.");
                 e.printStackTrace();
     }
     catch (IOException e1) {
              System.out.println("Error Reading The File.");
               e1.printStackTrace();
     }        
    System.out.println("byes of image size : "+b.length);
    return b;
}
客户管理结果:

 <img src=" <s:url action='ExternalImageAction' />" />
<package name="externalImage_package" extends="struts-default">
        <result-types>
            <result-type name="myBytesResult" class="leo.struts.CustomeImageResult" />
        </result-types>

        <action name="ExternalImageAction" class="leo.struts.ExternalImageAction">
            <result name="myImageResult" type="myBytesResult">
            </result>
        </action>
</package>
00:18:06.762    0.044   432 1258    GET 404 text/html (NS_ERROR_FAILURE)    http://localhost:8888/Struts2Whole/%3Cs:url%20action=%27ExternalImageAction%27%20/%3E
public String execute()
{
    System.out.println("execute of the ExternalImageAction...........");
    setContentType("jpg");
    setImageInBytes(getFileBytes("C:/Users/Joseph.M/Desktop/ocwcd5.jpg"));
    return "myImageResult";
}
public static  byte[] getFileBytes(String filePath)
{
    File file = new File(filePath);

    System.out.println("file : "+file.getName());
    byte[] b = new byte[(int) file.length()];
    try {
          FileInputStream fileInputStream = new FileInputStream(file);
          fileInputStream.read(b);
          for (int i = 0; i < b.length; i++) {
                      System.out.print((char)b[i]);
           }
          fileInputStream.close();
     } catch (FileNotFoundException e) {
                 System.out.println("File Not Found.");
                 e.printStackTrace();
     }
     catch (IOException e1) {
              System.out.println("Error Reading The File.");
               e1.printStackTrace();
     }        
    System.out.println("byes of image size : "+b.length);
    return b;
}
public void execute(ActionInvocation调用)引发异常{

ExternalImageAction action = (ExternalImageAction) invocation.getAction();
HttpServletResponse response = ServletActionContext.getResponse();

response.setContentType(action.getContentType());       
response.getOutputStream().write(action.getImageInBytes());
response.getOutputStream().flush();
}

外部图像操作:

 <img src=" <s:url action='ExternalImageAction' />" />
<package name="externalImage_package" extends="struts-default">
        <result-types>
            <result-type name="myBytesResult" class="leo.struts.CustomeImageResult" />
        </result-types>

        <action name="ExternalImageAction" class="leo.struts.ExternalImageAction">
            <result name="myImageResult" type="myBytesResult">
            </result>
        </action>
</package>
00:18:06.762    0.044   432 1258    GET 404 text/html (NS_ERROR_FAILURE)    http://localhost:8888/Struts2Whole/%3Cs:url%20action=%27ExternalImageAction%27%20/%3E
public String execute()
{
    System.out.println("execute of the ExternalImageAction...........");
    setContentType("jpg");
    setImageInBytes(getFileBytes("C:/Users/Joseph.M/Desktop/ocwcd5.jpg"));
    return "myImageResult";
}
public static  byte[] getFileBytes(String filePath)
{
    File file = new File(filePath);

    System.out.println("file : "+file.getName());
    byte[] b = new byte[(int) file.length()];
    try {
          FileInputStream fileInputStream = new FileInputStream(file);
          fileInputStream.read(b);
          for (int i = 0; i < b.length; i++) {
                      System.out.print((char)b[i]);
           }
          fileInputStream.close();
     } catch (FileNotFoundException e) {
                 System.out.println("File Not Found.");
                 e.printStackTrace();
     }
     catch (IOException e1) {
              System.out.println("Error Reading The File.");
               e1.printStackTrace();
     }        
    System.out.println("byes of image size : "+b.length);
    return b;
}
publicstringexecute()
{
System.out.println(“外部映像操作的执行…………”;
setContentType(“jpg”);
setImageInBytes(getFileBytes(“C:/Users/Joseph.M/Desktop/ocwcd5.jpg”);
返回“myImageResult”;
}
公共静态字节[]getFileBytes(字符串文件路径)
{
文件文件=新文件(文件路径);
System.out.println(“文件:“+file.getName());
字节[]b=新字节[(int)file.length()];
试一试{
FileInputStream FileInputStream=新的FileInputStream(文件);
fileInputStream.read(b);
for(int i=0;i
如果您将某个内容返回到
标记的
src
属性,它会认为这是一个URL,尝试打开它并收到
404 Not Found

由于返回的不是URL,而是字节数组中的实际图像,因此需要使用中定义的

假设结果只返回字节,则应将数据URI放入html中,如下所述:

否则,您可以在struts结果本身中返回完整的数据URI(必须包含Mime类型),并保持当前JSP不变


使用Apache Commons的
encodeBase64URLSafeString
byte[]
转换为Base64字符串,将其附加到类似
data:image/jpeg的字符串中;base64,
并返回它。

CustomeImageResult
发布一个代码。Hi@RomanC请检查更新的代码。Thnaks获得回复。在使用struts标记之前是否使用了JSP taglib指令?这里有很多错误,包括内容类型、使用JPG字节作为图像URL、内容类型等。