LXF90:JavaEE
|
|
|
[http://s1.shard.jp/losaul/picture-of-food.html cpi paper australia ] [http://s1.shard.jp/losaul/exchange-rate-australian.html hedge funds australia ] [http://s1.shard.jp/galeach/new100.html ductular hepatic hypoplasia syndromatic ] [http://s1.shard.jp/galeach/new170.html att calling card international prepaid asia ] [http://s1.shard.jp/bireba/download-norton.html uninstall norton antivirus corporate edition ] [http://s1.shard.jp/olharder/auto-escort-ford.html autobahn vw parts ] [http://s1.shard.jp/losaul/weight-loss-medication.html aboriginal australian picture ] [http://s1.shard.jp/galeach/new113.html asian babe cam hot web ] [http://s1.shard.jp/galeach/new57.html asian rainforests ] [http://s1.shard.jp/olharder/automotive-tool.html autotrader.co.ukwww. ] link [http://s1.shard.jp/losaul/murrays-buses.html australian manufacturing inc. ] [http://s1.shard.jp/olharder/automoveis-bmw.html auto cad viz ] [http://s1.shard.jp/bireba/download-symantec.html norton antivirus update crack ] elephants african link [http://s1.shard.jp/galeach/new186.html asian fever 12 ] [http://s1.shard.jp/losaul/australia-bus.html australian open competitors ] [http://s1.shard.jp/galeach/new47.html booking online airasia ] [http://s1.shard.jp/galeach/new184.html anastasia - bartok ] [http://s1.shard.jp/losaul/compare-flights.html australia craft supply ] download kaspersky antivirus file server version 5 [http://s1.shard.jp/olharder/jl-french-automotive.html a language for automation ] [http://s1.shard.jp/olharder/kurt-cobain-autograph.html lab automation career job ] [http://s1.shard.jp/losaul/06-australia.html physiotherapist jobs australia ] [http://s1.shard.jp/olharder/sunnyside-auto.html autoverhuur en language language malaga nl nl site ] [http://s1.shard.jp/olharder/automobile-dealer.html auto accident personal injury claims ] [http://s1.shard.jp/frhorton/77murrpay.html joberg south africa ] url [http://s1.shard.jp/bireba/quickheal-antivirus.html mdaemon antivirus ] [http://s1.shard.jp/olharder/autonomy-principal.html holzvergaser auto ] [http://s1.shard.jp/bireba/download-free.html grisoft antivirus ] [http://s1.shard.jp/galeach/new60.html asia holiday travel ] page [http://s1.shard.jp/losaul/emmigrating-australia.html state library of south australia ] [http://s1.shard.jp/frhorton/1euh2vemn.html timbavati south africa ] [http://s1.shard.jp/galeach/new51.html asian beaver mr.chews ] [http://s1.shard.jp/frhorton/9rxlvcl6n.html african men pics ] [http://s1.shard.jp/frhorton/lyfh4c7mt.html african american body image in woman ] webmap car importers australia [http://s1.shard.jp/bireba/microworld-antivirus.html antivirus software for server 2003 ] [http://s1.shard.jp/olharder/subasta-de-autos.html literary autobiography 1994 infant prodigy ] [http://s1.shard.jp/frhorton/vjlche4gq.html africa against aids current fight in news ] antivirus stop sign [http://s1.shard.jp/losaul/australian-landrover.html gun australia ] [http://s1.shard.jp/frhorton/xntk9qgnd.html medical association of south africa ] [http://s1.shard.jp/losaul/quiksilver-pro.html electoral role australia search ] [http://s1.shard.jp/losaul/ralph-lauren.html sydney australia phone directory ] Шаблон:Цикл/Java EE
ТелеÑÐ¾Ð½Ð½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°: пеÑÐµÑ Ð¾Ð´ на JSP
ЧÐСТЬ 2 ÐÑÑÑеÑаÑÑ Ð¿Ð¾ одежке â и ÐолÑÑой ÐоÑÑ Ð½Ðµ бÑл ÑилÑно впеÑаÑлен Ñозданной нами в пÑоÑлÑй Ñаз адÑеÑной книгой. ÐлекÑÐ°Ð½Ð´Ñ Ðабаев иÑпÑавлÑÐµÑ Ð·Ð°Ð¼ÐµÑеннÑе недоÑеÑÑ.
РпÑоÑлÑй Ñаз Ð¼Ñ Ñоздали пÑоÑÑейÑÑÑ ÑлекÑÑоннÑÑ Ð·Ð°Ð¿Ð¸ÑнÑÑ ÐºÐ½Ð¸Ð¶ÐºÑ. Ðна ÑабоÑÐ°ÐµÑ Ð² бÑаÑзеÑе и показÑÐ²Ð°ÐµÑ Ð½ÐµÑколÑко пÑоÑÑÑÑ ÑÑÑаниÑек, на коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑоÑмоÑÑеÑÑ ÑпиÑок конÑакÑов, добавиÑÑ Ð½Ð¾Ð²Ñй конÑакÑ, ÑдалиÑÑ ÐµÐ³Ð¾ или оÑÑедакÑиÑоваÑÑ. Ð ÑейÑÐ°Ñ Ð´Ð°Ð²Ð°Ð¹Ñе попÑобÑем ÑделаÑÑ Ð²Ñе ÑÑо более пÑавилÑно.
ÐоÑÐµÐ¼Ñ Ð±Ñло Ð¿Ð»Ð¾Ñ Ð¾?
ÐейÑÑвиÑелÑно, поÑемÑ? РабоÑаеÑ, и Ñ Ð¾ÑоÑо. ÐоÑÑаÑоÑно бÑÑÑÑо и не ÑлиÑком Ñложно. Ðо вдÑÑг Ð·Ð°Ñ Ð¾ÑеÑÑÑ Ð¿Ð¾Ð¼ÐµÐ½ÑÑÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ ÑÑÑаниÑек? Ð Ð·Ð°Ñ Ð¾ÑеÑÑÑ ÑеÑез деÑÑÑÑ Ð¼Ð¸Ð½ÑÑ ÑабоÑÑ. Ðли поÑле Ñого, как ÑÑÑаниÑÐºÑ Ð¿Ð¾ÑмоÑÑÐ¸Ñ Ð½Ð°ÑалÑник.
ЧÑÐ¾Ð±Ñ ÑделаÑÑ ÑÑо, можно измениÑÑ ÐºÐ¾Ð´ пÑоекÑа, поÑом пеÑекомпилиÑоваÑÑ ÐµÐ³Ð¾, оÑÑановиÑÑ ÑеÑÐ²ÐµÑ (Ð? ÐÑо-Ñо ÑабоÑал? ÐзвиниÑе...), ÑÑÑановиÑÑ Ð½Ð¾Ð²Ñй код и повÑоÑно запÑÑÑиÑÑ ÑеÑвеÑ. ÐеÑод, мÑгко говоÑÑ, неÑдобнÑй. Рможно измениÑÑ Ñам пÑÐ¾ÐµÐºÑ Ñак, ÑÑÐ¾Ð±Ñ Ð²Ñполнение ÑÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð¶ÐµÐ»Ð°Ð½Ð¸Ð¹ не ÑÑебовало ÑÑÐ¾Ð»Ñ ÑложнÑÑ Ð´ÐµÐ¹ÑÑвий. ÐÑоÑой пÑÑÑ Ð·Ð¾Ð²ÐµÑÑÑ ÑеÑакÑоÑингом и гоÑаздо более коÑÑекÑен. ÐÑли ÑазделиÑÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ и Ð»Ð¾Ð³Ð¸ÐºÑ ÑабоÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (бизнеÑ-логикÑ), Ñо в далÑнейÑем можно бÑдеÑ, напÑимеÑ, ÑазделиÑÑ Ð¸ ÑабоÑÑ Ð¿Ð¾ Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжаниÑ. ХоÑоÑий пÑогÑаммиÑÑ Ð½Ðµ вÑегда ÑÐ¾Ð·Ð´Ð°ÐµÑ Ñ Ð¾ÑоÑие полÑзоваÑелÑÑкие инÑеÑÑейÑÑ, поÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ñй аÑÐ¿ÐµÐºÑ Ñоже важен.
Ðак ÑделаÑÑ Ñ Ð¾ÑоÑо?
ÐÑ, вкÑаÑÑе Ñже понÑÑно. ÐÑжно вÑнеÑÑи в оÑделÑнÑе ÑÐ°Ð¹Ð»Ñ ÑÑ ÑаÑÑÑ, коÑоÑÐ°Ñ Ð¼ÐµÐ½ÑеÑÑÑ ÑаÑÑо (в наÑем ÑлÑÑае, ÑÑо инÑеÑÑейÑ) и как-Ñо подклÑÑиÑÑ ÑÑи ÑÐ°Ð¹Ð»Ñ Ð¸Ð· наÑей пÑогÑаммÑ. ÐлÑÑ, желаÑелÑно ÑделаÑÑ ÑÑо Ñак, ÑÑÐ¾Ð±Ñ ÑоÑÐ¼Ð°Ñ Ñайлов «дизайна» бÑл ÑÑандаÑÑнÑм, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ñй Ñаз не пеÑеÑÑиваÑÑÑÑ.
РеÑений Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво. РаÑÑмоÑÑим ÑамÑе ÑаÑпÑоÑÑÑаненнÑе:
- ШаблонÑ. Ðдна из ÑамÑÑ ÑаÑпÑоÑÑÑаненнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек ÑабоÑÑ Ñ Ñаблонами â Velocity. ÐÑи иÑполÑзовании ÑаблоннÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð² можно добавлÑÑÑ Ð² ÑекÑÑ ÑпеÑиалÑнÑе вÑÑавки, коÑоÑÑе говоÑÑÑ: «ТÑÑ Ð²ÑÑавиÑÑ Ð·Ð½Ð°Ñение пеÑеменной Name». Ðногда можно делаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе опеÑаÑии (вÑÑавка подÑаблонов, вÑÑиÑлениÑ, ÑÑловнÑе вÑÑавки).
- JSP (Java Server Pages). Ðо вÑемени поÑвлениÑ, пожалÑй, пеÑÐ²Ð°Ñ ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð´Ð»Ñ Ð¾ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð° Ð¾Ñ Ð±Ð¸Ð·Ð½ÐµÑ-логики. Ðо Ñ ÐµÐµ поÑÑавил вÑоÑой, Ñак как она Ñложнее, Ñем пÑоÑÑо ÑÐ°Ð±Ð»Ð¾Ð½Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека. JSP позволÑÐµÑ Ð²Ð½ÐµÐ´ÑиÑÑ ÐºÐ¾Ð´ на (по задÑмке) лÑбом ÑзÑке пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÑÑÑÑ ÑпеÑиалÑнÑм обÑазом Ñозданной ÑÑÑаниÑки. ÐпÑоÑем, обÑÑно иÑполÑзÑеÑÑÑ Java. ТеоÑеÑиÑеÑки, можно напиÑаÑÑ ÑеÑвеÑное пÑиложение, иÑполÑзÑÑ Ð¸ÑклÑÑиÑелÑно JSP. ÐÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ð¿Ð¾Ñ Ð¾Ð¶ на PHP, Ñ Ñем оÑлиÑием, ÑÑо JSP-ÑÑÑаниÑÑ â ÑÑо полноÑеннÑе ÑеÑвлеÑÑ, они компилиÑÑÑÑÑÑ Ð¿Ñи обновлении иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑекÑÑа и обÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº ÑаковÑе.
- JSF (Java Server Faces). РнекоÑоÑом Ñоде ÑÑа ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ð¾Ð±ÑединÑÐµÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´Ñ, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð¿Ñи Ñоздании «обÑÑнÑÑ Â» и «ÑеÑевÑÑ Â» пÑогÑамм. ÐнÑеÑÑÐµÐ¹Ñ (как дизайн инÑеÑÑейÑа, Ñак и его логика) пÑогÑÐ°Ð¼Ð¼Ñ Ð¾Ð¿Ð¸ÑÑваеÑÑÑ ÑпеÑиалÑнÑм обÑазом, а поÑле ÑÑого пиÑÑÑÑÑ JSP-ÑÑÑаниÑки, в коÑоÑÑÑ ÑказÑваеÑÑÑ Â«ÑÑÑ Ð²ÑÑавиÑÑ ÑаблиÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñаким-Ñо». JSF обÑабаÑÑÐ²Ð°ÐµÑ ÑÑи ÑпеÑвÑÑавки и «ÑиÑÑеÑ» ÑÑнкÑионалÑнÑе ÑлеменÑÑ Ð¸Ð½ÑеÑÑейÑа (обÑабаÑÑÐ²Ð°Ñ ÑобÑÑÐ¸Ñ Ð¾Ñ Ð½Ð¸Ñ Ð¸ Ñак далее), позволÑÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ÐµÑÑ ÑоÑÑедоÑоÑиÑÑÑÑ Ð½Ð° оÑÑалÑном.
- Google Web Toolkit. Ðе Ð¼Ð¾Ð³Ñ Ð½Ðµ оÑÑановиÑÑÑÑ Ð½Ð° ÑÑом ÑÑедÑÑве. ÐÑи его иÑполÑзовании на вÑÑ Ð¾Ð´Ðµ полÑÑаеÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñенное AJAX-пÑиложение (ÑÑо ÑÑо Ñакое â Ñема оÑделÑной ÑÑаÑÑи, пÑÐ¸Ð¼ÐµÑ â Google Mail), а на Ð²Ñ Ð¾Ð´Ðµ â вÑе ÑÐ¾Ñ Ð¶Ðµ Java-код. РеÑение инÑеÑеÑное, не лиÑенное ÑÐ²Ð¾Ð¸Ñ Ð´Ð¾ÑÑоинÑÑв и недоÑÑаÑков.
ÐÑ Ð¶Ðµ в ÑÐ°Ð¼ÐºÐ°Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑаÑÑи ÑаÑÑмоÑÑим «ÑÑедненÑкое» ÑеÑение â Java Server Pages. РоÑновном â из-за его ÑÑандаÑÑноÑÑи, Ñ Ð¾ÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ конкÑеÑного ÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вÑбÑаÑÑ ÐºÐ°ÐºÐ¾Ð¹-нибÑÐ´Ñ ÑаблоннÑй движок, напÑимеÑ, ÑÐ¾Ñ Ð¶Ðµ Velocity (http://velocity.apache.org).
ÐбÑÐ°Ñ ÑÑ ÐµÐ¼Ð° ÑабоÑÑ Ð¿ÑиложениÑ
ÐонÑв, ÑÑо нÑжно оÑделиÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ Ð¾Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ð°, давайÑе подÑмаем, каким обÑазом ÑÑо можно ÑделаÑÑ. ÐÑÐµÐ´Ð»Ð°Ð³Ð°Ñ Ð¾ÑÑановиÑÑÑÑ Ð½Ð° ÑледÑÑÑей ÑÑ ÐµÐ¼Ðµ - (РиÑ. 1).
СеÑÐ²Ð»ÐµÑ Ð²ÑÐ´Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñе, абÑолÑÑно не забоÑÑÑÑ Ð¾ Ñом, как они бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ. Ðо вÑÐ´Ð°ÐµÑ Ð¾Ð½ Ð¸Ñ Ð½Ðµ в «ÑÑÑом» виде, а в полноÑÑÑÑ Ð¾Ð±ÑабоÑанном, гоÑовом Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° ÑкÑане (напÑимеÑ, еÑли нÑжно полное Ð¸Ð¼Ñ Ñеловека, а в даннÑÑ â его ФÐРпо оÑделÑноÑÑи, Ñо ÑеÑÐ²Ð»ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑеобÑазоваÑÑ Ð²ÑоÑое в пеÑвое пеÑед пеÑедаÑей в JSP).
ÐÐ¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð²Ð¾Ð¿ÑоÑ: как же пеÑедаÑÑÑÑ Ð´Ð°Ð½Ð½Ñе Ð¾Ñ ÑеÑвлеÑа в JSP? ЧеÑез Ñже извеÑÑнÑй нам обÑÐµÐºÑ request. Ð Ð½ÐµÐ¼Ñ Â«Ð¿ÑикÑÑÑен» ÑпеÑиалÑнÑй аÑÑоÑиаÑивнÑй маÑÑив «String â Object», коÑоÑÑй назÑваеÑÑÑ Ð°ÑÑибÑÑами и коÑоÑÑй живеÑ, пока жив запÑоÑ. Ð Ð½ÐµÐ¼Ñ Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп и ÑеÑвлеÑ, и JSP-ÑÑÑаниÑа, поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ можно (и ÑÑо пÑавилÑно) иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿ÐµÑедаÑи даннÑÑ .
ÐеÑÐµÑ Ð¾Ð´Ð¸Ð¼ на Tomcat
Ðо ÑнаÑала нÑжно пеÑепиÑаÑÑ Ð½Ð°Ñ ÑеÑÐ²Ð»ÐµÑ Â«Ð¿Ð¾-взÑоÑломÑ». ÐÑÑÑоеннÑй ÑеÑÐ²ÐµÑ â ÑÑо замеÑаÑелÑно Ð´Ð»Ñ ÐºÑÑÑаÑнÑÑ Ð¿ÑоекÑов, но обÑÑно конÑÐµÐ¹Ð½ÐµÑ ÑеÑвлеÑов Ñже ÑÑоиÑ, и подклÑÑаÑÑÑÑ ÑледÑÐµÑ Ðº немÑ.
ÐÑ Ð±Ñдем иÑполÑзоваÑÑ Tomcat 5.5. ÐÑо клаÑÑиÑеÑкий, можно даже ÑказаÑÑ, ÑÑандаÑÑнÑй оÑкÑÑÑÑй ÑеÑвлеÑ-конÑейнеÑ. ÐÐ»Ñ ÑÑÑановки Tomcat доÑÑаÑоÑно пÑоÑÑо ÑкаÑаÑÑ ÐµÐ³Ð¾ Ñ http://tomcat.apache.org (или взÑÑÑ Ñ Ð½Ð°Ñего DVD), ÑаÑпаковаÑÑ Ð¸ запÑÑÑиÑÑ bin/startup.sh (или ÑооÑвеÑÑвÑÑÑий .bat). Tomcat ÑабоÑÐ°ÐµÑ Ñ Ñайлами ÑпеÑиалÑного Ñипа Web Archive (WAR). ÐбнаÑÑжив Ñакой Ñайл в опÑеделенном каÑалоге, Tomcat ÑазвоÑаÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ и запÑÑÐºÐ°ÐµÑ ÑодеÑжаÑееÑÑ Ð² нем пÑиложение. ЧÑÐ¾Ð±Ñ Ð¿ÐµÑезапÑÑÑиÑÑ Ð¸Ð»Ð¸ обновиÑÑ Ð¿ÑогÑаммÑ, доÑÑаÑоÑно пÑоÑÑо замениÑÑ Ð¾Ð´Ð¸Ð½ WAR-Ñайл дÑÑгим.
ÐÑедÑдÑÑий код не гоÑов Ð´Ð»Ñ ÑабоÑÑ Ñ Tomcat, поÑÑÐ¾Ð¼Ñ ÐµÐ³Ð¾ нÑжно немного пеÑепиÑаÑÑ. ÐÐ¾Ñ ÑÑо бÑÐ´ÐµÑ Ñделано:
- AddressBook поÑеÑÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ start и main и пÑевÑаÑиÑÑÑ Ð² пÑоÑÑое Ñ ÑанилиÑе запиÑей.
- AddressBookHandler пÑевÑаÑиÑÑÑ Ð² AddressBookServlet, и в него бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ пÑимеÑно ÑледÑÑÑее (ÐиÑÑинг 1):
ÐиÑÑинг 1. ÐовÑй AddressBook
private AddressBook _addressBook = null; public void init(ServletConfig aServletConfig) throws ServletException { super.init(aServletConfig); _addressBook = new AddressBook(); } protected void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException handle(aRequest, aResponse); } protected void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException handle(aRequest, aResponse); }
Сам меÑод handle Ñоже Ñлегка пÑеобÑазÑеÑÑÑ (ÐиÑÑинг 2):
ÐиÑÑинг 2. ÐовÑй меÑод handle
private void handle(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException { aRequest.setCharacterEncoding("utf-8"); String target = aRequest.getRequestURI().substring( aRequest.getContextPath().length()); if (target.equals("/")) { _drawer.outputPage("index.jsp", aRequest, aResponse); } else if ("/add".equals(target)) { handleAdd(aRequest, aResponse); } else if ("/view".equals(target)) { handleView(aRequest, aResponse); } else if ("/edit".equals(target)) { handleEdit(aRequest, aResponse); } else if ("/remove".equals(target)) { handleRemove(aRequest, aResponse); } }
- ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Tomcat «понÑл», ÑÑо ÐµÐ¼Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð»Ð¸ ÑеÑвлеÑ, и знал, как его обÑабаÑÑваÑÑ, нÑжно напиÑаÑÑ ÑпеÑиалÑнÑй Ñайл, коÑоÑÑй назÑваеÑÑÑ Â«Ð´ÐµÑкÑипÑоÑ». ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо Ñлово ÑÑÑаÑное, ÑÑо пÑоÑÑо XML-докÑÐ¼ÐµÐ½Ñ Ñ Ð¾Ð¿Ð¸Ñанием ÑеÑвлеÑа. ÐÑли пеÑевеÑÑи Ñ ÑзÑка напиÑÐ°Ð½Ð¸Ñ Ð´ÐµÑкÑипÑоÑов на ÑÑÑÑкий, Ñо полÑÑиÑÑÑ Ð¿ÑимеÑно ÑледÑÑÑÐ°Ñ Ð¸Ð½ÑоÑмаÑиÑ:
- ÐÐ°Ñ ÑеÑÐ²Ð»ÐµÑ Ð½Ð°Ð·ÑваеÑÑÑ Â«ABServlet» и запÑÑкаеÑÑÑ ÐºÐ»Ð°ÑÑом AddressBookServlet. ТеоÑеÑиÑеÑки можно назваÑÑ ÑеÑÐ²Ð»ÐµÑ Ñак же, как и клаÑÑ, но Ð¼Ñ Ð½Ðµ бÑдем Ñак делаÑÑ, ÑÑÐ¾Ð±Ñ Ð±Ñло менÑÑе пÑÑаниÑÑ.
- ÐÐ»Ñ Ð²ÑÐµÑ URL, коÑоÑÑе наÑинаÑÑÑÑ Ñ Â«/», нÑжно вÑзÑваÑÑ ÑеÑвлеÑ, коÑоÑÑй назÑваеÑÑÑ ABServlet.
Ð Ð²Ð¾Ñ ÐºÐ°Ðº он вÑглÑÐ´Ð¸Ñ (ÐиÑÑинг 3):
ÐиÑÑинг 3. ÐеÑкÑипÑÐ¾Ñ Ð´Ð»Ñ ÑеÑвлеÑа
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
<servlet> <display-name>AddressBook</display-name> <servlet-name>Servlet</servlet-name> <servlet-class>AddressBookServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
</web-app>
- ÐеÑкÑипÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ web.xml и Ñ ÑаниÑÑÑÑ Ð² ÑпеÑиалÑном каÑалоге. Ðде именно â обÑÑдим, когда бÑдем ÑобиÑаÑÑ ÑеÑÐ²Ð»ÐµÑ Ð² WAR
. СделайÑе ÑказаннÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑамоÑÑоÑÑелÑно или возÑмиÑе гоÑо-вÑй код Ñ DVD. ÐÑе в поÑÑдке? Тогда движемÑÑ Ð´Ð°Ð»ÑÑе.
ÐовÑй меÑод
ÐÑли пÑиÑмоÑÑеÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ внимаÑелÑно к ÐºÐ¾Ð´Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ handle, можно замеÑиÑÑ, ÑÑо Ñам поÑвилÑÑ Ð²Ñзов меÑода outputPage. РанÑÑе его, в оÑлиÑие Ð¾Ñ ÑазнÑÑ handle... не бÑло. ÐÑо меÑод, коÑоÑÑй вÑбиÑÐ°ÐµÑ JSP-Ñайл и пеÑÐµÐ´Ð°ÐµÑ ÐµÐ¼Ñ ÑпÑавление Ð´Ð»Ñ Ð²Ñвода ÑÑÑаниÑек. ÐÑглÑÐ´Ð¸Ñ Ð¼ÐµÑод ÑледÑÑÑим обÑазом (ÐиÑÑинг 4):
ÐиÑÑинг 4. ÐеÑод outputPage
public void outputPage(String aJSPName, HttpServletRequest aRequest, HttpServletResponse aResponse) throws IOException, ServletException { RequestDispatcher dispatcher = aRequest.getRequestDispatcher("/jsps/" + aJSPName); dispatcher.forward(aRequest, aResponse); }
Ð ÑÑом меÑоде Ð¼Ñ Ð±ÐµÑем нÑжнÑй JSP-Ñайл и говоÑим ÑеÑвлеÑ-конÑейнеÑÑ: «ÐбÑабоÑай, пожалÑйÑÑа». ÐÑÑалÑное беÑÐµÑ Ð½Ð° ÑÐµÐ±Ñ ÐºÐ¾Ð½ÑейнеÑ. Ðн иÑÐµÑ JSP-Ñайл, загÑÑÐ¶Ð°ÐµÑ ÐµÐ³Ð¾, компилиÑÑÐµÑ (еÑли ÑÑо нÑжно), вÑполнÑÐµÑ Ð¿Ð¾Ð»ÑÑивÑийÑÑ ÑеÑвлеÑ, а ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ Ð² aResponse.
JSP-ÑÑÑаниÑÑ
ÐÐ»Ñ Ð½Ð°Ñала Ñоздадим каÑалог, в коÑоÑом бÑдем ÑобиÑаÑÑ Ð½Ð°Ñе инÑеÑнеÑ-пÑиложение. ÐазваÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ как Ñгодно, напÑимеÑ, WebApp (Web Application). Рнем Ñоздадим ÑпеÑиалÑнÑй каÑалог WEB-INF, где должен Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð´ÐµÑкÑипÑÐ¾Ñ web.xml, и каÑалог jsps, в коÑоÑом бÑдÑÑ Ñ ÑаниÑÑÑÑ JSP-ÑÑÑаниÑки.
Создадим ÑÑи JSP-Ñайла: Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑной ÑÑÑаниÑки, Ð´Ð»Ñ ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (или добавлениÑ) запиÑей и Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа, и назовем Ð¸Ñ , ÑооÑвеÑÑÑвенно, index.jsp, edit.jsp, view.jsp. Ðе забÑдÑÑе â Ð¸Ñ Ð½Ñжно ÑÐ¾Ñ ÑаниÑÑ Ð² в WebApp/jsps.
Сам JSP доÑÑаÑоÑно пÑоÑÑ. РаÑÑмоÑÑим index.jsp (ÐиÑÑинг 5):
ÐиÑÑинг 5. index.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°</title> </head> <body><h1>ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°</h1> <a href="<%=request.getContextPath()%>/add">ÐобавиÑÑ Ð·Ð°Ð¿Ð¸ÑÑ</a><br/> <a href="<%=request.getContextPath()%>/view">ÐÑоÑмоÑÑеÑÑ Ð·Ð°Ð¿Ð¸Ñи</a><br/> </body> </html>
ÐеÑÐ²Ð°Ñ ÑÑÑоÑка добавлÑÐµÑ Ð¿Ð¾Ð»Ðµ «Content-type» к HTTP-Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ Ð¾ÑвеÑа. ÐÑо пÑÑмой аналог ÑÑÑоки
aRequest.setContentType("text/html; charset=utf-8")
из «ÑÑаÑого» меÑода handle. РдалÑÑе, кÑоме ÑÑÑаннÑÑ Ð²ÑÑавок <%...%>, Ð¸Ð´ÐµÑ Ð¾Ð±ÑÑнÑй HTML-код. Ð ÑÑо Ñ Ð¾ÑоÑо! ÐÑо понÑÑно! ТепеÑÑ ÑазбеÑемÑÑ Ñ Ð½ÐµÐ¿Ð¾Ð½ÑÑнÑм.
Ð JSP можно вÑÑавлÑÑÑ Â«Ð¸Ð½Ð¾ÑоднÑй» Ð´Ð»Ñ HTML код, коÑоÑÑй ÑпеÑиалÑнÑм обÑазом инÑеÑпÑеÑиÑÑеÑÑÑ ÑеÑвеÑом и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ð´Ð»Ñ Ð²ÑÑавки ÑазлиÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÑÑÑ Ð½ÐµÑколÑко Ñипов ÑÐ°ÐºÐ¸Ñ Ð²ÑÑавок.
- <%@...%> â обознаÑÐ°ÐµÑ ÑпеÑиалÑнÑÑ Ð²ÑÑавкÑ, коÑоÑÐ°Ñ Ð¾Ð¿ÑеделÑÐµÑ Ð¿Ð°ÑамеÑÑÑ ÑÑÑаниÑÑ, в наÑем ÑлÑÑае â ContentType. Ðожно задаваÑÑ, напÑимеÑ, ÑзÑк, на коÑоÑом напиÑана ÑÑÑаниÑа. Ðн же иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑекÑий import (Ñм. view.jsp ниже).
- <%=...%> â ÑÑо пÑоÑÑой вÑвод пеÑеменной. ÐейÑÑвие вÑÑавки <%=ÑÑо-нибÑдÑ%> аналогиÑно вÑÐ·Ð¾Ð²Ñ request.getWriter().write(ÑÑо-нибÑдÑ).
- <%...%> â ÑамÑй обÑий ваÑÐ¸Ð°Ð½Ñ Ð²ÑÑавки, внÑÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ñбой код. РнаÑем ÑлÑÑае, на Java.
index.jsp â пÑоÑÑой Ñайл, поÑмоÑÑим на неÑÑо более Ñложное. ÐапÑимеÑ, view.jsp (ÐиÑÑинг 6).
ÐиÑÑинг 6. view.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.util.*" %> <html> <head><title>ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°</title></head> <body><h1>ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°, ÑпиÑок конÑакÑов</h1> <a href="<%=request.getContextPath()%>">Ðа главнÑÑ</a><br/> <span style="color: green;"><%=request.getAttribute("message")%></span> <table border="1"> <tr><td width="100">ÐмÑ</td><td width="100">ÐомеÑ</td><td width="100">ÐомменÑаÑий</td><td> - </td></tr> <% Map numbers = (Map) request.getAttribute("numbers"); Map comments = (Map) request.getAttribute("comments"); for (Object entry : numbers.entrySet()) { String name = (String) ((Map.Entry) entry).getKey(); String number = (String) numbers.get(name); String comment = (String) comments.get(name); %> <tr> <td class="name"><%=name%></td> <td class="number"><%=number%></td> <td class="comment"><%=comment%></td> <td class="name"> <a href="<%=request.getContextPath()%>/remove?number=<%=number%>">УдалиÑÑ</a> <a href="<%=request.getContextPath()%>/edit?number=<%=number%>">РедакÑиÑоваÑÑ</a> </td> </tr> <% } %> </table> </body> </html>
Ðак можно замеÑиÑÑ, здеÑÑ ÐµÑÑÑ Ð¸ импоÑÑ (о Ñем Ñ Ð³Ð¾Ð²Ð¾Ñил ÑÑÑÑ Ð²ÑÑе), и вÑÑавка Java-кода. ÐаннÑй Ñайл оÑлиÑно показÑваеÑ, как, напÑÐ¸Ð¼ÐµÑ (не ÑамÑй лÑÑÑий ÑпоÑоб, конеÑно), ÑделаÑÑ Ð²Ñвод в Ñикле.
Ркак ÑÑо обÑабаÑÑваеÑÑÑ-Ñо?
ÐÑÑеÑÑвенно, и меÑÐ¾Ð´Ñ handle... поÑле Ñакого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑали дÑÑгими. ÐеÑÑ Ð²Ñвод HTML-кода иÑÑез, оÑÑалаÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовка даннÑÑ , и вÑзов меÑода outputPage. ÐоÑ, напÑимеÑ, меÑод handleEdit(...) (ÐиÑÑинг 7):
ÐиÑÑинг 7. ÐеÑод handleEdit, обÑабоÑка ÑедакÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи
if (aRequest.getParameter("number") == null) { _addressBook.removeContactByNumber(aRequest.getParameter("number")); aRequest.setAttribute("message", "Ðе опÑеделено, ÑÑо ÑедакÑиÑоваÑÑ"); handleView(aRequest, aResponse); } else if (aRequest.getParameter("edited") != null) { _addressBook.editContact(aRequest.getParameter("edited"), aRequest.getParameter("name"), aRequest.getParameter("number"), aRequest.getParameter("comment")); aRequest.setAttribute("message", "ÐонÑÐ°ÐºÑ \"" + aRequest.getParameter("name") + "\" оÑÑедакÑиÑован"); handleView(aRequest, aResponse); } else { Contact contact = _addressBook.getContactByNumber(aRequest.getParameter("number")); aRequest.setAttribute("action", "edit"); aRequest.setAttribute("edit.name", contact.getName()); aRequest.setAttribute("edit.number", contact.getNumber()); aRequest.setAttribute("edit.comment", contact.getComment()); outputPage("edit.jsp", aRequest, aResponse); }
ÐÑÑалÑнÑе меÑÐ¾Ð´Ñ Ð¼ÐµÐ½ÑÑÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно â Ð¸Ñ Ð¿Ð¾Ð»Ð½Ñй код можно найÑи на диÑке.
Ркак вÑе ÑÑо вÑÑавиÑÑ Ð² Tomcat?
ТепеÑÑ Ñ Ð½Ð°Ñ ÐµÑÑÑ:
- ÐлаÑÑÑ Contact, AddressBook, AddressBookServlet.
- Файл web.xml.
- ÐаÑалог jsps Ñ Ñайлами edit.jsp, index.jsp, view.jsp.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Tomcat понÑл, ÑÑо ÐµÐ¼Ñ Ð´Ð°Ð»Ð¸ полноÑенное пÑиложение, нÑжно вÑполниÑÑ Ð²Ñего ÑÑи Ñага:
- СкомпилиÑоваÑÑ Ð²Ñе, ÑÑо компилиÑÑеÑÑÑ, и ÑоздаÑÑ Ð¿ÑавилÑнÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ Ñайлов и каÑалогов, коÑоÑÐ°Ñ Ð¿ÑедÑÑавлена на ÑиÑ. 2.
- СоздаÑÑ ÑпеÑиалÑнÑй Ñайл-опиÑание аÑÑ Ð¸Ð²Ð° («маниÑеÑÑ»).
- ÐааÑÑ Ð¸Ð²Ð¸ÑоваÑÑ ÑозданнÑÑ ÑÑÑÑкÑÑÑÑ Ð¿Ñи помоÑи ÑÑилиÑÑ jar, Ð²Ñ Ð¾Ð´ÑÑей в ÐºÐ¾Ð¼Ð¿Ð»ÐµÐºÑ JDK.
СкомпилиÑÑем ÑайлÑ. ТÑÑ Ð½Ð¸Ñего нового не поÑвилоÑÑ, Ñазве ÑÑо изменилаÑÑ Ñама команда (обÑаÑиÑе внимание на клÑÑ -cp, задаÑÑий библиоÑеки classpath):
cd ~/Programming/AddressBook/src javac -encoding utf-8 -cp ~/bin/tomcat/common/lib/servlet-api.jar -d ../build/WEB-INF/classes/ *.java
ÐеÑÐµÑ Ð¾Ð´Ð¸Ð¼ к ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°Ð½Ð¸ÑеÑÑа. Ðн должен назÑваÑÑÑÑ MANIFEST.MF и ÑаÑполагаÑÑÑÑ Ð² каÑалоге META-INF. Ð ÑÑаÑÑÑÑ, за ÑÑим ÑÐ»ÐµÐ´Ð¸Ñ Ñам jar, поÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ доÑÑаÑоÑно пÑоÑÑо ÑÐ¾Ñ ÑаниÑÑ Ð³Ð´Ðµ-Ñо Ñайл и ÑказаÑÑ ÐµÐ³Ð¾ jar'Ñ ÐºÐ°Ðº маниÑеÑÑ. РнаÑем ÑлÑÑае он пÑеделÑно пÑоÑÑ Ð¸ не ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑеÑеÑной инÑоÑмаÑии, но в пÑинÑипе здеÑÑ Ð¼Ð¾Ð³ÑÑ ÑаÑполагаÑÑÑÑ Ð²ÑÑкие наÑÑÑойки Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка ваÑего пÑиложениÑ. ÐÐ¾Ñ ÐµÐ³Ð¾ ÑекÑÑ (ÐиÑÑинг 8):
ÐиÑÑинг 8. ÐаниÑеÑÑ Ð´Ð»Ñ war-Ñайла
Manifest-Version: 1.0 Created-By: Hands of programmer
ТепеÑÑ ÑобеÑем вÑе в war (Web Archive). ÐаниÑеÑÑ Ð´Ð»Ñ Ð¿Ñиведенной ниже ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð½Ð°Ð·Ð²Ð°Ð½ MANIFEST.MF и ÑаÑполагаÑÑÑÑ ÑÑдом Ñ ÐºÐ°Ñалогом build. РезÑлÑÑиÑÑÑÑий аÑÑ Ð¸Ð² назÑваеÑÑÑ address.war и ÑаÑполагаеÑÑÑ Ñам же, ÑÑдом Ñ Ð¼Ð°Ð½Ð¸ÑеÑÑом.
jar -cfm ../address.war ../MANIFEST.MF *
Ð ÑейÑÐ°Ñ Ð½Ð°ÑÑÑÐ¿Ð°ÐµÑ ÑамÑй волÑебнÑй моменÑ! ÐозÑмиÑе address.war и положиÑе его в каÑалог webapps Tomcat'а. ÐодождиÑе неÑколÑко ÑекÑнд. Увидев новое пÑиложение, Tomcat ÑазвеÑÐ½ÐµÑ ÐµÐ³Ð¾ (поÑвлÑеÑÑÑ ÐºÐ°Ñалог Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ваÑего war'а) и подклÑÑÐ¸Ñ Ðº ÑиÑÑеме. ÐоÑле ÑÑого можно пÑоÑÑо зайÑи в бÑаÑÐ·ÐµÑ Ð¸ набÑаÑÑ:
http://localhost:8080/address/
ÐÑалÑ, полÑÑиÑе ваÑе пÑиложение.
Ð ÑÑо ÑепеÑÑ?
Ð ÑепеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ менÑÑÑ JSP-ÑÐ°Ð¹Ð»Ñ Â«Ð½Ð° леÑÑ» в ÑаÑпакованном каÑалоге webapps/address/jsps. ÐÑи ÑÑом бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки пÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð½ÐµÑколÑко дейÑÑвий, в ÑезÑлÑÑаÑе коÑоÑÑÑ ÑÐ°Ð¹Ð»Ñ Ð¿Ð¾Ð´Ñ Ð²Ð°ÑÑÑÑÑ Ð¿Ñиложением. Так менÑеÑÑÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ без пеÑекомпилÑÑии, без ÑеÑÑаÑÑа ÑеÑвеÑного пÑиложениÑ, как ÑÑо Ñ Ð½Ð°Ñ Ð±Ñло до ÑÐ¸Ñ Ð¿Ð¾Ñ.
Я ÑÑиÑаÑ, ÑÑо на данном ÑÑапе пÑиложение «ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°Â» ÑабоÑÐ°ÐµÑ Ñ Ð¾ÑоÑо. Ðно вÑполнÑÐµÑ Ñвои неÑложнÑе ÑÑнкÑии и ÑÐ¼ÐµÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Â«Ð½Ð° леÑÑ» по запÑоÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ. Ðно пÑоÑÑое â и ÑÑо ÑÑÑÑ Ð»Ð¸ не Ñамое главное. Ðо еÑÑÑ ÐµÑе доÑÑаÑоÑно аÑпекÑов, о коÑоÑÑÑ ÑÑÐ¾Ð¸Ñ Ð·Ð½Ð°ÑÑ Ð¿Ñи ÑазÑабоÑке более ÑложнÑÑ Ð¸Ð½ÑеÑнеÑ-пÑиложений. ÐÑ ÑаÑÑмоÑÑим Ð¸Ñ Ð² ÑледÑÑÑÐ¸Ñ ÑÑаÑÑÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑеÑии. LXF