账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    javaweb的Filter的urlpatterns写/不起作用?
    480
    0

    我在写一个字符编码过滤器的时候,发现如果urlpatterns这个标签如果写的是/话,将不起作用,如下图:

    image.png

    只有改成/*才起作用。而且/真的就是不起作用,在设置为/时,通过控制台输出可以发现真的就是没走这个过滤器。

    我搜索过关于/和/的区别,说得都是servlet的情况,说是/不匹配.jsp,而/匹配.jsp,我感觉这个解释与我这个情况无关,因为本来过滤器也只是过滤请求。

    我想知道对于过滤器来说,/和/*到底是什么?/默认就是没有效果吗对于过滤器来说?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 开船4000米舔包 普通会员 1楼

      在Java Web项目中,urlpatterns是URL路由配置文件,用于定义URL映射规则,以指导服务器如何响应请求。如果你在urlpatterns中写了一个不正确的路径或路由,那么它可能会导致javax.servlet.ServletException: 404 Not Found错误,因为服务器无法找到指定的URL。

      以下是一个可能的urlpatterns配置示例,其中filter是过滤器类,urlpatterns中包含一个/filter路由:

      ```python from django.urls import path from . import views

      urlpatterns = [ path('', views.index, name='index'), path('filter//', views.filter, name='filter'), ] ```

      在这个例子中,/表示根URL,views.index表示主页视图,/filter/<int:filter_id>/表示过滤器的URL,views.filter表示过滤器视图,filter是过滤器类的名称。

      然而,如果你在filter视图中没有正确处理过滤器,或者使用了@requirement装饰器来检查过滤器是否存在,而没有将过滤器_id作为参数传递给/filter/<int:filter_id>/,那么在访问该URL时,服务器可能会抛出javax.servlet.ServletException: 404 Not Found错误。

      例如:

      ```python from django.urls import path from . import views

      urlpatterns = [ path('', views.index, name='index'), path('filter//', views.filter, name='filter'), @requirement('filter_id', 'required'), path('filter//', views.filter, name='filter'), ] ```

      在这个例子中,/filter/<int:filter_id>/中的<int:filter_id>需要是一个整数,required装饰器表示该过滤器需要提供一个唯一值,而filter类的方法需要接受这个值作为参数。因此,即使在filter视图中设置了@requirement装饰器,如果filter_idNone或一个不存在的整数,/filter/<int:filter_id>/将无法被访问,服务器会抛出404 Not Found错误。

      为了避免这个问题,你需要确保在filter视图中正确地设置@requirement装饰器,并将filter_id作为参数传递给/filter/<int:filter_id>/。例如:

      ```python from django.urls import path from . import views

      urlpatterns = [ path('', views.index, name='index'), path('filter//', views.filter, name='filter'), @requirement('filter_id', id='filter_id', required=True), path('filter//', views.filter, name='filter'), ] ```

      在这个例子中,filter_id是一个字符串,表示过滤器ID,id='filter_id'表示这个过滤器需要提供一个唯一的ID,required=True表示该过滤器需要提供一个唯一值。在filter视图中,@requirement装饰器会检查过滤器ID是否为'filter_id',如果是,那么/filter/<int:filter_id>/将被访问,否则会抛出404 Not Found错误。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部