JavaEE Servlet 概述
1.1 了解 Servlet
动态网页,不仅可以动态显示数据,还可以与用户做交互,如完成登录、注册等一系列动作。不同用户访问相同网页时,经常会发现所显示的内容不同,这样的网页就是经过服务器动态生成的。
Servlet 就是一种动态网页技术。Servlet 是由 Java 语言编写的 Web 服务端程序,同其他 Java 程序一样 Servlet 的运行需要 JRE 和 JDK 的支持,同时,Servlet 程序还需要放置在支持 Servlet 的 Web 服务器中运行。目前市面上有很多支持 Servlet 的 Web 服务器,其中,Tomcat 是比较轻便且开源免费的服务器。
Servlet 以面向对象的形式解释了 HTTP 请求和响应内容,它将 HTTP 请求的内容封装为 HttpServletRequest 对象,将响应内容封装为 HttpServletResponse 对象。用户访问某个网址显示的网页内容,就是服务器通过 HttpServletResponse 对象。用户访问某个网址显示的网页内容,就是服务器通过 HttpServletResponse 对象发送到浏览器的数据。
1.2 Servlet 的基本配置
(1)导入 JAR 包。使用 Maven 导入 Servlet 的 JAR 包,在 pom.xml 中添加依赖。
<dependencies>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
(2)编写 Servlet。在 servlet 包内创建类 HelloServlet,继承自 HttpServlet 类,并重写 service 方法。
public class HelloServlet extends HttpServlet {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// 配置 UTF-8 字符集以支持中文
res.setContentType("text/html;charset=utf-8");
res.setCharacterEncoding("UTF-8");
// 获取输出流以输出数据到浏览器中
PrintWriter pw = res.getWriter();
pw.write("我是 Servlet 服务端发送给浏览器的数据:Hello Servlet!");
pw.close();
}
}
(3)配置请求路径。路径配置即指浏览器请求到达 Web 容器,并指定处理该请求的 Servlet 类。需要在 web.xml 中以标签的形式进行配置。
完整的配置包括 “servlet” 标签与 “servlet-mapping” 标签,
-
“servlet” 标签中的 “servlet-name” 标签表示对 Servlet 进行命名,在整个 Web 容器中该值是唯一的。
-
“servlet-class” 标签需要填写完整的类路径。
-
“servlet-mapping” 是请求映射标签,表示 HTTP 请求与 Servlet 类的对应关系,对应关系通过 “servlet-name” 的值进行关联。
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
(4)启动服务器。将编好的项目添加到 Tomcat 中,启动 Tomcat 服务器。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析