powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлет. Получение данных.
9 сообщений из 9, страница 1 из 1
Сервлет. Получение данных.
    #38769329
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то делаю не правильно. Помогите разобраться.

Есть сервлет, который должен получить данные.
Вообщем приведу код:

AccountDaoImpl.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Repository
public class AccountDaoImpl implements AccountDao {
	@Autowired
	private SessionFactory session;

	@Override
	public List getAllAccounts() {
		return session.getCurrentSession().createQuery("from Account").list(); //здесь возвращается все правильно
	}

}


AccountServiceImpl.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Service
public class AccountServiceImpl implements AccountService {
	@Autowired
	private AccountDao accountDao;

	@Transactional
	public List getAllAccounts() {
		return accountDao.getAllAccounts();
	}
	
}


Когда хочу получить данные в контроллере, то все работает.
ViewResultsController.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Controller
public class ViewResultsController {
	@Autowired
	private AccountService accountService;

	@RequestMapping(value="/viewResults", method=RequestMethod.POST)
        public String setupForm(@ModelAttribute SearchParams searchParams, Map<String, Object> map) {

		map.put("searchParams", searchParams);
		map.put("accountList", accountService.getAllAccounts()); //здесь все работает
		accountService.getAllAccounts(); //здесь все работает
        
        return "viewResults";
    }	
}


А теперь хочу вынести получение данных отдельно в сервлет, но что-то не работает.
AccountsServlet.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@WebServlet("/AccountsServlet")
public class AccountsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private AccountService accountService;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			
		PrintWriter out = response.getWriter();			
		accountService.getAllAccounts(); //вот здесь не срабатывает, java.lang.NullPointerException	
		out.print("ok");
	}
}


Что я делаю не правильно?
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769338
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, потому что во втором случае объект создан не Спрингом.
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769350
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сессия - аттрибут запроса, а не сервлета.
Я бы начинал от этой печки.
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769355
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander A. SakНаверное, потому что во втором случае объект создан не Спрингом.Имеется ввиду accountService?
Тогда как его создать Спрингом во втором случае? (Делаю же одинаково)
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769361
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovСессия - аттрибут запроса, а не сервлета.
Я бы начинал от этой печки.То есть в сервлете нужно получить сессию?
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769366
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получить - не проблема. Это делается вашим кодом.
Проблема - пробросить вашему коду HttpServletRequest из которого может быть получена сессия.
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769373
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПроблема - пробросить вашему коду HttpServletRequest из которого может быть получена сессия.Я, пожалуй, неправ.
Проблема, таки и вероятнее всего, в том, что вы пытаетесь идти в обход Spring.
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769381
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я вот понимаю так.
AccountsServlet создается контейнером сервлетов ==> никаких @Autowired не обрабатывается ==> accountService==null.

Как инициализировать accountService? По-старинке, ручками, наверное. Раз уж за голый сервлет взялся. Еще можно получить AppicationContext через RequestContextUtils и добраться до уже инициализированного экземпляра AccountService.
...
Рейтинг: 0 / 0
Сервлет. Получение данных.
    #38769418
wvetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander A. Sak, Basil A. Sidorov,
Cпасибо за помощь(подсказки).

Вот решил этот вопрос так:
AccountsServlet.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@WebServlet("/AccountsServlet")
public class AccountsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private AccountService accountService;
		
	public void init(ServletConfig config) throws ServletException {
	    super.init(config);
	    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
	      config.getServletContext());
	  }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			
		PrintWriter out = response.getWriter();
		accountService.getAllAccounts();	
		out.print("ok");
			
	}


Решение нашел здесь
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлет. Получение данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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