小编Bas*_*har的帖子

Servlet 映射:是否可以在运行时添加 Servlet 映射?

是否可以在运行时添加 servlet 映射?通过ContextListenerServlet 的方法还是在 Servlet 的方法中init()

在我使用的应用程序中,所有请求都通过单个 Servlet 处理,并且它们的映射在web.xml文件中定义。映射的数量正在增加,添加新的映射需要新的版本。

将 servlet 映射到/*将不起作用,因为分派到JSP 的请求和静态内容也会路由到此 Servlet。

尽管如此,使用过滤器可能是一种选择,它会增加过滤器的要求,以了解 RequestDispatcher 的前缀路径。

例如:

调度程序 Servlet 映射

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/action/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

路由过滤器定义

<filter>
    <filter-name>RoutingFilter</filter-name>
    <filter-class>com.ssv.web.filter.RoutingFilter</filter-class>
    <init-param>
        <param-name>exclude</param-name>
        <param-value>/static/**:/action/**:/**/*.jsp</param-value>
    </init-param>
    <init-param>
        <param-name>dispatcher-prefix</param-name>
        <param-value>/action/**</param-value>
    </init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我想跳过创建过滤器、过滤器映射和 servlet 映射,而是在ContextListener.

我正在使用汤姆猫。

java tomcat servlets

5
推荐指数
1
解决办法
6131
查看次数

Servlet过滤器:在没有servlet映射时进行搜索

我想在遇到404时进行搜索.例如,用户想查看有意大利菜的餐馆,他们会去www.mywebsite.com/italian,所以我想添加一个过滤器,首先检查404是否已经过抛出,如果是这样,尝试搜索搜索项列表,如果存在匹配,则向该页面转发请求而不是抛出404错误.

例:

www.mywebsite.com/italian  --> www.mywebsite.com/search.do?cuisine=italian
www.mywebsite.com/london   --> www.mywebsite.com/search.do?city=london 
www.mywebsite.com/rest     --> www.mywebsite.com/show.do?rest_id=XXX
Run Code Online (Sandbox Code Playgroud)

我想这个问题是我会怎样确定是否存在不存在与servlet url-mapping "/italian""/italian/*"我的服务器配置中的?

使用(在Filter.doFilter中)request.getRequestDispatcher(request.getRequestURI())始终返回一个非空值,我无法用它来确定请求是否有效.我可以使用404错误语句,但结果的响应状态为404而不是200.

java servlets servlet-filters

2
推荐指数
1
解决办法
1412
查看次数

标签 统计

java ×2

servlets ×2

servlet-filters ×1

tomcat ×1