Servlet简介

本文介绍了Servlet的基本概念,包括Servlet API的组成、Servlet的生命周期方法及其作用、Servlet应用程序的目录结构等。同时,还详细讲解了如何通过ServletConfig和ServletContext进行配置信息的管理和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet简介

一. Servlet API 概览

Servlet API有以下四个Java包:

  • javax.servlet,其中包含定义Servlet和Servlet容器之间契约的类和接口。
  • java.servlet.http,其中包含定义HTTP Servlet和Servlet容器之间契约的类和接口。
  • javax.servlet.annotation,其中包含标注Servlet、Filter、Listener的标注。它还为被标注原件定义元数据。
  • javax.servlet.descriptor,其中包含提供程序化登陆web应用程序的配置信息的类型。

Servlet运行流程:

用户请求致使Servlet容器调用Servlet的Service方法,并传入一个ServletRequest实例和一个ServletResponse实例。ServletRequest中封装了当前的HTTP请求,因此,Servlet开发人员不必解析和操作原始的HTTP数据。ServletResponse表示当前用户的HTTP相应,使得将响应发回给用户变得十分容易。

对于每一个运用程序,Servlet容易还会创建一个ServletContext实例。这个对象中封装了上下文(应用程序)的环境详情。每个上下文只有一个ServletContext。每个Servlet实例也都有一个封装Servlet配置的ServletConfig。

二. Servlet

Servlet接口定义了以下5个方法:

void init(ServletConfig config) throws ServletExpection;

void service(ServletRequest request, ServletResponse response) throws ServletExpection,IOExpection;

void destory();

String getServletInfo();

ServletConfig getServletConfig();

init、service和destory是生命周期方法:

  • init,当该Servlet第一次被请求时,Servlet容器会调用这个方法。这个方法在后续请求中不会再被调用。我们可以利用这个方法执行相应初始化工作。调用这个方法时Servlet会传入一个ServletConfig。一般来说你会将ServletConfig献给一个类级变量,因此这个对象可以通过Servlet类的其它点来使用。
  • service,每当请求Servlet时,Servlet容器就会调用这个方法。编写代码时,时假设Servlet要在这里被请求。第一次请求Servlet时,Servlet调用init方法和Service方法。后续的请求只调用Service方法。
  • destory,当要销毁Servlet时,Servlet容器就会调用这个方法,一般会在这个方法中编写清除代码。

getServletInfo和getServletConfig两个方法是非生命周期方法。getServletInfo会返回Servlet的描述,getServletConfig会返回由Servlet容器传给init方法的ServletConfig。

三. Servlet应用程序的目录结构

这里写图片描述
如果想让某一个资源可以被Servlet访问,但不可以被用户访问,那么就要把它放在WEB-INF目录下。要让用户直接访问静态页面放在WEB-INF外面就可以了。

四. ServletRequest

Servlet接口中的一些方法:

//返回请求主体的字节数,如果不知道字节长度,这个方法就会返回-1。
public int getContentLength();

//返回请求主体的MIME类型,如果不知道类型,则返回null。
public String getContentType();

//返回指定请求参数的值
public String getParameter(Strng name);

//返回这个HTTP请求的协议名称和版本
public String getProtocol();

五. ServletConfig

Servlet封装可以通过@WebServlet或者部署描述符传给Servlet的配置信息,这样传入的每一条信息就叫一个初始参数,一个初始参数有key和value两个元件。

为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法。

String getInitParameter(String name);

此外,getInitParameterNames方法则是返回所有初始化参数名称的一个Enumeration:

Enumeration<String> getInitParameterNames();

ServletConfig还提供了另一个很有用的方法:getServletContext。利用这个方法可以从Servlet内部获取ServletContext。

六. ServletContext

ServletContext的下列方法负责处理属性:

Object getAttribute(String name);
Enumeration<String> getAttributeNames();
void setAttribute(String name, Object object);
void removeAttribute(String name);

七. HttpServlet

HttpServlet的两个特性:

  • 不用覆盖service方法,而是覆盖doGet或者doPost,在少数情况下,还会覆盖以下任意方法:doHead、doPut、doTrace、doOptions和doDelete。
  • 使用HttpServletResponse和HttpServletRequest

HttpServletRequest

HttpServletRequest表示HTTP环境中的Servlet请求。它拓展ServletRequest接口,并添加了几个方法,部分方法如下:

//返回表示请求上下文的请求URL部分。
String getContextPath();

//返回一个Cookie对象数组
Cookie[] getCookies();

//返回指定HTTP标题的值
String getHeader(String name);

//返回生成这个请求的HTTP方法名称。
String getMethod();

//返回请求URL中的查询字符串
String getQueryString();

//返回与这个请求相关的会话对象。如果没有,将创建一个新的会话对象。
HttpSession getSession();

//返回与这个请求相关的会话对象,如果没有,并且create参数为True,将创建一个新的会话对象。
HttpSession getSession(boolean create);

HttpServletResponse

void addCookie(Cookie cookie);
void addHeader(String name, String value);

//发送一条响应码,将浏览器跳转到指定位置。
void sendRedirect(String location);
<think>嗯,用户想了解Servlet的基本概念和主要特性。首先,我需要回忆一下Servlet相关的知识。根据之前提供的引用内容,Servlet是运行在支持Java的服务器上的组件,用来扩展Web服务器的功能,特别是替代CGI。引用2提到Tomcat是Servlet容器,负责处理请求和响应,而Servlet则是处理业务逻辑的组件。 Servlet的生命周期由容器管理,包括初始化、处理请求和销毁。引用3和4提到容器加载Servlet,处理HTTP请求,之后请求和响应对象会被销毁。这说明Servlet是单例多线程的,每次请求会复用同一个实例,但每个请求在独立的线程中运行,这样可以高效处理并发。 主要特性方面,Servlet基于Java,所以跨平台;处理请求高效,因为避免了CGI的进程开销;支持各种HTTP方法,如GET、POST;生命周期管理由容器负责,开发者只需关注业务逻辑;还能与其他Java技术集成,比如JSP和JDBC。这些信息需要组织成用户容易理解的回答,结构要清晰,分点说明。 然后要生成相关问题。用户可能对Servlet与CGI的区别、生命周期、线程安全、与Tomcat的关系,以及实际应用场景感兴趣。结合引用中的内容,可以提出这些问题,帮助用户进一步学习。</think>### Servlet的基本概念及特性 #### 1. **Servlet是什么?** Servlet是运行在支持Java语言的服务器上的组件,主要用于扩展Web服务器的功能。它通过处理HTTP请求与响应,实现动态网页生成或业务逻辑处理,是Java EE(现Jakarta EE)规范的核心技术之一[^2][^3]。 #### 2. **Servlet的主要特点** - **基于Java语言**:跨平台且可复用性强。 - **高效性**:与传统的CGI(通用网关接口)相比,Servlet在多线程环境下运行,避免了每次请求创建进程的开销。 - **生命周期管理**:由Servlet容器(如Tomcat)控制初始化(`init()`)、请求处理(`service()`或`doGet()/doPost()`)和销毁(`destroy()`)过程[^3][^4]。 - **协议无关性**:虽然主要用于HTTP,但也可扩展支持其他协议。 - **集成性**:可与JSP、JDBC等技术结合,构建完整Web应用。 #### 3. **核心功能** - **处理HTTP请求**:解析客户端请求参数、头信息等。 - **生成动态响应**:返回HTML、JSON或二进制数据(如图片)。 - **会话管理**:通过Cookie或URL重写跟踪用户状态。 - **资源交互**:连接数据库、调用外部API等。 #### 示例:简单Servlet代码结构 ```java public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<h1>Hello, Servlet!</h1>"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值