Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлет. Получение данных. / 9 сообщений из 9, страница 1 из 1
07.10.2014, 16:20
    #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
07.10.2014, 16:24
    #38769338
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Наверное, потому что во втором случае объект создан не Спрингом.
...
Рейтинг: 0 / 0
07.10.2014, 16:29
    #38769350
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Сессия - аттрибут запроса, а не сервлета.
Я бы начинал от этой печки.
...
Рейтинг: 0 / 0
07.10.2014, 16:30
    #38769355
wvetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Alexander A. SakНаверное, потому что во втором случае объект создан не Спрингом.Имеется ввиду accountService?
Тогда как его создать Спрингом во втором случае? (Делаю же одинаково)
...
Рейтинг: 0 / 0
07.10.2014, 16:33
    #38769361
wvetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Basil A. SidorovСессия - аттрибут запроса, а не сервлета.
Я бы начинал от этой печки.То есть в сервлете нужно получить сессию?
...
Рейтинг: 0 / 0
07.10.2014, 16:36
    #38769366
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Получить - не проблема. Это делается вашим кодом.
Проблема - пробросить вашему коду HttpServletRequest из которого может быть получена сессия.
...
Рейтинг: 0 / 0
07.10.2014, 16:40
    #38769373
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
Basil A. SidorovПроблема - пробросить вашему коду HttpServletRequest из которого может быть получена сессия.Я, пожалуй, неправ.
Проблема, таки и вероятнее всего, в том, что вы пытаетесь идти в обход Spring.
...
Рейтинг: 0 / 0
07.10.2014, 16:44
    #38769381
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлет. Получение данных.
А я вот понимаю так.
AccountsServlet создается контейнером сервлетов ==> никаких @Autowired не обрабатывается ==> accountService==null.

Как инициализировать accountService? По-старинке, ручками, наверное. Раз уж за голый сервлет взялся. Еще можно получить AppicationContext через RequestContextUtils и добраться до уже инициализированного экземпляра AccountService.
...
Рейтинг: 0 / 0
07.10.2014, 17:17
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлет. Получение данных. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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