Loading...
antonsgeorgiev avatar antonsgeorgiev 3 Точки

[Java Web Development] Passing data from Servlet to a normal java class

Привет,

 

Имам въпрос относно подаване на информация от сървлет към нормален джава клас.

Сценарият е следният:

Имам един сървлет в който взимам data от сесията - usernames, passwords etc.

Трябва ми по някакъв начин от този сървлет да подам като стринг текущия username например, към метод на нормален джава клас.

Пробрах да инстанцирам сървлета в класа и да викна get method който съм направил в сървлета, но очаквано - получавам Null стойност. :)

 

Ако някой има идея - нека споделя.

Поздрави!

 

Тагове:
0
Java Web Development
TodorovH avatar TodorovH 216 Точки

Пробва ли в нормалния клас да си инстанцираш request-а и оттам да си вземеш атрибута, който си сетнал в сесията?!

0
antonsgeorgiev avatar antonsgeorgiev 3 Точки

Проблемът е, че като инсанцирам HttpServletRequest и иска да предоставя имплементация на всичките методи...

0
TodorovH avatar TodorovH 216 Точки

В случая се изразих неправилно, не го инстанцираш, а го импортваш!  И после request.getSession().getAtribute("username");

Но най-добре да покажеш кода иначе стреляме напосока! :)

 

0
antonsgeorgiev avatar antonsgeorgiev 3 Точки

В сървлет класа имам следното:

 

@WebServlet("/DynamicServlet")
public class DynamicServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private String userName;
	private double deposit;
	private double withdraw;
	
	@EJB
	private ClientCreator client;
	

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Session created: " + request.getSession().getId());
		this.userName = request.getParameter("clientName");
		request.getSession().setAttribute("clientName", this.userName);
		this.deposit = Double.valueOf(request.getParameter("transactionAmount"));
		request.getSession().setAttribute("clientEquity", this.deposit);
		System.out.println("New Client created. Name: " + userName + " amount: " + deposit);
		Client currentClient = client.createAccount(userName, deposit);
		request.getSession().setAttribute("totalEquity", currentClient.calculateTotalEquity());
		
		response.sendRedirect("/HomeworkFour/pages/LoginSuccess.jsp");
	}

 

Java class-ът (това е класът който имплементира ejb interface-a) е следния метод:

@Stateful
public class ClientCreatorImpl implements ClientCreator {
	
	private static List<Client> clientsDatabase = new ArrayList<>();
	DynamicServlet servlet = new DynamicServlet();

	@Override
	public Client createAccount(String clientName, double deposit) {
		
		
		boolean clientExists = false;
		
		if (clientsDatabase.size() == 0) {
			System.out.println("Name from servlet: " + servlet.getUserName());
			clientsDatabase.add(new Client (servlet.getUserName(), deposit));
			clientExists = true;
		} else {
			
			for (Client client : clientsDatabase) {
				if (client.getClientName().equals(clientName)) {
					clientExists = true;
				}
			}
		}
		
		if (!clientExists) {
			clientsDatabase.add(new Client (servlet.getUserName(), deposit));
		}
		return this.getClientById(Client.getClientsCounter());
	}
	
	public Client getClientById(int clientId) {
		return (clientsDatabase.get(clientId-1));
	}

 

0
TodorovH avatar TodorovH 216 Точки

Според MVC модела, според който мисля, че трябва да се водим, а именно Model View Controller, модела,в случая javabean-а не трябва изобщо да има нещо общо с контролера! Не трябва да правиш инстанция на сервлета в javabean-а! Ако трябва да подаваш някакви данни на модела ги подавай чрез параметрите на метода и така кода ще е по-четим, че нещо се оплетох в кода, иска си бая дебъгване да се разбере как работи!

И внимавай къде инициализираш променливи, да не се ресетва, когато ти е нужно да си пази стойността! Мисля, че булевата променлива нещо бъгосва работата, но си трябва дебъгване както казах!

Гледайки кода все повече си мисля, че логиката влиза в някакъв цикъл, след всяко извикване и инстанциране на сервлета в javabean-а!

0
16/02/2016 15:39:08
antonsgeorgiev avatar antonsgeorgiev 3 Точки

Ще преструкторирам кода изцяло, благодаря за насоките. Ще пиша отново при евентуални проблеми. :)

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.