Почему добавление filter в web. xml вызывает ошибку 404? - PullRequest
0 голосов
/ 05 мая 2020

Чтобы изучить / попрактиковаться в использовании struts 2, я использую архетип maven struts2-archetype-starter.

Я столкнулся с проблемой при попытке добавить свой собственный фильтр и надеялся, что кто-то может указать мне правильное направление.

Я использую eclipse с maven для своего процесса сборки, а Tomcat 8.5 в качестве локального сервера.

Мне удалось настроить некоторые базовые c действия. Теперь я пытаюсь добавить фильтр, чтобы установить кодировку запросов, чтобы я мог обрабатывать ввод на японском языке. Для этого я сослался на этот ресурс о фильтрах, чтобы создать свой собственный фильтр, на который я ссылаюсь в Интернете. xml файл моего проекта

Справочный источник по фильтрам: https://www.oracle.com/java/technologies/filters.html

Однако, когда я пытаюсь получить доступ к URL-адресу своего проекта, я получаю ошибку 404.

Я пробовал добавлять точки останова в свой фильтр и отлаживать проект на сервере, но точка останова никогда не попадает. (В противном случае я могу отлаживать и использовать точки останова)

В мой файл xml Я добавил объявление фильтра:

    <filter>
        <filter-name>MyEncoder</filter-name>
<filter-class>jono_group.mav_arch_2.filters.MyChaEnFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>Shift_JIS</param-value>
        </init-param>
    </filter>

и это сопоставление фильтра

    <filter-mapping>
        <filter-name>MyEncoder</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Они располагаются перед всеми другими фильтрами и сопоставлениями фильтров, соответственно, с намерением, чтобы они выполнялись в начале цепочки фильтров.

С указанным выше фильтром и сопоставлением фильтров, maven build (чистый пакет работает успешно, ошибок нет. Но я получаю 404. Как только я удалю их обе, ошибка 404 исчезнет, ​​и мои действия будут работать должным образом.

Любая помощь будет очень оценен.

Мой класс фильтра следующий:

package jono_group.mav_arch_2.filters;

import java.io.IOException;
import java.nio.file.DirectoryStream.Filter;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyChaEnFilter implements Filter
{

    private FilterConfig filterConfig = null;
    private String encoding;

    public void doFilter(ServletRequest request,
    ServletResponse response, FilterChain chain) throws
    IOException, ServletException {
        String encoding = selectEncoding(request);
        if (encoding != null)
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws
    ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
    }

    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }

    public void destroy() {
        this.filterConfig = null;
    }

    @Override
    public boolean accept(Object entry) throws IOException {
        // TODO Auto-generated method stub
        return false;
    }
}

1 Ответ

1 голос
/ 05 мая 2020

import java.nio.file.DirectoryStream.Filter не является фильтром сервлета.

Из предоставленной вами ссылки, в частности из раздела Programming Filters :

API фильтра определяется интерфейсами Filter, FilterChain и FilterConfig в пакете javax.servlet.

FilterChain и FilterConfig импортируются правильно, Filter не так много.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...