यहां एक पूर्ण उदाहरण दिया गया है जो दिए गए वेब पेज की सामग्री को पढ़ता है। वेब पेज एक HTML फॉर्म से पढ़ा जाता है। हम मानक InputStream
कक्षाओं का उपयोग करते हैं, लेकिन इसे JSoup लाइब्रेरी के साथ अधिक आसानी से किया जा सकता है।
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.6</version>
</dependency>
ये मावेन निर्भरता हैं। URL स्ट्रिंग्स को मान्य करने के लिए हम Apache Commons लाइब्रेरी का उपयोग करते हैं।
package com.zetcode.web;
import com.zetcode.service.WebPageReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ReadWebPage", urlPatterns = {"/ReadWebPage"})
public class ReadWebpage extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
String page = request.getParameter("webpage");
String content = new WebPageReader().setWebPageName(page).getWebPageContent();
ServletOutputStream os = response.getOutputStream();
os.write(content.getBytes(StandardCharsets.UTF_8));
}
}
ReadWebPage
सर्वलेट दिए गए वेब पेज की सामग्री को पढ़ता है और इसे वापस ग्राहक के लिए साधारण टेक्स्ट फ़ॉर्मेट में भेजता है। पृष्ठ को पढ़ने का कार्य सौंपा गया है WebPageReader
।
package com.zetcode.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.apache.commons.validator.routines.UrlValidator;
public class WebPageReader {
private String webpage;
private String content;
public WebPageReader setWebPageName(String name) {
webpage = name;
return this;
}
public String getWebPageContent() {
try {
boolean valid = validateUrl(webpage);
if (!valid) {
content = "Invalid URL; use http(s)://www.example.com format";
return content;
}
URL url = new URL(webpage);
try (InputStream is = url.openStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is, StandardCharsets.UTF_8))) {
content = br.lines().collect(
Collectors.joining(System.lineSeparator()));
}
} catch (IOException ex) {
content = String.format("Cannot read webpage %s", ex);
Logger.getLogger(WebPageReader.class.getName()).log(Level.SEVERE, null, ex);
}
return content;
}
private boolean validateUrl(String webpage) {
UrlValidator urlValidator = new UrlValidator();
return urlValidator.isValid(webpage);
}
}
WebPageReader
URL को मान्य करता है और वेब पेज की सामग्री को पढ़ता है। यह पृष्ठ के HTML कोड वाली स्ट्रिंग लौटाता है।
<!DOCTYPE html>
<html>
<head>
<title>Home page</title>
<meta charset="UTF-8">
</head>
<body>
<form action="ReadWebPage">
<label for="page">Enter a web page name:</label>
<input type="text" id="page" name="webpage">
<button type="submit">Submit</button>
</form>
</body>
</html>
अंत में, यह HTML फॉर्म वाला होम पेज है। यह इस विषय में मेरे ट्यूटोरियल से लिया गया है ।
servlets
टैग हटाने का रोलबैक क्यों किया ? यहां कोईjavax.servlet.*
एपीआई शामिल नहीं है। एकmain()
विधि के साथ एक सादे वेनिला जावा वर्ग में ऐसा करने पर आपको बिल्कुल वही समस्या होगी ।