JSP ё Java Server Pages як технологияи Java мебошад, ки ба шумо имкон медиҳад саҳифаҳои динамикӣ барои барномаҳои Java эҷод кунед. Дар ин мақола мо дар бораи чӣ будани JSP муфассалтар сӯҳбат хоҳем кард, баъзе аз имкониятҳои ин технологияро муҳокима мекунем, сохтори саҳифаҳои JSP-ро дида мебароем ва инчунин кӯшиш мекунем, ки дар бораи чӣ будани ин Java Server Саҳифаҳо назар андозем. Аммо аввал биёед дар бораи манфиатҳо ва аҳамияти JSP сӯҳбат кунем. JSP ба таҳиякунанда имкон медиҳад, ки:
Биёед бубинем, ки чӣ тавр шумо метавонед ба an objectҳои пинҳонӣ дар JSP дастрасӣ пайдо кунед, аз ҷумла параметрҳои URL. Барои ин, Tomcat -ро оғоз кунед ва браузерро дар саҳифаи http://localhost:8080/ кушоед. Сипас ба саҳифаи Мисолҳо гузаред: Пас истиноди JSP-ро пайравӣ кунед Мисолҳо: Дар саҳифаи мисолҳо истиноди Объектҳои номуайян -> Иҷро кунед: Дар ин ҷо саҳифа шумо метавонед мисоли истифодаи an objectҳои пинҳоншударо бинед. Дар зер скриншоти саҳифа бо тавзеҳоти муфассал оварда шудааст: Кӯшиш кунед, ки арзиши параметрро
- гирифтани маълумот аз саҳифаи веб ба рамзи Java;
- ирсол маълумот аз codeи Java ба саҳифаи веб;
- Рамзи Java-ро бевосита дар дохor html нависед (аммо, шумо набояд аз ин суиистифода кунед).
- JSP яке аз технологияҳои асосии веби Java мебошад;
- JSP дар аксари ширкатҳо ва лоиҳаҳо васеъ истифода мешавад;
- JSP бефосила бо сервлетҳои Java дар дохor контейнери сервлет ҳамгиро мешавад.
Таърифи JSP
Ин аст таъриф аз Википедиа: JSP (JavaServer Pages) технологияест, ки ба таҳиягарони веб имкон медиҳад мундариҷаи дорои ҷузъҳои статикӣ ва динамикӣ эҷод кунад. Саҳифаи JSP дорои ду намуди матн аст: маълумоти сарчашмаи статикӣ, ки метавонад дар яке аз форматҳои матнии HTML, SVG, WML ё XML бошад ва унсурҳои JSP, ки мундариҷаи динамикӣ бунёд мекунанд. Илова бар ин, китобхонаҳои барчаспҳои JSP ва инчунин забони ифода (EL) барои ворид кардани рамзи Java ба мундариҷаи статикии саҳифаҳои JSP истифода мешаванд. Рамзи саҳифаи JSP бо истифода аз компилятори саҳифаи Jasper JSP ба codeи Java сервлет тарҷума карда мешавад ва сипас ба bytecodeи Java Virtual Machine (JVM) тартиб дода мешавад. Контейнерҳои сервлет, ки қодиранд саҳифаҳои JSP-ро иҷро кунанд, бо забони мустақor Java Java навишта шудаанд. Технологияи JSP як технологияи аз платформа мустақил, сайёр ва ба осонӣ васеъшаванда барои таҳияи барномаҳои веб мебошад.Сохтори саҳифаи JSP
Умуман, JSP ба веб-саҳифаҳои динамикӣ дахл дорад, ки дар онҳо қисми динамикӣ бо истифода аз Java тавлид мешавад ва қисми статикӣ бо истифода аз забонҳои аломатгузорӣ, аксар вақт HTML тавлид мешавад. Чунин саҳифа ҳуҷҷати матнии дорои тамдиди .jsp мебошад, ки бо яке аз забонҳои аломатгузорӣ (ба монанди HTML, SVG, WML ва XML) навишта шудааст, ки бо унсурҳои JSP (ё барчаспҳои JSP) печонида шудааст. Ин барчаспҳо зангҳоро ба codeи server (маълумот) дар бар мегиранд ва инчунин баъзе ҳисобҳоро иҷро мекунанд. Ин файлҳо дар server коркард карда мешаванд, ки дар натиҷа ҳамаи тегҳои JSP ба тегҳои html табдил меёбанд ва натиҷааш саҳифаи муқаррарии html мебошад. Дар диаграммаи зер диаграммаи сохтори саҳифаи JSP ва ҳамкории он бо server нишон дода шудааст. Намунаи саҳифаи оддии JSP:<html>
<body>
<p> ${2 + 2} равно 4 </p>
</body>
</html>
Дар ин мисол, ифодаи JSP, ки бо забони махсус навишта шудааст, забони ифода (EL) дар дохor codeи html "дарунсохт" аст . Он як механизми муҳими ҳамкорӣ байни қабати муаррифӣ (саҳифаҳои веб) ва қабати мантиқии тиҷории барномаро (codeи Java) таъмин мекунад. Тавре ки шумо аз мисол мебинед, ифодаи JSP дар қавсҳои ҷингила бо аломати пешбари доллар - ${...}
. Ҳама он чизе, ки дар дохor қавсҳои ҷингила мавҷуд аст, дар server арзёбӣ мешавад ва натиҷаи ин ифода дар html дар ҷое, ки ифодаи JSP ибтидо муайян карда шуда буд, дода мешавад. Пас аз коркарди ҳамаи тегҳо, саҳифа чунин хоҳад буд:
<html>
<body>
<p> 4 равно 4 </p>
</body>
</html>
Насб ва ба кор андохтани контейнери сервлет
Азбаски рамзи JSP ба codeи сервлети Java тарҷума шудааст, ба мо лозим аст, ки дар ҷое як навъ контейнери сервлет гирем, то дар бораи чӣ гуна кор кардани JSP сӯҳбат кунем. Дар акси ҳол, бе контейнер, JSP кор намекунад. Аммо аввал, биёед ба таърифи контейнери сервлет назар андозем. Контейнери сервлет ин барномаест, ки serverест, ки дастгирии системаро барои сервлетҳо таъмин мекунад ва давраи зиндагии онҳоро мувофиқи қоидаҳои дар мушаххасот муайяншуда таъмин мекунад. Он метавонад ҳамчун веб-serverи мустақor мукаммал кор кунад, провайдери саҳифа барои веб-serverи дигар бошад ё ба serverи барномаҳои Java EE ҳамгиро шавад. Яке аз маъмултарин контейнерҳои сервлет Apache Tomcat мебошад. Бояд қайд кард, ки Tomcat serverи пурраи барномаҳои Java EE нест. Аммо, барои эҳтиёҷоти муҳими сервлетҳо ва саҳифаҳои JSP, serverи Tomcat беш аз кофист. Биёед насбро оғоз кунем. Шумо метавонед Tomcat-ро аз саҳифаи расмӣ зеркашӣ кунед . Барои Windows OS шумо метавонед Tomcat-ро ба таври зерин насб кунед:-
Насбкунандаи хидмати 32-бит/64-бита Windows-ро зеркашӣ кунед.
-
Биёед файлро иҷро кунем.
-
Баъдан, тартиби муқаррарии насбкуниро иҷро кунед:
-
Фаромӯш накунед, ки қуттии санҷишро дар равзанаи насбкунандаи мувофиқ санҷед:
-
ва роҳро ба JRE-и пешакӣ насбшударо муайян кунед:
-
-
Пас аз насб, Tomcat-ро оғоз кунед ва браузерро кушоед. Ба http://localhost:8080/ равед .
Барномаҳои намоишӣ. Объектҳои пинҳоншуда
Биёед баъзе хусусиятҳои JSP-ро дар амал бубинем. Яке аз онҳо дастрасӣ ба an objectҳои ба ном пинҳоншуда мебошад ( Объектҳои номуайян ). Инҳо an objectҳое мебошанд, ки бо истифода аз забони ифода (EL) дастрас кардан мумкин аст. Намунаҳои чунин an objectҳо сарлавҳаҳои HTTP ё параметрҳои URL мебошанд. Биёед ошкор кунем (ё хотираи худро тароват диҳем) кадом параметрҳои URL мебошанд. Мисоли зер URL-ро бо параметрҳо нишон медиҳад. Параметрҳо бо ғафс навишта шудаанд: http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom Параметрҳо ҳамеша бо аломати савол (?) оғоз мешаванд. Пас аз он номи параметр меояд, аломати баробар - арзиши параметр муайян карда мешавад. Якчанд ё як параметр буда метавонад. Агар зиёда аз як ҷуфт мавҷуд бошад, ҳар як ҷуфти ном-арзиш бо аломати амперсанд (&) ҷудо карда мешавад. Дар мисоли боло, якчанд параметрҳо ва арзишҳои онҳо муайян карда шуданд:Номи параметр | Арзиши параметр | |
---|---|---|
парам1 | арзиш 1 | |
парам 2 | арзиш 2 | |
а | 1 | |
ном | Том |
foo
бо истифода аз майдони мувофиқи саҳифа тағир диҳед, пас аҳамият диҳед, ки арзиши ин параметр дар сатри суроғаҳо низ тағир ёфтааст. Саҳифаи пешниҳодшуда дорои функсияҳои зиёд нест, аммо он як истинодест, ки шумо метавонед дар оянда ҳангоми дастрасӣ ба an objectи махфии мушаххас муроҷиат кунед. Ин саҳифа рӯйхати an objectҳои пинҳониро дар бар мегирад, ки онҳоро дастрас кардан мумкин аст. Ва дар зер, дар ҷадвал нишон дода шудааст, ки чӣ гуна шумо метавонед ба an objectи мушаххас дастрасӣ пайдо кунед.
Функсияҳои JSP
Акнун биёед ба саҳифаи қаблӣ баргардем ва ба рамзи сарчашмаи саҳифаи "an objectҳои пинҳон" назар андозем: Ин аст:<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
<title>JSP 2.0 Expression Language - Implicit Objects</title>
</head>
<body>
<h1>JSP 2.0 Expression Language - Implicit Objects</h1>
<hr>
This example illustrates some of the implicit objects available
in the Expression Language. The following implicit objects are
available (not all illustrated here):
<ul>
<li>pageContext - the PageContext object</li>
<li>pageScope - a Map that maps page-scoped attribute names to
their values</li>
<li>requestScope - a Map that maps request-scoped attribute names
to their values</li>
<li>sessionScope - a Map that maps session-scoped attribute names
to their values</li>
<li>applicationScope - a Map that maps application-scoped attribute
names to their values</li>
<li>param - a Map that maps parameter names to a single String
parameter value</li>
<li>paramValues - a Map that maps parameter names to a String[] of
all values for that parameter</li>
<li>header - a Map that maps header names to a single String
header value</li>
<li>headerValues - a Map that maps header names to a String[] of
all values for that header</li>
<li>initParam - a Map that maps context initialization parameter
names to their String parameter value</li>
<li>cookie - a Map that maps cookie names to a single Cookie object.</li>
</ul>
<blockquote>
<u><b>Change Parameter</b></u>
<form action="implicit-objects.jsp" method="GET">
foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
<input type="submit">
</form>
<br>
<code>
<table border="1">
<thead>
<td><b>EL Expression</b></td>
<td><b>Result</b></td>
</thead>
<tr>
<td>\${param.foo}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
<tr>
<td>\${param["foo"]}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
<tr>
<td>\${header["host"]}</td>
<td>${fn:escapeXml(header["host"])} </td>
</tr>
<tr>
<td>\${header["accept"]}</td>
<td>${fn:escapeXml(header["accept"])} </td>
</tr>
<tr>
<td>\${header["user-agent"]}</td>
<td>${fn:escapeXml(header["user-agent"])} </td>
</tr>
</table>
</code>
</blockquote>
</body>
</html>
Агар шумо бо HTML шинос бошед, рамзи сарчашмаи саҳифа бояд барои шумо равшан бошад. Ба ин сатрҳо диққат диҳед:
<tr>
<td>${param.foo}</td>
<td>${fn:escapeXml(param["foo"])} </td>
</tr>
Дар ин ҷо мо барчаспҳои html <tr>
ва <td>
. Пас аз барчаспҳо <td>
барчаспҳои JSP, ки дар қавсҳои ҷингила печонида шудаанд , меоянд ${ }
. Аммо, аҳамият диҳед, ки чӣ гуна арзиши параметри URL баромад мекунад foo
:
${fn:escapeXml(param["foo"])}
Арзиш тавассути истифодаи функсияи JSP бароварда мешавад fn:escapeXml()
. Функсияҳои JSP баъзе функсияҳоро фаро мегиранд, ки метавонанд дубора истифода шаванд. Дар ин ҳолат, он аз XML фирор мекунад. Технологияи JSP доираи васеи вазифаҳоро барои интихоб ва инчунин қобorяти эҷоди вазифаҳои шахсии худро фароҳам меорад. Барои истифодаи функсия дар JSP, шумо бояд китобхонаи мувофиқеро ворид кунед, ки дар он функсия ба файли JSP муайян шудааст.
Китобхонаҳои тег
Биёед як сатри дигари codeи сарчашмаро (сатри дуюм) дар боло бубинем:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Ин аст, ки китобхонаҳои барчаспҳо ворид карда мешаванд. Синтаксис интуитивист. Мо якчанд чизро муайян мекунем:
taglib
(китобхонаи тег - китобхонаи барчасп);url
, ки ин китобхона дар куҷо ҷойгир аст;- префикс (дар ин ҳолат
fn
), ки тавассути он функсияҳои дар ин китобхона муайяншударо даъват кардан мумкин аст.
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
Тавре ки бо fn
, қайд c
ихтиёрӣ аст ва ба таври умум қабул карда мешавад. Ин нишондодро қариб дар ҳама ҷое пайдо кардан мумкин аст, ки ин китобхонаҳо истифода мешаванд. Ин аст як мисоли функсия аз китобхонаи аслӣ:
<c:out value = "${'<div>'}"/>
Ин функсия танҳо тегро мебарорад <div>
. Ин функсия аллакай аз XML фирор мекунад. Ин функсия аз нуқтаи назари амният муҳим аст, зеро тавассути баровардани арзиши тағирёбандаҳо мустақиман тавассути ${variable}
, мо дари инъекцияи скриптро мекушоем.
Таҳрири JSP
Акнун, ки бо донишҳои нав муҷаҳҳаз шуда, биёед кӯшиш кунем, ки ба барномаи намоишии дохor Tomcat тағирот ворид кунем. Барои ин, мо codeи сарчашмаи ин саҳифаро дар дохor ҷузвдоне пайдо мекунем, ки дар он контейнери сервлет насб шудааст. Ин файлро дар суроғаи зерин пайдо кардан мумкин аст: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el Сипас файли implicit-objects.jsp-ро дар ягон муҳаррири матн кушоед Импорти китобхонаи асосиро илова кунед , ва баъд аз он истифода баред. Биёед матнро бароварем: Акнун биёед саҳифаи an objectҳои пинҳоншударо навсозӣ кунем ва тағиротҳои воридшударо бубинем:Натиҷаҳо
Ҳамин тавр, мо чунин технологияро, ба монанди JSP, рӯякӣ тафтиш кардем. Мо муҳокима кардем:- JSP чист;
- Сохтори саҳифаи JSP;
- тартиби насб ва ба кор андохтани контейнери сервлети Tomcat;
- барномаи намоишӣ барои дастрасӣ ба an objectҳои пинҳон, ки ба бастаи тақсимоти serverи Tomcat дохил карда шудааст;
- Функсияҳои JSP ва китобхонаҳои барчасп.
Баъд чӣ?
Барои муҳофизат кардани мавод шумо метавонед:- Ҳама чизро дар ин мақола такрор кунед.
- Дигар барномаҳои намоиширо, ки ба serverи Tomcat дохил карда шудаанд, баррасӣ кунед.
- Аризаи шахсии худро нависед ва онро дар як контейнери сервлет ҷойгир кунед. Ҳамчун дастур, шумо метавонед мақоларо истифода баред Сохтани лоиҳаи веби оддӣ дар IntelliJ Idea Enterprise. Қадам ба қадам, бо тасвирҳо.
GO TO FULL VERSION