Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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
Java 如何制作过滤器来检测用户是否请求了未找到的页面?_Java_Servlets_Jakarta Ee_Servlet Filters - Fatal编程技术网

Java 如何制作过滤器来检测用户是否请求了未找到的页面?

Java 如何制作过滤器来检测用户是否请求了未找到的页面?,java,servlets,jakarta-ee,servlet-filters,Java,Servlets,Jakarta Ee,Servlet Filters,我想在我的应用程序中创建一个过滤器,以便在每次请求之前,它检测请求的页面是否存在。如果它不存在,它会将用户转发到错误页面 如何检测页面是否存在 我需要一个带有过滤器且不使用web.xml标记方法的解决方案。您可以在web.xml中直接配置它 <error-page> <error-code>404</error-code> <location>/yourCustom404.jsp</location> </error-

我想在我的应用程序中创建一个过滤器,以便在每次请求之前,它检测请求的页面是否存在。如果它不存在,它会将用户转发到错误页面

如何检测页面是否存在


我需要一个带有过滤器且不使用web.xml标记方法的解决方案。

您可以在web.xml中直接配置它

<error-page>
   <error-code>404</error-code>
   <location>/yourCustom404.jsp</location>
</error-page>

404
/yourCustom404.jsp
或 创建一个过滤器并
使用编程方式检测页面是否存在。

如果您没有身份验证,可以

  • 制作一个
    过滤器
  • 使用并覆盖
    发送错误()
    设置状态()
  • 将包装好的响应传递给chain.doFilter(req,wrapper)
  • 如果您的包装中有一个
    sendError()
    ,请查看它是否是404
  • 采取适当的应对措施
  • 您可能还必须重写
    getOutputStream()
    getWriter()
    ,以避免在您有机会做一些事情之前将响应刷新到客户端。

    “页面存在”并不是一件小事。页面不需要作为文件物理存在


    除了org.life.java提到的使用
    HttpURLConnection
    模拟请求的选项外,您还可以创建一个
    HttpServletResponseWrapper
    ,覆盖
    setStatus
    方法,并且无论何时将其设置为
    404
    ,都可以采取额外的措施。

    我已经知道这个简单的解决方案,我想问题很清楚,我必须用过滤器来解决这个问题。但是,你为什么要用过滤器来解决这个问题呢?问题就在这里:我不能用两种不同模式的解决方案,一种是安全模式,另一种是匿名模式,所以我想过滤器在这里可能有用,你认为呢?那么你是否涉及到身份验证(这会使事情复杂化)?您认为Bozho的解决方案怎么样?我想它相当不错。我想
    HttpURLConnection
    的工作原理类似于
    http://foo/some/stuff
    -被筛选器截获,为
    http://foo/some/stuff?disableFilter=true
    -过滤器允许这一个通过。这取决于情况-此解决方案将创建许多额外的套接字,因此根据负载可能不是很好(HttpURLConnection不能保持活动状态,因此如果负载较高,则会导致许多套接字处于关闭状态等待)。@Swarm,@bozho:使用
    HttpURLConnection
    只会导致过滤器中出现无限循环,因为将再次调用相同的筛选器。。。您需要在请求URL中添加一些参数,并让筛选器对其进行拦截,以避免再次调用
    HttpURLConnection
    。@BalusC请看我的答复。。。注意
    ?disableFilter=true