- Tomcat ตระหนักถึง Javarush
- Tomcat - มันคืออะไร?
- ส่วนประกอบ Tomcat
- การติดตั้ง Tomcat
- วิธีสร้างเว็บแอปพลิเคชัน
- วิธีฝังแอปพลิเคชันลงในเซิร์ฟเวอร์ที่ทำงานอยู่
- ประโยชน์ของ Tomcat เพื่อการพัฒนา
- ลิงค์เพิ่มเติม
Tomcat ตระหนักถึง Javarush
Tomcat ได้รับการศึกษาที่ระดับ 9 ของภารกิจ Java Collections ในหลักสูตร JavaRush ในการบรรยาย 2 ครั้ง Bilaabo จะบอกวิธีดาวน์โหลดและกำหนดค่า Tomcatรวมถึงสร้างเว็บแอปพลิเคชันแรกของคุณTomcat - มันคืออะไร?
Tomcat เป็นคอนเทนเนอร์เซิร์ฟเล็ตโอเพ่นซอร์สที่ทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ด้วย เมื่อมองแวบแรก Tomcat ดูเหมือนเป็นหัวข้อที่ค่อนข้างหนัก แต่ก็ไม่เป็นเช่นนั้น แอปพลิเคชัน Java ส่วนใหญ่เปิดใช้งานโดยใช้บรรทัดคำสั่งและดำเนินการบางอย่าง แอปพลิเคชันดังกล่าวใช้ฟังก์ชันที่กำหนดไว้ล่วงหน้าหนึ่งฟังก์ชัน หลังจากนั้นฟังก์ชันเหล่านั้นจะไม่ถูกดำเนินการอีกต่อไป โปรแกรมดังกล่าวมักจะมีวิธีการmain
ที่สามารถเปิดใช้งานได้ เว็บแอปพลิเคชันได้รับการออกแบบมาเพื่อโต้ตอบกับลูกค้า หากมีคำขอจากลูกค้า คำขอนั้นจะถูกประมวลผลและส่งการตอบกลับไปยังผู้ใช้ ถ้าไม่เช่นนั้น แอปพลิเคชันจะไม่ได้ใช้งาน จะใช้ตรรกะดังกล่าวในแอปพลิเคชันมาตรฐานได้อย่างไร โดยคุณต้องรองรับเซสชัน ยอมรับคำขอ HTTP ฯลฯ วงจรwhile-true
? ไม่ เราต้องการโซลูชันที่เชื่อถือได้ที่นี่ นั่นคือสิ่งที่ Tomcat มีไว้เพื่อ ในความเป็นจริง มันเป็นแอปพลิเคชัน Java ที่ดูแลการเปิดพอร์ตสำหรับการโต้ตอบกับไคลเอนต์ การตั้งค่าเซสชัน จำนวนคำขอ ความยาวส่วนหัว และการดำเนินการอื่น ๆ อีกมากมาย
ส่วนประกอบ Tomcat
Tomcat มีส่วนประกอบที่ทำหน้าที่เฉพาะที่ควรค่าแก่การรู้ มาดูกันดีกว่าคาทาลิน่า
ด้วยองค์ประกอบนี้ นักพัฒนาจึงมีโอกาสที่จะปรับใช้โปรแกรมของตนในคอนเทนเนอร์ Catalina ใช้ข้อกำหนด Servlet API ซึ่งเป็นเทคโนโลยีเว็บหลักในการเขียนโปรแกรมเว็บ Java ในความเป็นจริง Catalina เป็นคอนเทนเนอร์เซิร์ฟเล็ตภายใน Tomcat (เราจะดูแนวคิดนี้โดยละเอียดด้านล่าง)แจสเปอร์
ด้วยส่วนประกอบนี้โปรแกรมเมอร์จึงใช้เทคโนโลยี JSP สิ่งเหล่านี้เหมือนกับไฟล์ HTML มีเพียงโค้ด Java ที่ฝังไว้ซึ่งสามารถดำเนินการได้เมื่อเพจถูกส่งไปยังผู้ใช้ ซึ่งจะทำให้คุณสามารถฝังข้อมูลใดๆ ลงในเพจได้แบบไดนามิก Jasper เปลี่ยนโค้ด Java เป็น HTML และยังติดตามการเปลี่ยนแปลงและอัปเดตโดยอัตโนมัติโคโยตี้
นี่เป็นองค์ประกอบสำคัญที่รับฟังคำขอ HTTP จากไคลเอนต์บนพอร์ตเฉพาะ ให้ข้อมูลนั้นสำหรับการประมวลผลในแอปพลิเคชัน และยังส่งคืนการตอบกลับไปยังผู้ใช้อีกด้วย นั่นคือ Coyote ใช้ฟังก์ชันการทำงานของเซิร์ฟเวอร์ HTTP ส่วนประกอบเหล่านี้สามารถอธิบายเชิงโครงสร้างได้ด้วยแผนภาพต่อไปนี้: แผนภาพโดยประมาณของการโต้ตอบของส่วนประกอบต่างๆ จะแสดง "บนนิ้ว" ในความเป็นจริง วิธีการทำงานของ Tomcat นั้นซับซ้อนกว่ามาก แต่ก็เพียงพอแล้วสำหรับความเข้าใจพื้นฐานการติดตั้ง Tomcat
หากต้องการใช้ Tomcat ใน Java จำเป็นต้องติดตั้งบนระบบ คุณสามารถอ่านเกี่ยวกับวิธีติดตั้ง Tomcat ได้ในบทความนี้ ซึ่งครอบคลุมถึงแอปพลิเคชันเซิร์ฟเวอร์อื่นๆ ด้วย ดังนั้น การมี Tomcat ที่ใช้งานได้ในตัวใน IDEA คุณสามารถลองเตรียมเซิร์ฟเล็ตแรกของคุณได้วิธีสร้างเว็บแอปพลิเคชัน
หากต้องการสร้างเว็บแอปพลิเคชัน คุณต้องยึดตามโครงสร้างโฟลเดอร์เฉพาะ IntelliJ IDEA มีฟังก์ชันการสร้างแอปพลิเคชันเว็บในเมนูการสร้างโครงการ เมื่อสร้างโปรเจ็กต์ในลักษณะนี้ คุณจะเห็นโครงสร้างที่เรียบง่าย: ใน src มีแหล่งที่มาเช่นเคย และในโฟลเดอร์เว็บ web.xml และ index.jsp จะถูกสร้างขึ้น web.xml เป็นคำสั่งสำหรับ Tomcat ที่จะค้นหาตัวจัดการคำขอและข้อมูลอื่นๆ index.jsp คือหน้าหลักของเว็บแอปพลิเคชันที่ผู้ใช้ควรไปก่อน (นี่คือการกำหนดค่าเริ่มต้น) ในการรันครั้งแรก คุณสามารถแก้ไขไฟล์ index.jsp ได้:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
หากติดตั้ง Tomcat โดยตรงใน IDEA คุณสามารถเริ่มต้นแอปพลิเคชันเซิร์ฟเวอร์ได้: ไคลเอนต์ได้รับเนื้อหาของไฟล์ index.jsp ในเบราว์เซอร์เมื่อนำทางไปที่ '/' นั่นคือไปยังหน้าหลัก ตอนนี้เรามาเพิ่มลิงค์ไปยังหน้าที่จะแสดงเวลาเซิร์ฟเวอร์ปัจจุบัน หากต้องการสร้างเซิร์ฟเล็ตแรก คุณต้องใช้ไลบรารี servlet-api.jar ที่มาพร้อมกับ Tomcat (สามารถพบได้ในโฟลเดอร์ lib) มาสร้างเซิร์ฟเล็ตที่จะแสดงเวลาเซิร์ฟเวอร์ปัจจุบันบนเพจกัน เมื่อต้องการทำเช่นนี้ คุณต้องสร้างชั้นTimeWorker
เรียน มาวางไว้ในโฟลเดอร์ src/ru/javarush/tomcat:
package ru.javarush.tomcat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
public class TimeWorker extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Date date = new Date();
req.setAttribute("date", date.toString());
req.getRequestDispatcher("time.jsp").forward(req, resp);
}
}
TimeWorker
สืบทอดมาจากคลาสHttpServlet
และแทนที่doGet
. ในวิธีนี้เราได้รับพารามิเตอร์สองตัว - request
และresponse
. ตามตัวอย่าง แอ็request
ตทริบิวต์ที่มีชื่อdata
และมีสตริงที่แสดงถึงวันที่ปัจจุบันจะถูกจัดเก็บไว้ จากนั้นจะถูกเรียก และพารามิเตอร์ และrequestDispatcher
ถูกส่งผ่านไป ตัวจัดการได้ถูกสร้างขึ้นแล้ว ตอนนี้คุณต้องส่งคำขอถึงเขาโดยเฉพาะ ให้การเปลี่ยนแปลงใด ๆ นำไปสู่หน้า time.jsp เปิด web.xml แทรกการกำหนดค่าต่อไปนี้ระหว่างแท็ก: request
response
/time
<web-app>
<servlet>
<servlet-name>timeWorker</servlet-name>
<servlet-class>ru.javarush.tomcat.TimeWorker</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>timeWorker</servlet-name>
<url-pattern>/time</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
แท็กแรก - servlet
- กำหนดชื่อของเซิร์ฟเล็ตและระบุพาธไปยังคลาสเซิร์ฟเล็ตที่จะประมวลผลคำร้องขอ แท็กที่สอง - servlet-mapping
- ระบุว่าเซิร์ฟเล็ตที่มีชื่อtimeWorker
จะถูกเรียกเมื่อมีการร้องขอwelcome-file-list
- ระบุไฟล์ที่จะถูกเรียกเมื่อเปลี่ยนเป็น
url /
. จะต้องกำหนดค่านี้หากจำเป็นต้องเปลี่ยนไฟล์เริ่มต้น รวมไว้ที่นี่เป็นตัวอย่าง ตอนนี้เมื่อคุณไปที่ วิธีการ ในคลาส
/time
จะถูกเรียกและส่งคืนเพจ time.jsp... ซึ่งไม่มีอยู่ มาสร้างมันถัดจาก index.jsp:
doGet
TimeWorker
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Current server time: <%=request.getAttribute("date")%></h1>
</body>
</html>
จุดเริ่มต้นเป็นแบบคลาสสิก แต่แท็ก
h1
มีการดึงดูดวัตถุ
request
ซึ่งถูกล้อมกรอบด้วย
<%=
และ
%>
นี่คือแท็กเทมเพลต รหัสที่อยู่ในแท็กเหล่านี้จะถูกเรียกก่อนที่จะถูกส่งไปยังไคลเอนต์ อ็อบเจ็กต์
request
มี
response
อยู่ในแท็กดังกล่าวในไฟล์ JSP ใด ๆ ในตัวอย่างนี้ เวลาเซิร์ฟเวอร์ปัจจุบันซึ่งส่งโดยเซิร์ฟเล็ต จะถูกแทนที่ที่
TimeWorker
นั่น เพื่อความสะดวก เราสร้างลิงก์ไปยังไฟล์ index.jsp
/time
:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello world!</h1>
<a href="/time">Узнать текущее время serverа</a>
</body>
</html>
มาดูตัวอย่างกัน:
ตามลิงค์:
เยี่ยมมาก ทุกอย่างใช้งานได้ ในตัวอย่าง เราใช้การเปลี่ยนจากหน้าหลักไปเป็นหน้าเสริม ซึ่งมีการส่งพารามิเตอร์และแสดงให้ผู้ใช้เห็น หากคุณมีปัญหาในการใช้งานเซิร์ฟเล็ต ฉันขอแนะนำให้อ่าน
โพสต์นี้ซึ่งจะให้คำแนะนำในการแก้ปัญหานี้ สำหรับการแนะนำเซิร์ฟเล็ตที่สมบูรณ์ยิ่งขึ้น เราขอแนะนำให้อ่านบทความ (
ตอนที่ 1 ,
ตอนที่ 2 ) ซึ่งผู้เขียนอธิบายรายละเอียดเกี่ยวกับการสร้างแอปพลิเคชันอย่างง่ายโดยใช้เซิร์ฟเล็ตและ jsp
วิธีฝังแอปพลิเคชันลงในเซิร์ฟเวอร์ที่ทำงานอยู่
แม้ว่า Tomcat ในตัวใน IDEA จะเป็นคุณสมบัติที่สะดวกสบาย แต่เว็บแอปพลิเคชันสามารถย้ายไปยังเซิร์ฟเวอร์อื่นและไปยังคอนเทนเนอร์อื่นได้ ลองพิจารณาตัวเลือกเมื่อคุณต้องการฝังแอปพลิเคชันของคุณลงในเซิร์ฟเวอร์ที่ทำงานอยู่แล้ว ขั้นแรก จำเป็นต้องเข้าใจ วัตถุประสงค์และหน้าที่ของคอนเทนเนอร์เซิร์ฟเล็ตเพิ่มเติม โปรแกรมที่แสดงในตัวอย่างข้างต้นเป็นโปรแกรมบนเว็บ คลาสTimeWorker
เป็นเซิร์ฟเล็ต ส่วนประกอบดำเนินการประมวลผลคำขอโดยเฉพาะ ส่วนประกอบเหล่านี้ต้องถูกสร้างไว้ในคอนเทนเนอร์เซิร์ฟเล็ตพิเศษ
วัตถุประสงค์ของคอนเทนเนอร์เซิร์ฟเล็ตคือเพื่อรองรับเซิร์ฟเล็ตและรับรองวงจรการใช้งาน ตัวอย่างที่ง่ายที่สุดของการทำงานของ Tomcat คือการสแกนโฟลเดอร์เฉพาะเพื่อดูว่ามีเซิร์ฟเล็ตใหม่ปรากฏขึ้นหรือไม่ หากใช่ ให้เริ่มต้นและเตรียมพร้อมเพื่อรับคำขอจากลูกค้า หากเซิร์ฟเล็ตได้รับการอัพเดต ให้เตรียมใช้งานใหม่เพื่ออัพเดตส่วนประกอบ เมื่อลบเซิร์ฟเล็ต ให้หยุดการประมวลผลคำขอและลบเซิร์ฟเล็ตออกจาก Tomcat
ฟังก์ชั่นคอนเทนเนอร์เซิร์ฟเล็ต
- การแลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเล็ตและไคลเอนต์
- การจัดระเบียบเซสชันของลูกค้า
- การสร้างสภาพแวดล้อมซอฟต์แวร์สำหรับการทำงานของเซิร์ฟเล็ต
- Идентификация и авторизация клиентов;
- В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Установка сервлета
Tomcat принимает для обработки веб-applications на Java, которые имеют расширение .war. Это How jar, только web. Файлы такого типа объединяют в себе JSP-файлы, сервлеты, class-файлы, статические ресурсы и прочее. При установке такого file в Tomcat происходит его распаковка, а затем запуск, поэтому существует строгое требование к структуре файлов в проекте. Если проект был создан в IDEA, вся структура создана автоматически. Файл war можно создать стандартными средствами IDEA. Для этого необходимо зайти в ProjectStructure -> Artifacts -> Нажать “ +” -> WebApplication: Archive. В открывшемся поле задать Name для итогового war-file, например deployed_war. Ниже необходимо нажать на кнопку Create Manifest… Далее необходимо указать way to папке web проекта. В ней будет создана папка META-INF, в которую будет помещен файл MANIFEST.MF. Далее следует нажать Apply и Ok. Whatбы собрать проект в war-файл, следует во вкладке Build выбрать опцию Build Artifact: В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Теперь можно деплоить этот файл в Tomcat. Деплой applications проще всего выполнить из веб-интерфейса Tomcat. Просто нажмите кнопку выбора file на вкладке Deploy, перейдите к местоположению file WAR и выберите его, затем нажмите кнопку развертывания. В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно примерно таким выводом в консоль: INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 msПольза Tomcat для разработки
Для разработчиков контейнеры сервлетов имеют огромную роль, так How решают целый спектр проблем. Для программирования на Java Tomcat обеспечивает несколько серьезных преимуществ:-
Самое главное, Tomcat может выполнять роль полноценного web-serverа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-server.
-
Tomcat способствует обмену данными между клиентом и сервлетом, обеспечивает программный контекст для веб-приложений, берет на себя функции идентификации и авторизации клиентов, создание сессий для каждого из них.
-
ให้การจัดการเพจ JSP ที่สะดวกมาก ที่จริงแล้วเว็บเซิร์ฟเวอร์สามารถให้บริการได้เฉพาะ html เท่านั้น Jasper ซึ่งเป็นส่วนประกอบของ Tomcat รวบรวมโค้ดที่อยู่ในแท็กเทมเพลตเพจ JSP ให้เป็นไฟล์ HTML ที่ถูกต้องที่ไคลเอ็นต์ได้รับ ตรรกะการสร้างเทมเพลตทั้งหมดอยู่ภายใน Tomcat ทำให้คุณสามารถเพิ่มแม้แต่ตัวสร้างที่ซับซ้อนให้กับรูปแบบ HTML แบบคลาสสิกได้
main
-method มองแวบแรกถ้าดูตัวอย่างข้างต้นก็เป็นไปได้ เซิร์ฟเล็ตของเราถูกดำเนินการโดยไม่มี
main
. อย่างไรก็ตามมันไม่ใช่ Tomcat มีวิธีการของตัวเอง
main
ซึ่งจะถูกเรียกเมื่อเซิร์ฟเวอร์เริ่มทำงาน คุณอาจถูกจับได้ว่าถามคำถามนี้ในการสัมภาษณ์
GO TO FULL VERSION