0

My web.xml file:

<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>

My Servlet is:

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();
        }

    }

}

My Error is:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error that prevented it from fulfilling this request.

exception

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)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.30 logs. Apache Tomcat/7.0.30

Please help me on this

Yoh Deadfall
  • 2,711
  • 7
  • 28
  • 32
Shubhankar
  • 87
  • 3
  • 6
  • 16
  • possible duplicate of [Jersey with Struts2](http://stackoverflow.com/questions/17293115/jersey-with-struts2) – Aleksandr M Mar 24 '15 at 10:54
  • didn't solve my problem. My requirement is : an external application is going to access my Servlet to open PDF document. I am able to do this using normal web application, but with Struts2 it is currently giving error: 404 : 404 - There is no Action mapped for namespace [/] and action name [viewDoc] associated with context path. After setting the above configurations – Shubhankar Mar 24 '15 at 11:28
  • Why do you need a servlet if you can use S2 action? The `struts.action.excludePattern` is in S2 since version `2.1.7`. Which S2 version you are using? – Aleksandr M Mar 24 '15 at 11:33
  • How we can check S2 version? My Need to call Servlet I described above. Please help me – Shubhankar Mar 24 '15 at 11:39
  • What stops you from using this code in the action, instead of servlet? – Aleksandr M Mar 24 '15 at 11:41
  • But my init method of this Servlet is getting called while Server start up, then why not we will be calling doPost mtd of this servlet? – Shubhankar Mar 24 '15 at 11:44
  • I am new to Struts2. can u give me an example for this? – Shubhankar Mar 24 '15 at 12:03
  • http://struts.apache.org/docs/stream-result.html. – Aleksandr M Mar 24 '15 at 12:04
  • @Shubhankar because you mapped S2 filter on your servlet, and this filter doesn't allow to use it. – Roman C Mar 24 '15 at 12:07

0 Answers0