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
deyan.zhekov avatar deyan.zhekov 159 Точки

Здравей,

това, което се опитваш няма как да стане :)

Сървлета се инстанцира и управлява от web container-a на сървъра. Твоя инстанция не би имала нищо общо с инстанцията, която се използва за обработка на request-а.

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

По-правилния вариант е да ползваш EJB, което да Inject-неш в servlet-а и да извикваш неговите методи. По този начин няма да правиш инстанция на обикновения клас при всяко зареждане и ще можеш да ползваш член-променливи.

3
naskoni avatar naskoni 68 Точки

Точно затова, трябва да започнем с цялата бизнес логика в EJB, без да мислим за GUI - така няма да се обвържем по никакъв начин. Тестването на кода трябва да става с юнит тестове, а още по-добре е да започнем първо с тях (Test Driven Development). Чак когато имаме готова операция, можем да и направим GUI и по този начин избягваме грешката да имаме част от бизнес логиката в самия GUI. И като резултат ще имаме независима бизнес част, на която винаги ще можем да сменим GUI framework-a.

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