powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
11 сообщений из 11, страница 1 из 1
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37915540
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте, в общем есть , допустим 500 контроллеров. В коде у каждого контроллера,которые обрабатывают HTTP запросы,
нужно вставить идентичный кусок кода, например
Код: java
1.
System.out.println("Hellow world"),


но дописывать в каждый из этих контроллеров этот код не охота, пососветуйте пожалуйста может что-то можно переопределить и в этом переопределнном прописать

Код: java
1.
System.out.println("Hellow world").



Если есть возможность что-то переопределить,то подскажите что? Вариант с базовым контроллером неуместен. В общем если есть другое решение подскажите куда копать.
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37915552
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
откройте для себя AOP
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37915553
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
by the way, есть еще фильтры и интерсепторы
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37917052
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем было n-контроллеров

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Controller_1{
 @RequestMapping(..)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
  return "";
 }
}

class Controller_2{
 @RequestMapping(..)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
  return "";
 }
}



Нужно было добавить в тело функции помеченной аннотацией @RequestMapping(..) одно и тоже действие (работа с сессией и куками). Т.е. по сути такое


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class BaseController{
 protected void sessionCookieActions(HttpServletRequest req,HttpServletResponse response){
 }
}

class Controller_1 extends BaseController{
 @RequestMapping(..)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
 sessionCookieActions(req,response);
  return "";
 }
}

class Controller_2 extends BaseController{
 @RequestMapping(..)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
   sessionCookieActions(req,response);
  return "";
 }
}



Но писать так везде было в лом, хотя это очень наглядно. Воспользовался интерцептором
который определил в тэгах

Код: java
1.
<mvc:interceptors/>



В результате, когда захожу на страничку метод интерцептора

Код: java
1.
public boolean preHandle(..)



вызывается больше чем один раз, глянув в firebug , я увидел что вместе с запросом на страницу методом GET тянутся еще и стили,
картинки ,яваскрипты.

Так как метод public boolean preHandle(..) вызывается много раз при запросе одной страницы, то и код написанный в этом методе тоже вызывается многократно, в резльтате приложение начало заметно тормозить. Ну а так все работает!)
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919553
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я решил воспользоваться AOP

Итак вот что у меня вышло

Код контроллера
Код: java
1.
2.
3.
4.
5.
6.
7.
@Controller
public class Controller_1{
 @RequestMapping(method=RequestMethod.GET)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
  return "/form_1";
 }
}



Код аспекта
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@Aspect
public class TestAspect{
 
@Before("execution(* Controller_1.getForm(..))")
public void aspectActions(){
 System.out.println("THIS IS ASPECT");
}
}



Код отдельного файла содержащий аспекты (aspect.xml)
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<aop:aspectj-autoproxy />
<bean id="testAspect" class="aspects.TestAspect" />
</beans>



Часть web.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 <servlet>
        <servlet-name>spring/app</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring/app</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/app-servlet.xml,WEB-INF/spring/aspects.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>



В результате при запуске приложения и обращении к контроллеру, код аспекта никогда не выполняется. Помогите разрулить проблему.
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919563
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читайте внимательно логи. Ваш контроллер не реализует интерфейсов и в classpath, скорее всего, отсутствует CGLIB. Поэтому Spring не смог создать прокси для вашего контроллера.
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919578
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, ну допустим он реализует некий пустой интерфейс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public interface ControllerInterface{
}

@Controller
public class Controller_1 implements ControllerInterface{
 @RequestMapping(method=RequestMethod.GET)
 public String getForm(HttpServletRequest req,HttpServletResponse response){
  return "/form_1";
 }
}



Что нужно описать в контексте? И где читать эти логи?
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919597
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoderХорошо, ну допустим он реализует некий пустой интерфейс
Интерфейс не должен быть пустым. :) Разберитесь что такое прокси вообще. Что такое JDK Proxy и CGLIB Proxy в частости.

justcoderЧто нужно описать в контексте?
Вроде всё правильно, хотя в детали не вникал.

justcoderИ где читать эти логи?
Отличный вопрос. Где логи читать не знаем, но девелопим уже во всю. Как вы ошибки будете исправлять с таким подходом?
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919615
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ох-нно помог.
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919623
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justcoderОх-нно помог.
Мудохайся сам значит.
...
Рейтинг: 0 / 0
Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
    #37919628
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С такими помощниками как ты придется.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC общее действие для всех контроллеров. Теоретический вопрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]