Как динамически изменять URL-адрес между contextPath и servletPath, pathInfo и т. Д. [Duplicate]

Преобразование в datetime64[D]:

df.dates.values.astype('M8[D]')

Хотя повторное назначение этого в DataFrame col вернет его обратно к [ns].

Если вы действительно хотите datetime.date:

dt = pd.DatetimeIndex(df.dates)
dates = np.array([datetime.date(*date_tuple) for date_tuple in zip(dt.year, dt.month, dt.day)])
168
задан Java_User 29 June 2014 в 07:27
поделиться

4 ответа

  1. Внедрить javax.servlet.Filter .
  2. В методе doFilter() введите входящий ServletRequest to HttpServletRequest .
  3. Используйте HttpServletRequest#getRequestURI() , чтобы захватить путь.
  4. Используйте прямое java.lang.String , такие как substring() , split() , concat() и т. д., чтобы извлечь часть интереса и составить новый путь.
  5. Используйте либо ServletRequest#getRequestDispatcher() , а затем RequestDispatcher#forward() , чтобы перенаправить запрос / ответ на новый URL-адрес (перенаправление на стороне сервера , не отражается в адресной строке браузера), или передайте входящий ServletResponse в HttpServletResponse , а затем HttpServletResponse#sendRedirect() , чтобы перенаправить ответ к новому URL-адресу (переадресация на стороне клиента, отображаемая в адресной строке браузера).
  6. Зарегистрируйте фильтр в web.xml на url-pattern в /* или /Check_License/*, в зависимости от пути контекста, или если вы уже на Servlet 3.0, используйте вместо него @WebFilter .

Не забудьте добавить проверку кода, если для URL необходимо изменить , и если нет t , а затем просто вызовите FilterChain#doFilter() , иначе он будет вызывать себя в бесконечном цикле.

В качестве альтернативы вы также можете просто использовать существующий сторонний API для выполнения вся работа для вас, такая как UrlRewriteFilter Tuckey , который можно настроить так же, как и с mod_rewrite Apache.

256
ответ дан BalusC 22 August 2018 в 13:50
поделиться
  • 1
    Какой-нибудь код doFilter () где-нибудь, что делает выше? Благодарю. – Frank 27 April 2010 в 22:21
  • 2
    На каком шаге вы точно застряли? Мой ответ почти сам пишет код. Вы также заметили, что ссылки на код в синем являются ссылками на Javadocs, которые подробно описывают поведение класса / метода? В любом случае вы можете найти здесь здесь и здесь хорошие обучающие программы JSP / Servlet, в частности этот для фильтров. – BalusC 27 April 2010 в 22:26
  • 3
    @Kumar: просто нажмите & Задать вопрос & quot; на правом верхнем углу. – BalusC 30 September 2013 в 12:23
  • 4
    Я полагаю, что это правильно, но если фильтр является одним из первых в цепочке, а RequestDispatcher#forward() выполняется, остальные фильтры не будут выполнены. Значит, не лучший способ сделать это как сервлет? – lucasvc 17 January 2014 в 10:32
  • 5
    @datakey: просто измените порядок заказа или добавьте <dispatcher>FORWARD</dispatcher> для фильтрации отображения. – BalusC 17 January 2014 в 12:23

Простой фильтр JSF Url Prettyfier, основанный на шагах ответа BalusC . Фильтр пересылает все запросы, начинающиеся с пути / ui (предположим, что у вас есть все ваши файлы xhtml, хранящиеся там) по одному и тому же пути, но добавляя суффикс xhtml.

public class UrlPrettyfierFilter implements Filter {

    private static final String JSF_VIEW_ROOT_PATH = "/ui";

    private static final String JSF_VIEW_SUFFIX = ".xhtml";

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
        String requestURI = httpServletRequest.getRequestURI();
        //Only process the paths starting with /ui, so as other requests get unprocessed. 
        //You can register the filter itself for /ui/* only, too
        if (requestURI.startsWith(JSF_VIEW_ROOT_PATH) 
                && !requestURI.contains(JSF_VIEW_SUFFIX)) {
            request.getRequestDispatcher(requestURI.concat(JSF_VIEW_SUFFIX))
                .forward(request,response);
        } else {
            chain.doFilter(httpServletRequest, response);
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }

}
3
ответ дан Community 22 August 2018 в 13:50
поделиться

Обратите внимание, что если ваш исходный URL содержит параметры, то есть http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123 ? param1 = A & amp; param2 = B, то эти параметры также будут перенаправлены на следующий сервлет / jsp. Я не нашел способ избавиться от исходных параметров или заменить их (только с помощью HttpServletRequestWrapper). Любые идеи? ..

Обновление: кажется, что http://ocpsoft.org/opensource/how-to-safely-add-modify-servlet-request-parameter-values/ решает эту проблему.

2
ответ дан Lopotun 22 August 2018 в 13:50
поделиться

Вы можете использовать готовый для использования Url Rewrite Filter с правилом, подобным этому:

<rule>
  <from>^/Check_License/Dir_My_App/Dir_ABC/My_Obj_([0-9]+)$</from>
  <to>/Check_License?Contact_Id=My_Obj_$1</to>
</rule>

Проверьте еще несколько примеров . .. примеры.

19
ответ дан Pascal Thivent 22 August 2018 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: