Я хотел бы упростить URL-адреса для доступа к приложению Glassfish V3, удалив расширения файлов и иным образом сократив URL-адреса.
Я уже установил свое приложение как приложение по умолчанию, так что нет необходимости включать корень контекста в URL.
Я бы хотел:
* Удалить расширения файлов
* Сократите URL-адрес до файлов глубоко в структуре папок
Я бы хотел сделать это с использованием сопоставления с образцом, а не для отдельных файлов (в настоящее время сайт небольшой, но он будет часто меняться и расти).
Некоторые примеры того, что я хотел бы сделать:
* foo.com/bar.html -> foo.com/bar
* foo.com/folder1/folder2/bar2.html -> foo.com/bar2
Любая помощь будет принята с благодарностью. Спасибо.
Привет,
Джин
Взято из http://www.sun.com/bigadmin/sundocs/articles/urlrdn.jsp похоже, это то, что вы ищете.
Перенаправление URL в домене
Вы можете использовать элемент url-prefix свойства redirect_, чтобы перенаправить URL-адрес на другой URL-адрес в том же домене.
Следующая процедура показывает, как разрешить посетителям веб-сайта вводить текст http://www.mywebsite.com/myproduct1 и будут перенаправлены или перенаправлены на http://www.mywebsite.com/mywarname/products/myproduct1.jsp.
Разверните узел конфигурации сервера.
Игнорируйте этот шаг, если вы используете домен разработчика (домен, не имеющий возможности кластеризации).
Разверните HTTP-сервис.
redirect_1
.Если вы используете Application Server 9.0, введите from=/<context-root>/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jsp
в столбце Значение.
Заметка - Ценность <context-root>
указанное здесь значение должно соответствовать значению корневого контекста, указанному в файле web.xml или application.xml.
Если вы используете Application Server 9.1, введите from=/myproduct1 url-prefix=/mywarname/mypages/products/myproduct1.jsp
в столбце Значение.
В этом случае вы должны написать реализацию javax.servlet.Filter, которая распознает сокращенные URL-адреса и перенаправляет запросы реальной цели.
/**
*
* @author vrg
*/
@WebFilter(filterName = "SimplifiedUrlRequestDispatcher", urlPatterns = {"/*"})
public class ShortenedUrlRequestDispatcher implements javax.servlet.Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//reading configuration from filterConfig
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String shortURI = httpRequest.getRequestURI();
String realURI = getRealURI(shortURI);
if (realURI == null) {
//in this case the filter should be transparent
chain.doFilter(request, response);
} else {
//forwarding request to the real URI:
RequestDispatcher rd = request.getRequestDispatcher(realURI);
rd.forward(request, response);
}
}
/**
* Calculates the real URI from the given URI if this is a shortened one,
* otherwise returns null.
* @param shortURI
* @return
*/
private String getRealURI(String shortURI) {
//TODO implement your own logic using regexp, or anything you like
return null;
}
@Override
public void destroy() {
}
}
привет! Отличный грунт, но еще одно - RequestDispatcher rd = request.getRequestDispatcher(realURI);
работает с путем к сервлету, получая URI с именем приложения, выдаст ошибку. так - req.getServletPath()
дает правильный путь без контекста, и диспетчер работает так, как должен.