Sin*_*son 4 java rest tomcat servlets
我有一个应用程序,使用该功能为带有某些错误状态代码(例如404)的html页面提供服务。但是,某些请求是诸如Restful服务或图像之类的东西,它们应该返回Restful服务提供的JSON,或者根本不返回任何内容。图片的大小写。我正在使用Tomcat作为servlet容器。
为了澄清起见,有几个servlet,其中一些服务于图像,而其他html,还有一个过滤器,它为用户可以配置的各种路径提供html。404状态通常是由于缺少映射到请求路径的过滤器或servlet所致。因此,错误页面功能方便为没有过滤器或servlet对其进行响应的路径提供响应。
所以我在web.xml中的内容是(忽略/和*之间的空格):
... several other mappings above
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/servlet/rest/ *</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ErrorPageServlet</servlet-name>
<url-pattern>/servlet/errorPage/ *</url-pattern>
</servlet-mapping>
...
<filter-mapping>
<!--This will serve content and not forward to the filter chain for certain paths-->
<filter-name>MainFilter</filter-name>
<url-pattern>/ *</url-pattern>
</filter-mapping>
...
<error-page>
<!--Page not found-->
<error-code>404</error-code>
<location>/servlet/errorPage/404</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
是否可以使错误页面servlet忽略某些请求,但在响应中提供html的请求呢?还是应该使用其他方法来传递错误页面?
为了澄清,我想要的是,如果有人GETs / foo(不存在)进入ErrorPageServlet,但是对于GET / servlet / rest / foo / bar返回404响应代码,则不会进入ErrorPageServlet。
我终于弄清楚了问题所在。宁静的服务正在呼叫HttpServletResponse.sendError()而不是HttpServletResponse.setStatus()。事实证明,两者之间存在巨大差异,只会sendError()导致使用servlet。
解决方案很简单,sendError()如果要让错误页面处理输出,请使用此方法,setStatus()如果要在当前servlet中写入输出,请使用此方法。
M S*_*ach -1
您可以通过简单的 web.xml 映射来实现它。例子是
<servlet>
<servlet-name>ExceptionServlet</servlet-name>
<servlet-class>examples.Exception</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExceptionServlet</servlet-name>
<url-pattern>/errorCodeRequest</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>JsonServlet</servlet-name>
<servlet-class>examples.JSON</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JsonServlet</servlet-name>
<url-pattern>/restRequest</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |