Cześć! Witaj na moim blogu poświęconym programowaniu w HTML, CSS i JavaScript. Dziś zaglądamy do historii tagu <applet> – czym był, jak działał, jakie miał atrybuty i dlaczego nie warto używać go w nowych projektach. Zaczynamy!
Co to jest tag <applet> i do czego służył?
Tag <applet> był dawniej standardowym sposobem na osadzanie apletów Java bezpośrednio w HTML. Pozwalał uruchamiać w przeglądarce interaktywne miniaplikacje, animacje i gry, jeśli użytkownik miał zainstalowaną Java Virtual Machine.
W latach 90. i na początku 2000. dawał namiastkę dynamiki na stronach. Już w HTML 4.01 został oznaczony jako zdeprecjonowany, a w HTML5 całkowicie usunięty.
Dzisiejsze przeglądarki nie obsługują apletów Java, a ich uruchamianie wymaga przestarzałych i niezalecanych wtyczek.
Dlaczego porzucono <applet>? Przede wszystkim z powodów bezpieczeństwa oraz przez rozwój JavaScript i WebAssembly, które wyparły Javę z front-endu.
Składnia i podstawowy przykład użycia
Podstawowa składnia tagu <applet> obejmowała wskazanie klasy Javy oraz wymiarów. Parametry przekazywało się przez <param>:
<applet code="NazwaKlasy.class" width="200" height="100">
<param name="parametr" value="wartość">
Alternatywny tekst, jeśli aplet nie działa.
</applet>
Atrybut code wskazywał plik .class głównej klasy, a element <param> służył do konfiguracji apletu (np. przekazania wiadomości do wyświetlenia).
Prosty przykład – klasyczny „Hello World” z parametrem:
<!DOCTYPE html>
<html>
<head>
<title>Przykład apletu Hello World</title>
</head>
<body>
<applet code="HelloWorld.class" width="300" height="100">
<param name="message" value="Witaj w świecie apletów Java!">
Twoja przeglądarka nie obsługuje apletów. Użyj <a href="nowoczesna-alternatywa.html">nowoczesnej wersji</a>.
</applet>
</body>
</html>
Kod Javy odczytujący parametr wyglądał tak:
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
String message;
public void init() {
message = getParameter("message");
}
public void paint(Graphics g) {
g.drawString(message, 20, 20);
}
}
Uwaga: współcześnie ten kod nie zadziała w przeglądarkach bez archaicznych wtyczek – to wyłącznie demonstracja historyczna.
Pełna lista atrybutów tagu <applet>
Poniżej znajdziesz najważniejsze atrybuty ze specyfikacji HTML 4.01:
| Atrybut | Opis | Przykładowa wartość | Wymagany? |
|---|---|---|---|
| align | Wyrównanie apletu względem tekstu (top, middle, bottom, left, right). | align="middle" |
Nie |
| alt | Tekst alternatywny wyświetlany, gdy aplet się nie ładuje. | alt="Grafika ładowania..." |
Nie |
| archive | Ścieżka do archiwum JAR (szybsze ładowanie wielu klas). | archive="applet.jar" |
Nie |
| border | Grubość ramki wokół apletu (px). | border="2" |
Nie |
| codebase | Bazowy URL dla plików apletu. | codebase="/applety/" |
Nie |
| height | Wysokość apletu w pikselach. | height="200" |
Tak |
| hspace | Poziome odstępy wokół apletu. | hspace="10" |
Nie |
| mayscript | Pozwala apletowi wywoływać JavaScript na stronie. | mayscript="true" |
Nie |
| name | Nazwa apletu (odwołania w skryptach). | name="mojAplet" |
Nie |
| vspace | Pionowe odstępy wokół apletu. | vspace="5" |
Nie |
| width | Szerokość apletu w pikselach. | width="400" |
Tak |
Przykład z wieloma atrybutami – aplet kalkulatora z parametrami:
<applet
code="Kalkulator.class"
codebase="/java/"
archive="kalkulator.jar"
width="250"
height="150"
align="middle"
hspace="20"
vspace="10"
alt="Prosty kalkulator Java"
mayscript="true"
name="kalkulatorAplet">
<param name="operacja" value="dodawanie">
<param name="liczba1" value="5">
<param name="liczba2" value="3">
</applet>
Dzięki mayscript aplet mógł komunikować się z JavaScriptem strony.
Porównanie z innymi tagami do osadzania treści
W HTML5 preferowane są nowocześniejsze mechanizmy. Poniżej krótkie porównanie:
| Tag | Zastosowanie | Obsługa w HTML5 | Bezpieczeństwo | Przykład użycia |
|---|---|---|---|---|
<applet> |
Aplety Java (przestarzałe) | Nie | Niskie | Legacy code |
<embed> |
Ogólne osadzanie (np. PDF) | Tak | Średnie | <embed src="plik.pdf"> |
<object> |
Osadzanie z kontrolą typu i fallbackiem | Tak | Średnie | <object data="plik.pdf"> |
<iframe> |
Osadzanie stron/ramki | Tak | Wysokie (sandbox) | <iframe src="app.html"> |
<canvas> |
Rysowanie i animacje przez JS | Tak | Wysokie | Render 2D/3D |
Zalecenie: w 2026 roku stawiaj na <canvas>, WebGL/WebGPU i JavaScript, a pluginy osadzaj tylko świadomie przez <object> lub <embed>.
Przykłady zaawansowane i interakcja z JavaScript
W erze sprzed HTML5 aplety mogły wywoływać JavaScript dzięki mayscript. Przykład HTML:
<applet code="Komunikator.class" name="komunikator" mayscript="true" width="200" height="100">
<param name="wiadomosc" value="Cześć z Java!">
</applet>
<button onclick="wywolajAplet()">Wywołaj aplet</button>
<script>
function wywolajAplet() {
document.applets['komunikator'].zrobCos(); // Wywołanie metody Java
}
</script>
Kod Javy (wywoływana metoda):
import java.applet.Applet;
public class Komunikator extends Applet {
public void zrobCos() {
getAppletContext().showStatus("Działa!");
}
}
Takie integracje działały w dawnych przeglądarkach (Netscape, IE6), dziś są praktycznie niemożliwe i niezalecane.
Dlaczego nie używać <applet> w nowych projektach? Nowoczesne alternatywy
- Brak wsparcia – przeglądarki jak Chrome, Firefox i Edge usunęły wtyczkę Java w latach 2016–2017;
- Bezpieczeństwo – aplety były wektorem ataków (liczne exploity);
- Wydajność – natywny JavaScript jest lżejszy i szybszy;
- Standardy – HTML5 promuje działanie bez wtyczek.
Nowoczesne zamienniki – oto sprawdzone kierunki:
- animacje i gry –
<canvas>+ JavaScript lub Three.js; - aplikacje interaktywne – WebAssembly (C++/Rust → WASM);
- osadzanie podstron –
<iframe sandbox>z odpowiednimi politykami zabezpieczeń.
Przykład „Hello World” na <canvas> – prosty odpowiednik bez Javy:
<!DOCTYPE html>
<html>
<body>
<canvas id="canvas" width="300" height="100" style="border:1px solid #ccc;"></canvas>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
ctx.fillStyle = 'blue';
ctx.font = '16px sans-serif';
ctx.fillText('Witaj w Canvas! (z JS)', 10, 50);
</script>
</body>
</html>
To rozwiązanie działa we wszystkich współczesnych przeglądarkach – bez wtyczek i zbędnych ryzyk.