- тармак жөнүндө ;
- программалык камсыздоонун архитектурасы жөнүндө ;
- HTTP/HTTPS протоколдору жөнүндө ;
- Maven негиздери жөнүндө .
Сервлет деген эмне
Биринчиден, келгиле, сервлет деген эмне экенин жана ал жөнүндө эмне үчүн мынчалык көп укканыңызды аныктап көрөлү. Java Servlet API serverде ишке ашыруу жана суроо-жооп схемасын колдонуу менен кардар менен иштөө үчүн иштелип чыккан стандартташтырылган API болуп саналат. Сервлет - бул кардардан суроо-талаптарды кабыл алып, ага жооп кайтара ала турган класс. Ооба, Javaдагы сервлеттер так кардар-server архитектурасы курулган элементтер. Эсиңизде болсо, биз бул тууралуу сериядагы макалалардын биринде айтканбыз. Келгиле, бадалдын айланасында урбайлы: келгиле, дароо code жазалы.Веб тиркемесин түзүү үчүн эмне керек
Javaдагы сервлеттер менен ыңгайлуу иштөө үчүн сизге Intellij IDEA Ultimate Edition керек болот. Бул акы төлөнөт, бирок сиз 30 күндүк сыноо мөөнөтүн активдештире аласыз же эрте жетүү versionсын колдоно аласыз - ал ар дайым акысыз. Ошондой эле биздин колдонмо serverибизди орнотуңуз - Apache Tomcat. Tomcat - бул сервлет контейнери: бул сырттан келген суроо-талаптарды иштетип, аларды биздин тиркемеге өткөрүп берет. Сиз бул шилтемеден Tomcat жүктөй аласыз .Биринчи веб-тиркемени түзүү
Баары даяр болсо, анда Maven долбоорун түзөлү. Эгер сиз Maven менен тааныш болбосоңуз, мурунку макалага көңүл буруңуз . Баштайлы!-
pom.xml ичинде javax.servlet-api көз карандылыгын кошуп, пакеттөө согушун орнотуңуз:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>servlets</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> </dependencies> </project>
Жөнөкөй сервлет классы:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/hello") public class MainServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter printWriter = resp.getWriter(); printWriter.write("Hello!"); printWriter.close(); } }
-
Тиркемени иштетүү үчүн Tomcat конфигурациясын түзүшүңүз керек:
-
Андан кийин биз Tomcatтын кайсы versionсын колдоно турганыбызды, serverге кире турган URL дарегин жана портту көрсөтөбүз. Сиз бул сыяктуу нерсени алышыңыз керек:
-
Артефактты (бир банкка архивге чогултулган долбоор) көрсөтүү гана калды, ал контейнерге жайгаштырылат. Сиз "Оңдоо" баскычын чыкылдатып , согушту тандай аласыз : бул долбоор кайра курулгандан кийин, артефакт автоматтык түрдө сервлет контейнерине жайгаштырылат дегенди билдирет.
-
Колдонмонун контексти демейки боюнча servlets_war_exploded деп коюлган , бул колдонмого төмөнкү даректе кирүү керек дегенди билдирет: http://localhost:8080/servlets_war_exploded .
Эмне үчүн бизге кошумча текст керек? Келгиле, керексиз нерселерди алып салалы. Азыр биздин колдонмонун дареги: http://localhost:8080 .
-
OK басыңыз. Биз азыр колдонмону ишке киргизүү мүмкүнчүлүгү бар экенин көрүп жатабыз:
Эми, сиз тиркемени ишке киргизгенде, браузер 404 катасын ачып, көрсөтүшү керек. Бул логикалуу, анткени http://localhost:8080/ дарегинде “/” картасы бар сервлет болушу керек жана биздин жалгыз сервлетибизде “/hello” картасы бар .
-
Биз аны менен http://localhost:8080/hello дареги аркылуу байланышып , күтүлгөн жоопту алабыз - "Салам" сабы!
Параметрлер жана сессия менен иштөө
Келгиле, биздин сервлет суроо-талаптын параметрлерин иштеп чыгып, сессия менен иштей тургандай кылып өркүндөтөлү:import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Integer visitCounter = (Integer) session.getAttribute("visitCounter");
if (visitCounter == null) {
visitCounter = 1;
} else {
visitCounter++;
}
session.setAttribute("visitCounter", visitCounter);
String username = req.getParameter("username");
resp.setContentType("text/html");
PrintWriter printWriter = resp.getWriter();
if (username == null) {
printWriter.write("Hello, Anonymous" + "<br>");
} else {
printWriter.write("Hello, " + username + "<br>");
}
printWriter.write("Page was visited " + visitCounter + " times.");
printWriter.close();
}
}
Сервлет учурда сеансты иштетип жатат, ал баракка кирген сайын visitCounter санын көбөйтөт. Эгерде visitCounter атрибуту али түзүлө элек болсо (баракка биринчи жолу киргениңизде), getAttribute() ыкмасы нөлдү кайтарат, андыктан нөлдү текшеришиңиз керек. Ошол эле суроо-талап параметрлерине тиешелүү. Колдонуучу колдонуучу аты параметрин өткөрбөсө, анын мааниси нөл болот. Бул учурда, биз анонимдүү колдонуучу менен саламдашабыз. GET сурамында параметрди өткөрүү үчүн жол өзгөрмөлөрү колдонулат, башкача айтканда, http://localhost:8080/hello?username=Pavel шилтемесине кирүү керек . http сурамдары тууралуу кененирээк сериядагы мурунку макаладан окуй аласыз . Эми биздин тиркемеде минималдуу логика бар, бирок тамыр жолундагы 404 ката бир аз тажатма. Аны оңдоо үчүн, келгиле, башка сервлет түзүп, аны @WebServlet("/") баштапкы бетине түшүрөлү. Бул сервлеттин милдети суроо-талаптарды “/hello” жолуна багыттоо болуп саналат. Муну жасоонун эки жолу бар: алдыга же багыттоо. Балким, алардын ортосунда кандай айырма бар экенин түшүнүү керек. алдыга - делегаттар serverдеги башка сервлетке иштетүүнү суранышат, кардар катышпайт. Бул үчүн, сиз жаңы сервлеттин doGet() ыкмасына төмөнкү codeду кошушуңуз керек:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Бул codeдо биз сервлеттин контекстине киребиз, андан керектүү сервлеттин суроо-талап менеджерин алабыз жана андан көрсөтүлгөн параметрлер менен (req, resp) белгилүү бир суроону иштеп чыгууну суранабыз. кайра багыттоо - кардарга анын суроо-талабын иштеп чыгуу үчүн кайрылуусу керек болгон даректи кайтарып берет. Көпчүлүк браузерлер автоматтык түрдө берилген шилтемеге өтүшөт. Багыттоону ишке ашыруу үчүн бул codeду кошушуңуз керек:
resp.sendRedirect(req.getContextPath() + "/hello");
HttpServletResponseде биз redirect() ыкмасын чакырабыз жана ага кардар байланыша турган даректи өткөрүп беребиз. Маанилүү детал: http параметрлери да толук багыттоо жолунун аягында кошулушу керек, бул абдан ыңгайлуу эмес. Биздин шартта, алдыга колдонуу артык, бирок кайра багыттоо колдонуу жакшыраак болот. Эгер алардын ишиндеги айырманы түшүнсөңүз, тандооңуздан жаңылбайсыз. Жаңы сервлеттин codeу төмөнкүдөй көрүнөт:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// getServletContext().getRequestDispatcher("/hello").forward(req, resp);
resp.sendRedirect(req.getContextPath() + "/hello");
}
}
GO TO FULL VERSION