ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java Servlet 读取网页 > [http://zetcode.com/articles/javaservletreadwebpage/](http://zetcode.com/articles/javaservletreadwebpage/) Java Servlet 读取网页教程向您展示了如何使用 Servlet 在 Java Web 应用中读取网页。 ## Java Servlet Servlet 是响应网络请求的 Java 类。 Java servlet 用于构建 Web 应用。 它们在 servlet 容器(例如 Tomcat 或 Jetty)中运行。 现代 Java Web 开发使用的框架是在 Servlet 之上构建的,包括 Spring 和 Vaadin。 Apache Commons Validator 是用于验证数据的 Java 库。 我们使用此库来验证正确的 URL 值。 ## Java Servlet 读取网页示例 在下面的示例中,我们读取带有`InputStream`的网页,并向客户端显示该页面的 HTML 代码。 网页的名称是从 HTML 表单的`input`标签发送的。 ```java $ tree . ├── nb-configuration.xml ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── service │ │ │ └── WebPageReader.java │ │ └── web │ │ └── ReadWebpage.java │ └── webapp │ ├── index.html │ ├── META-INF │ │ └── context.xml │ └── WEB-INF └── test └── java ``` 这是项目结构。 ```java <dependencies> <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> </dependencies> ``` 我们需要这两个 Maven 依赖项。 `javax.servlet-api`工件用于 servlet。 `commons-validator`依赖项用于数据验证。 `context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/JavaServletReadWebpage"/> ``` 在 Tomcat `context.xml`文件中,我们定义了上下文路径。 它是 Web 应用的名称。 `ReadWebPage.java` ```java 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` Servlet 读取给定网页的内容,并将文本发送给客户端。 ```java response.setContentType("text/plain;charset=UTF-8"); ``` 响应为纯文本,文本编码为 UTF-8。 ```java String page = request.getParameter("webpage"); ``` 我们使用`getParameter()`从请求参数获取网页的名称。 ```java String content = new WebPageReader().setWebPageName(page).getWebPageContent(); ``` `WebPageReader`用于获取网页的内容。 ```java ServletOutputStream os = response.getOutputStream(); os.write(content.getBytes(StandardCharsets.UTF_8)); ``` 我们通过`ServletOutputStream`将数据发送给客户端。 `WebPageReader.java` ```java 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`读取网页的内容。 ```java private boolean validateUrl(String webpage) { UrlValidator urlValidator = new UrlValidator(); return urlValidator.isValid(webpage); } ``` 在阅读网页之前,我们使用 Apache Commons Validator 库中的`UrlValidator`验证 URL。 ```java 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())); } ``` 通过`InputStream`读取网页。 数据被加载到`String`中。 或者,我们可以使用 JSoup 库。 `index.html` ```java <!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> ``` 主页包含表单,该表单将要阅读的网页发送到应用。 请注意,必须以完整的`http(s)://www.example.com`格式输入网页。 ![Java read web page](https://img.kancloud.cn/c5/a1/c5a1b5b66c4e06d1b2aecd169e0e4c41_574x302.jpg) 图:Java 阅读网页 在屏幕截图中,我们可以看到一个简单网页的内容。 在本教程中,我们创建了一个 Java Servlet 应用,该应用读取所选网页的内容,并将 HTML 以纯文本格式发送回客户端。 您可能也对以下相关教程感兴趣: [Java 阅读网页](/articles/javareadwebpage/), [Java Servlet 上传文件](/articles/javaservletuploadfile/), [Java Log4j 教程](/java/log4j/), [Java Servlet RESTful 客户端](/articles/javaservletrestclient/) , [Java `RequestDispatcher`](/java/requestdispatcher/) ,[从 Java servlet 提供纯文本](/articles/javaservlettext/) , [Java servlet 图像教程](/articles/javaservletimage/)或 [Java 教程](/lang/java/)