Сервлет или фильтр, который динамически отображает / xxx / yyy / zzz в класс XxxYyyZzz.java - PullRequest
1 голос
/ 25 января 2011

Я хочу написать сервлет или фильтр, который автоматически сопоставляет url / xxx / yyy / zzz с классом XxxYyyZzz.java.

Например, следующие URL будут привязаны к следующим классам Java:

/comment/add --> CommentAdd.java
/comment/delete --> CommentDelete.java
/comment/view --> CommentView.java
/search --> Search.java
/viewposts --> Viewposts.java

Кроме того, сервлет или фильтр должны соответствовать двум дополнительным требованиям:

  1. Сервлет или фильтр должны иметь отображение сервлета "/ *", мне не нужен префикс с несколькими сервлетами "/ comment / *", "/ search" и т. Д.

  2. Возможно, это сложно, но наличие сервлетного сопоставления / * не должно позволять переопределять обработку JSP. Это означает, что если класс не найден, он должен проверить, существует ли страница JSP, и запустить его.

Я хочу знать, как это можно сделать с помощью Servlet API. Пожалуйста, не отсылайте меня на какие-либо рамки, которые делают работу. Просто покажи мне код.

Классы, с которыми сопоставлены, будут следовать шаблону команды или могут быть подклассом HttpServlet. В обоих случаях должен существовать метод, такой как «execute (запрос HttpServletRequest и ответ HttpServletResponse)». Этот метод будет автоматически выполнен, как только будет получен доступ к URL-адресу, и выясняется, что класс java, возможно, использует один сервлет или фильтр.

Ответы [ 3 ]

2 голосов
/ 25 января 2011

Я не уверен, понял ли я, что вы имеете в виду.Если я сделал:

Вам не нужно ничего особенного, напишите один сервлет, сопоставленный с "/", чтобы он получил все.Проанализируйте PATH_INFO (теперь не знаю, как он вызывается в Java), используйте Class.forName (или используйте предварительно заполненную карту) и вызовите его метод execute.

0 голосов
/ 25 января 2011

Вы можете использовать Stripes Framework с его значением по умолчанию NameBasedActionResolver config .

0 голосов
/ 25 января 2011

Вот реализация фильтра http://www.tuckey.org/urlrewrite/, которая может вам помочь.Проверьте это.Я сам этим не пользовался.

...