Изменить загрузчик классов сервлета JSP (Jasper) - PullRequest
0 голосов
/ 31 марта 2011

То, чего я хочу добиться, - это прокси URI запроса и отрендерить другой файл JSP в зависимости от некоторых условий в сеансе пользователей запроса.

* 1003 Т.е. *

userA -> запрос: / enjcontainer automotive/index.jsp -> возврат: {viewA} /index.jsp

userB -> запрос: / enjcontainer automotive/index.jsp -> возврат: {viewB} /index.jsp

Фильтры сервлетов не имеют достаточного контроля, чтобы делать подобные вещи. Я бы подумал, что сработает переопределение URLClassLoader JSPServlet, чтобы я мог искать файл [в пользовательском загрузчике классов] для компиляции. Это возможно, или есть другой способ?

Я прочитал кое-что, что относится к тому, что я пытаюсь достигнуть, здесь: http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf pp 10, однако, на самом деле это не работает (расширение HttpJspBase ничего вам не дает).

Я попытался проиллюстрировать процесс на этом [довольно скудном] изображении:

http://80.68.91.73/pageflow.png

Я больше ищу рулевого управления в правильном направлении, чем полного решения. Проблема в том, что я не могу найти правильные ключевые слова, чтобы найти то, что я ищу!

Спасибо!

John

1 Ответ

0 голосов
/ 31 марта 2011

Это не совсем то, что вы просили, но рассматривали ли вы наличие только одного index.jsp и использовали ли тег forward для перенаправления запроса на разные подстраницы?

<% if(session.someCondition) { %>
  <jsp:forward page="index-version1.jsp"/>
<% } else { %>
  <jsp:forward page="index-version2.jsp"/>
<% } %>

Вы также можете переслать запрос из фильтра сервлетов, используя что-то вроде этого:

FilterConfig filterConfig;

public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
}

public void doFilter( ..) {

    filterConfig.getServletContext().getRequestDispatcher(<insert path to correct version of your page here>).forward(request, response);

}

Если вы не хотите, чтобы jsp-страницы были доступны напрямую, вы можетехранить их в разных подкаталогах ниже WEB-INF.Таким образом, вы можете переслать им, но они не могут быть доступны напрямую из Интернета.

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