Какво представляват Java сървлетите? Обработка на заявки за Java уеб приложения

Обработката на заявките е хлябът и маслото в разработката на уеб приложения на Java. За да отговори на заявки от мрежата, уеб приложението на Java трябва първо да определи какъв код ще отговори на URL адреса на заявката, след което да направи отговор. Всеки технологичен стек има начин за постигане на обработка на заявка-отговор. В Java ние използваме сървлети (и API за сървлети на Java) за тази цел. Мислете за сървлета като за малък сървър, чиято работа е да приема заявки и да издава отговори.

URL срещу крайна точка

Като потребител на интернет, вие сте запознати с URL адресите като адрес на уебсайта във вашия браузър. Като разработчик може да знаете URL адресите като крайни точки за уеб услуги. А URL (унифициран указател на ресурс) е стандартен начин да се опише и да намерите Интернет ресурси с помощта на текст. Терминът крайна точка се отнася до URL адрес, обозначаващ уеб услуга. Термините крайна точка и URL често се използват взаимозаменяемо, въпреки че се отнасят до различни домейни на използване.

Софтуер като слоеве

Както обясних в своето въведение в Java Runtime Environment, можем да разглеждаме софтуера като поредица от слоеве. Всеки слой в софтуерна система притежава определени възможности, които се изискват от слоевете над него. Като пример, хардуерният слой се намира под слоя на фърмуера, поддържайки неговата функционалност. По същия начин слоят на фърмуера (BIOS на компютър или EFI на Mac) е необходим за стартиране на операционната система. Фигура 1 показва тези три компонента в многослойна диаграма.

Матю Тайсън

Можете също така да разгледате софтуерна система като серия от контейнери , където долните слоеве действат като контейнери за по-високите. Всеки слой действа като контекст за изпълнение на следващото ниво на функционалност: хардуерът съдържа фърмуер, а фърмуерът съдържа операционната система.

Java от сървъра

Приложението Java от страна на сървъра е един от широк клас приложения, които служат като мрежови крайни точки, получават HTTP заявки от даден URL адрес и изпращат обратно данни във формат за обмен като HMTL или JSON. Сървърната Java се състои както от стандартизирани Java сървъри, така и от технологии за взаимодействие с тези сървъри. API на Java Servlet е стандартът, използван за взаимодействие с Java сървър.

Java сървъри и JVM

В базираните на Java системи операционната система (OS) съдържа JVM, която осигурява последователна среда за стартиране на Java приложения. Сървър Java е разположен върху JVM. Точно както JVM е посредник между операционната система и вашето Java приложение, Java сървърът осигурява последователен, рационализиран достъп до мрежовите и обработващи възможности на операционната система. Приложение Java работи вътре в сървъра, използвайки API на Java Servlet за достъп до възможностите на сървъра.

Фигура 2 показва софтуерен стек за Java от сървъра.

Матю Тайсън

Спецификацията на Java Servlet

Спецификацията на Java Servlet предоставя основната дефиниция за Java сървър и свързани компоненти. Той определя как сървърът ще изпраща заявки и отговори по време на мрежови взаимодействия през HTTP. Всички Java сървъри трябва да са съвместими със спецификацията Java Servlet. Повечето Java сървъри днес са съвместими със Servlet 4.0.

Сервлет 4.0

Всяка версия на спецификацията Java Servlet носи нови функции. Servlet 4.0 включва поддръжка за протокола HTTP / 2 и неговия механизъм за натискане на сървъра. Изтласкването на сървъра позволява на сървъра да зареди предварително активи, необходими за дадена уеб страница, вместо да чака конкретна заявка. Спецификацията на Servlet 4.0 също така включва възможността за откриване на съпоставяне на URL адреси по време на изпълнение, функция, известна като откриване на изпълнението .

Eclipse Enterprise за Java

Servlet 4.0 е част от инициативата с отворен код EE4J (Eclipse Enterprise for Java), която включва предложен заместител на JCP.

За практическо разбиране на това как работи спецификацията на Servlet, помислете за статията, която четете в момента. Някъде в недрата на инфраструктурата на JavaWorld тази статия е форматирана и изпратена за публикуване. Присвоен му е URL адрес, пренасочен през мрежата и пристигнал на сървър. Сървърът свързва артефакта (статията) с URL адреса и определя, че когато GET заявка пристигне за този URL адрес, той ще върне тази статия като HTML.

Когато създавате уеб приложение на Java, вие създавате софтуер, който работи в Java сървъра. Приложението използва съоръженията, предоставени от контекста на сървъра, и едно от тези съоръжения е Servlet API. Поради тази причина Java сървър, който реализира спецификацията на Servlet, понякога се нарича контейнер на servlet .

За да създадете сървлет, вие внедрявате Servletинтерфейса и го разполагате в контейнер за сървлети. Фигура 3 показва как вашето приложение разчита на сървлета.

Матю Тайсън

Писане на сървлети с Tomcat

След като вече имате концептуален преглед, нека се заемем с писането на Java сървлет.

Първото нещо, от което ще се нуждаете, е контейнер за сървлети, иначе известен като сървър за приложения на Java. Tomcat и Jetty са два от най-популярните контейнери за сървлети. Ще използваме Tomcat, защото това е един от най-дългогодишните сървъри за приложения за Java. Tomcat е безплатен и съдържа минимални звънци и свирки, което ще улесни нещата за нашия пример. ("Между другото" е технически термин.)

Изтеглете и инсталирайте Tomcat

Ако все още нямате Tomcat, започнете, като отворите страницата за изтегляне на Tomcat. Там можете да изберете или инсталатора на Windows, или най-подходящото ZIP изтегляне за вашия компютър (например, изтеглям 64-битовия zip на Windows).

Това е: току-що сте добавили Java сървърния слой към вашата операционна система!

Проверете дали Tomcat работи

Преди да продължим, нека се уверим, че можете да стартирате Tomcat. Или стартирайте услугата Windows, или стартирайте startup.shили startup.batфайл от командния ред.

Ако сега отворите уеб браузър и отидете на localhost:8080, трябва да бъдете посрещнати от следния екран:

Матю Тайсън

Ако срещнете някакви проблеми при изпълнението на Tomcat, можете да посетите документацията на Tomcat за отстраняване на неизправности.

Изпълнете примера на сървлета на Tomcat

Сега нека да разгледаме Java сървлета. Удобно е, че Tomcat е включил няколко прости примера.

Кликнете върху връзката Примери, която виждате в раздела за бърз старт за разработчици на началната страница на Tomcat. След като сте там, щракнете върху връзката Servlet Examples .

Now you can see a simple Servlet in action by clicking the Hello World sample's Execute link. That will bring your browser to the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL, where you will see the perennial programmer's salutation.

Viewing the servlet source code

Click the Back arrow in your browser, then click the source link for the HelloWorld app. The source is shown in Listing 1.

Listing 1. Source code for HelloWorld example

 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Hello World!"); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } } 

This very simple code listing contains the basic components of a Java servlet. Let's consider it step by step.

The first line calls the standard Java imports. After that, the program defines a new class, which extends the HttpServlet class. This is critical because servlets must implement the Servlet interface in order to run inside a servlet container.

Next, the HelloWorld class defines a method called doGet(). This is a standard method on servlets: it tells the server to route HTTP GET requests to this method. Other HTTP methods, like POST, are handled by similarly named methods, like doPost.

Notice that that doGet() has two parameters: (HttpServletRequest request, HttpServletResponse response). These two objects represent the request and response. They provide access to everything your code needs to deal with the request and issue a response. In the HelloWorld.doGet servlet method, for example, the response object is used to inform the server what content type header to issue. In this case, it's response.setContentType("text/html");.

Finally, the program obtains a Java Writer object from the response response.getWriter(). The Writer is then used to create a simple HTML response to return to the browser.

URL mapping

The structure and code flow in Listing 1 are fairly intuitive, but there is a glaring omission. How does the server know to associate the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL to the HelloWorld.doGet method?

You will find the answer to this mystery in the application meta-data. Every Java web application includes a standard meta-data file, called web.xml, which tells the server how to map URLs to servlets.

What is meta-data?

Meta-data is any information that is used to control the operation of software from outside the software itself.

In the Tomcat example apps, the web.xml is found at \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml. The \WEB-INF\web.xml is the standard location of the meta-data file for servlets. If you open this file, you'll see how the server is configured.

The abbreviated web.xml in Listing 2 has just the information we need for our discussion.

Listing 2. Source code for the Tomcat HelloWorld example

     HelloWorldExample HelloWorldExample   HelloWorldExample /servlets/servlet/HelloWorldExample    

Listing 2 shows a typical XML file header referencing the schema for a Java web application descriptor. This is followed by two entries: and.

The call to assigns a logical name, HelloWorldExample, to the HelloWorldExample class, via the and fields.

The call to assigns that logical name to the value, thereby associating the code to the URL.

Note that the field supports wild cards in order to handle a variety of flexible URL mappings.

Other servlet capabilities

В допълнение към картографирането на URL адресите, сървлетите предоставят допълнителни възможности за филтриране и удостоверяване. Филтрите се използват за обработка на заявки, а удостоверяването се използва за присвояване на прости потребители и роли на шаблони на URL. Спецификацията JavaServer Pages (JSP) предоставя поддръжка за генериране на HTML по много по-мощен начин.

Заключение

Тази статия е концептуален преглед на Java сървлетите, включително заявка за URL и обработка на отговор в Java сървър. Разбирането на тези основни елементи на сървърната Java ще ви помогне да интегрирате по-усъвършенствани концепции като сървърно изтласкване и откриване по време на изпълнение на съпоставянето на URL адреси, които са нови в Servlet 4.0.

Тази история „Какво представляват Java сървлетите? Обработка на заявки за Java уеб приложения“ първоначално е публикувана от JavaWorld.