BODY FORM ACTION http localhost 8080Lab 4Hidden Servlet
<BODY> <FORM ACTION = "http: //localhost: 8080/Lab 4/Hidden. Servlet" METHOD = POST > Username: <INPUT TYPE = TEXT NAME = "user" ><BR> Password: <INPUT TYPE = PASSWORD NAME = "password" ><BR> <INPUT TYPE = SUBMIT VALUE = "Login" > </FORM> Hidden. Servlet /* Получение параметров, связанных с пользователем (пароль и регистрационное имя) из объекта запроса */ String username = req. get. Parameter("user"); Print. Writer pw = res. get. Writer(); pw. println("Hello! click Submit to proceed"); pw. println("<Form name="login" action="http: //localhost: 8080/Lab 4/Second. Servlet">"); /* Добавление скрытого поля */ pw. println("<input type="hidden" name="uname" value=" + username + ">"); Веб-компоненты J 2 EE pw. println("<input type="Submit" value="Submit"></form>"); Уро к 2 A / Сла йд 9 из 28
Second. Servlet public void do. Post(Http. Servlet. Request req, Http. Servlet. Response res) throws Servlet. Exception, IOException { /* Получение параметров, связанных с именем пользователя в скрытом поле формы из объекта запроса. */ String uname = req. get. Parameter("uname"); Print. Writer pw = res. get. Writer(); pw. println("Hello! "+uname); } Веб-компоненты J 2 EE Уро к 2 A / Сла йд 10 из 28
Управление сеансом (Прод. ) String username = req. get. Parameter("user"); Print. Writer pw = res. get. Writer(); /* Verify the login status */ res. set. Content. Type("text/html"); pw. println("Hello! <a href="http: //localhost: 8080/Second. Servlet? user=" + username + ""> click here </a>to proceed"); ++++++++++++++++++++ public void do. Post(Http. Servlet. Request req, Http. Servlet. Response res) throws Servlet. Exception, IOException { /* Получение параметров, связанных с именем пользователя в скрытом поле формы из объекта запроса. */ String uname = req. get. Parameter("uname"); Print. Writer pw = res. get. Writer(); pw. println("Hello! "+uname); } // Second. Servlet Веб-компоненты J 2 EE Слайд 14
Управление сеансом(Прод. ) Примеры Cookies jsessionid=D 1 F 15245171203 E 8670487 F 020544490 user_id=87 email=jsmith@hotmail. com user. Name=jsmith password. Cookie=opensesame Веб-компоненты J 2 EE Уро к 2 A / Сла йд 16 из 28
Код создает и устанавливает cookie Cookie user. Id. Cookie = new Cookie("user. Id. Cookie", user. Id); user. Id. Cookie. set. Max. Age(60*60*24*365*2); //устанавливает возраст 2 года user. Id. Cookie. set. Path("/"); // разрешает доступ всему приложению response. add. Cookie(user. Id. Cookie); Код получает cookie Cookie[] cookies = request. get. Cookies(); String cookie. Name = "user. Id. Cookie"; String cookie. Value = ""; for (int i=0; i<cookies. length; i++) { Cookie cookie = cookies[i]; if (cookie. Name. equals(cookie. get. Name())) cookie. Value = cookie. get. Value(); } Веб-компоненты J 2 EE Уро к 2 A / Сла йд 19 из 28
Код сервлета, который удаляет все значения cookies Cookie[] cookies = request. get. Cookies(); for (int i=0; i<cookies. length; i++) { Cookie cookie = cookies[i]; cookie. set. Max. Age(0); //удаляет cookie. set. Path("/"); //разрешает всему приложению доступ к нему response. add. Cookie(cookie); } Уро Веб-компоненты J 2 EE к 2 A / Сла йд 20 из 28
Примеры работы с объектом session … Получение объекта session Http. Session session = request. get. Session(); Установка объекта String в качестве атрибута session. set. Attribute("product. Code", product. Code); Установка произвольного объекта как атрибута Cart cart = new Cart(product. Code); session. set. Attribute("cart", cart); Получение объекта String product. Code = (String) session. get. Attribute("product. Code"); Получение произвольного объекта Cart cart = (Cart) session. get. Attribute("cart"); Уро if (cart == null) cart = new Cart(); к 2 A / Удаление объекта сессии Сла йд 27 session. remove. Attribute("product. Code"); Веб-компоненты J 2 EE из 28
Метод encode. URL(String url) Возвращает строку специальной URL. Если необходимо, то этот метод кодирует session ID в URL. Если нет, то возвращается неизмененный URL. How to encode a URL in a Form tag <form action="<%=response. encode. URL("cart")%>" method="post"> How to encode a URL in an A tag <a href="<%=response. encode. URL("cart? product. Code= 8601")%>"> Уро к 2 A / Add To Cart Сла йд </a> 31 Веб-компоненты J 2 EE из 28
esponse 1 HTTP/1. 1 302 Moved Temporarily Location: https: //www. example. com/support/login Set-Cookie: JSESSIONID=NRxcl. Gg 2 v. G 7 k. I 4 Mdl. Ln; Domain=. example. com; Path=/; Http. Only HTTP/1. 1 302 Moved Temporarily Location: https: //www. example. com/support/login; JSESSIONID=NRxcl. Gg 2 v. G 7 k. I 4 Mdl. Ln Request 2 GET /support/login; JSESSIONID=NRxcl. Gg 2 v. G 7 k. I 4 Mdl. Ln HTTP/1. 1 Host: www. example. com Веб-компоненты J 2 EE Уро к 2 A / Сла йд 32 из 28
Фрагмент кода public void do. Post (Http. Servlet. Request request, Http. Servlet. Response response) { Print. Writer pw=null; try { pw= response. get. Writer (); pw. println (“This page is going to give an Error”); response. send. Error (Http. Servlet. Response. SC_NOT_FOUND, ”Sorry the source you have requested is not available. ”); /* Не пытайтесь записывать что-либо в буфер ответа после вызова метода send. Error(). */ } catch(Exception ex) { pw. println(ex. print. Stack. Trace()); } } Веб-компоненты J 2 EE Слайд
Фрагмент кода public void do. Post (Http. Servlet. Request request, Http. Servlet. Response response) { Print. Writer pw = null; try { pw=response. get. Writer(); pw. println(“This page is going to display a status code”); response. set. Status (Http. Servlet. Response. SC_GONE); // Вы можете писать в ответ после вызова set. Status (). } catch(Exception ex) { pw. println(ex. print. Stack. Trace(); } } Веб-компоненты J 2 EE Слайд 44
Взаимодействие сервлетов (Прод. ) • Объект Request. Dispatcher используется для включения содержания другого сервлета. Интерфейс Request. Dispatcher предоставляет для этого метод include(). public class Copyright. Servlet extends Http. Servlet { public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { Print. Writer pw = response. get. Writer(); pw. println("Copyright 2000 -2004 ABC, …. . Reserved. <BR>"); }} +++++++Include. Servlet ++++++++++++++ public class Include. Servlet extends Http. Servlet { public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response)throws Servlet. Exception, IOException { /*Получение объекта Request. Dispatcher */ Request. Dispatcher dispatch = get. Servlet. Context(). get. Request. Dispatcher(“/Copyright. Servlet"); Print. Writer pw = response. get. Writer(); pw. println("<B> The copyright information included from copyright servlet: </B><BR>"); /*использование метода include() в Request. Dispatcher для включения */ dispatch. include(request, response); } } Веб-компоненты J 2 EE Слайд 51
Взаимодействие сервлетов (Прод. ) • Объект Request. Dispatcher используется для передачи (Forwarding) запросов другим сервлетам приложении. public void do. Get(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { String request. Type=request. get. Parameter("Type"); if(request. Type. equals("hotel")) { /*Получение объекта Request. Dispatcher */ Request. Dispatcher dispatch = get. Servlet. Context(). get. Request. Dispatcher(“/Hotel. Information"); /*Использование метода forward() объекта Request. Dispatcher для передачи запроса*/ dispatch. forward(request, response); } if(request. Type. equals("cab")) { /*Получение объекта Request. Dispatcher */ Request. Dispatcher dispatch = get. Servlet. Context(). get. Request. Dispatcher(“/Cab. Information"); /*Использование метода forward() объекта Request. Dispatcher для передачи запроса*/ dispatch. forward(request, response); } if(request. Type. equals("flight")) Веб-компоненты J 2 EE {…. . Слайд 52 }
Пример передачи данных Calculator. Servlet выполняет арифметические вычисления. /*Получение чисел, введенных в HTML-форме*/ int num 1=Integer. parse. Int(request. get. Parameter("num 1")); int num 2=Integer. parse. Int(request. get. Parameter("num 2")); /*Нахождение суммы введенных чисел. */ int result=num 1+num 2; /*Запись результата в атрибут объекта запроса*/ request. set. Attribute("result", new Integer(result)); /*Получение объекта Servlet. Context*/ Servlet. Context contx=get. Servlet. Config(). get. Servlet. Context(); /*Получение объекта Request. Dispatcher*/ Request. Dispatcher req. Dispatcher=contx. get. Request. Dispatcher ("/Display. Servlet"); /*Передача запроса*/ req. Dispatcher. forward(request, response); Веб-компоненты J 2 EE
- Slides: 57