Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
Servlets 如何在Struts2应用程序中从外部url调用Servlet_Servlets_Struts2 - Fatal编程技术网

Servlets 如何在Struts2应用程序中从外部url调用Servlet

Servlets 如何在Struts2应用程序中从外部url调用Servlet,servlets,struts2,Servlets,Struts2,My web.xml文件: <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name

My web.xml文件:

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<servlet>
      <servlet-name>TestServlet</servlet-name>
      <servlet-class>com.app.servlets.TestServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
      <servlet-name>TestServlet</servlet-name>
      <url-pattern>/viewDoc/*</url-pattern>
  </servlet-mapping>
我的错误是:

HTTP状态500-

类型异常报告

信息

说明服务器遇到阻止它的内部错误 不履行这一要求

例外情况

java.lang.NullPointerException org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.dispatcher.serviceAction(dispatcher.java:501)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)

注意,根本原因的完整堆栈跟踪在Apache中可用 Tomcat/7.0.30日志。ApacheTomcat/7.0.30


请在这方面帮助我

可能的副本并不能解决我的问题。我的要求是:外部应用程序将访问我的Servlet以打开PDF文档。我可以使用普通的web应用程序来实现这一点,但对于Struts2,它当前给出了错误:404:404-没有为与上下文路径关联的名称空间[/]和操作名称[viewDoc]映射的操作。设置上述配置后,如果可以使用S2操作,为什么需要servlet?
struts.action.excludePattern
自版本
2.1.7
以来一直在S2中。您使用的是哪个S2版本?我们如何检查S2版本?我需要调用上面描述的Servlet。请帮助我是什么阻止您在操作中使用此代码而不是servlet?
package com.app.servlets;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        performTask(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
            IOException {
        performTask(request, response);
    }

    private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String accountNo = (String)request.getParameter("accountNo");
        System.out.println("accountNo: "+accountNo);
        response.setContentType("text/html;charset=UTF-8");
        ServletOutputStream  outs =  response.getOutputStream ();
        //---------------------------------------------------------------
        // Set the output data's mime type
        //---------------------------------------------------------------
        response.setContentType( "application/pdf" );  // MIME type for pdf doc
        //---------------------------------------------------------------
        // create an input stream from fileURL
        //---------------------------------------------------------------

        File file=new File("D:\\processFolder\\990000010-6422_02.PDF");


        //------------------------------------------------------------
        // Content-disposition header - don't open in browser and
        // set the "Save As..." filename.
        // *There is reportedly a bug in IE4.0 which  ignores this...
        //------------------------------------------------------------
        response.setHeader("Content-disposition", "inline; filename=" + "Example.pdf");

        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {

            InputStream isr = new FileInputStream(file);
            bis = new BufferedInputStream(isr);
            bos = new BufferedOutputStream(outs);
            byte[] buff = new byte[2048];
            int bytesRead;
            // Simple read/write loop.
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (Exception e) {
            System.out.println("Exception ----- Message ---" + e);
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }

    }

}