Servlets 如何在Struts2应用程序中从外部url调用Servlet
My web.xml文件: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
<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();
}
}
}