servler作用

   转载于:http://www.cnblogs.com/liaoyanglong/p/6155069.html

什么是Servlet

Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类。

在BS架构中,早期的Web服务器只能处理静态资源的请求,也就是无法根据请求进行计算后再生成相应的HTML内容。为了补充Web服务器的这个缺陷,于是增强服务器功能的CGI技术最早产生了。CGI(Common Gateway Interface通用网关接口)也是一种规范,可以使用不同的语言来开发,如Perl,C,Java等都可以。当客户端请求静态资源时,Web服务器会自己处理并返回,当客户端请求动态资源时,Web服务器会把请求转交给扩展程序来处理,并将扩展程序的处理结果返回给客户端。但是CGI技术开发复杂,性能较差,只要有一个请求到达,Web服务器就会单独分配一个进程来进行处理,可移植性不好,所以慢慢就由后来的Servlet技术所取代。

Servlet技术是使用Java语言开发的一套组件规范,不再像CGI技术那样需要分配单独的进程来处理请求,而是单独分配一个线程来处理,于是大大提升了处理效率。并且Java语言是跨平台的语言,也提升了Web服务器扩展程序的可移植性,已经取代了CGI技术,成为BS架构中的主流技术。所有后续的BS架构中的主流框架本质上都是基于Servlet来实现的。

Servlet组件运行原理

Servlet作为补充Web服务器功能的组件,需要依赖于Servlet容器才能运行,它的运行原理如下图所示。

在浏览器中输入请求地址后,浏览器会依据IP地址及端口号找到对应的Web服务器,如果请求的是静态资源,Web服务器直接提供响应;如果请求的是动态资源,Web服务器的通信模块会将该请求传递给Servlet容器的通信模块,Servlet容器负责创建Servlet实例,并将请求中的数据解析出来传递给Servlet。在Servlet处理完数据之后,响应结果也是由容器的通信模块负责返回给Web服务器。后续的Servlet的销毁及管理都由容器来负责。

能够充当Servlet容器这个角色的有很多软件,如Tomcat、Weblogic、JBoss等。而这些Servlet容器不仅仅具备了管理Servlet组件的功能,也具备了Web服务器的一些功能,所以很多时候只要安装一个Tomcat软件就同时具备了Web服务器及Servlet容器的双重功能。

 

Servlet如何运行

Servlet作为Web服务器的补充功能在运行时需要受到Servlet容器的管理,其运行的流程如下:

  1. 浏览器依据IP建立与容器的连接
  2. 浏览器将请求数据打包
  3. 容器解析请求数据包,封装request和response对象
  4. 容器依据请求资源路径找到Servlet创建对象
  5. 容器将request和response对象作为参数传入service方法,并调用
  6. 容器将响应数据打包发给浏览器
  7. 浏览器取出结果,生成页面

Servlet的生命周期

Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。

初始化阶段:

1,Servlet容器加载servlet类,把servlet类的.class文件中的数据读到内存中。

2,然后Servlet容器创建一个ServletConfig对象。ServletConfig对象包含了Servlet的初始化配置信息。

3,Servlet容器创建一个servlet对象。

4,Servlet容器调用servlet对象的init方法进行初始化。



运行阶段:

当servlet容器接收到一个请求时,servlet容器会针对这个请求创建servletRequest和servletResponse对象。

然后调用service方法。并把这两个参数传递给service方法。Service方法通过servletRequest对象获得请求的

信息。并处理该请求。再通过servletResponse对象生成这个请求的响应结果。然后销毁servletRequest和

servletResponse对象。我们不管这个请求是post提交的还是get提交的,最终这个请求都会由service方法来处理。

 

销毁阶段:

当Web应用被终止时,servlet容器会先调用servlet对象的destrory方法,然后再销毁servlet对象,

同时也会销毁与servlet对象相关联的servletConfig对象。我们可以在destroy方法的实现中,释放

servlet所占用的资源,如关闭数据库连接,关闭文件输入输出流等。

 

在这里该注意的地方:

在servlet生命周期中,servlet的初始化和和销毁阶段只会发生一次,而service方法执行的次数则取决于servlet被客户

端访问的次数

<think>我们正在处理一个关于在Eclipse中添加Servlet依赖的问题。根据提供的引用,我们可以总结出以下几点:1.引用[1]和[3]提到了创建Servlet类需要扩展HttpServlet,并覆盖doGet或doPost方法。2.引用[2]提到了使用@WebListener注解来创建监听器,以及注册事件监听器。3.引用[3]提到了使用@WebServlet注解来配置Servlet,包括urlPatterns等属性。4.引用[4]提到了创建包的过程。但是,用户的问题是如何在Eclipse中添加Servlet依赖。添加依赖通常是指将ServletAPI的库(JAR文件)添加到项目的构建路径中。在Eclipse中,为项目添加Servlet依赖有以下几种常见方法:方法1:使用Maven(如果项目是Maven项目)-在pom.xml文件中添加ServletAPI的依赖。-例如:```xml<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency>```方法2:手动添加JAR(非Maven项目)-下载ServletAPI的JAR文件(例如从Maven仓库下载)。-在Eclipse中,右键单击项目->BuildPath->ConfigureBuildPath->Libraries->AddExternalJARs->选择下载的JAR文件。方法3:使用Tomcat等服务器提供的库-如果项目已经关联了一个服务器(如Tomcat),那么可以将服务器运行时库添加到项目中。-在Eclipse中,右键单击项目->BuildPath->ConfigureBuildPath->Libraries->AddLibrary->ServerRuntime->选择已配置的服务器(如ApacheTomcat)。注意:ServletAPI通常在应用服务器中提供,因此在部署时会由服务器提供,所以在开发时我们通常使用provided作用域(Maven)或类似设置,以避免将ServletAPI打包到WAR文件中。根据引用[4],我们还可以注意到,在创建Servlet之前需要创建包,但这不是添加依赖的步骤,而是创建类的步骤。因此,回答用户问题:在Eclipse中添加Servlet依赖,主要是将ServletAPI的库添加到项目的构建路径中。步骤详解(针对非Maven项目):1.下载ServletAPI的JAR文件(例如:javax.servlet-api-3.1.0.jar)。2.在Eclipse中,右键单击项目->Properties->JavaBuildPath->Libraries->AddExternalJARs->浏览并选择下载的JAR文件->ApplyandClose。或者,如果已经配置了服务器运行时(如Tomcat):1.确保在Eclipse中已经配置了服务器(例如Tomcat)。2.右键单击项目->Properties->TargetedRuntimes->勾选已配置的服务器(如Tomcatv9.0)->ApplyandClose。这样就会自动将服务器运行时的库(包括ServletAPI)添加到构建路径。对于Maven项目,则只需在pom.xml中添加依赖,然后更新项目(右键项目->Maven->UpdateProject)即可。根据引用[3]中的注解方式(@WebServlet),我们使用的是Servlet3.0及以上版本,因此需要对应版本的JAR。总结:添加依赖的方法取决于项目类型(是否为Maven项目)以及是否使用服务器运行时。相关问题:1.如何在Eclipse中配置Tomcat服务器?2.如何创建一个简单的Servlet并运行?3.如何解决Eclipse项目中Servlet相关类找不到的问题?4.Servlet3.0规范引入了哪些新特性?5.在非Web项目中可以添加Servlet依赖吗?</think>### 在 Eclipse 中添加 Servlet 依赖的方法 在 Eclipse 中为项目添加 Servlet 依赖,主要有以下两种方法,根据项目类型选择: #### ✅ 方法 1:配置服务器运行时(推荐) 1. **关联服务器** 右键项目 → Properties → **Targeted Runtimes** → 勾选已配置的服务器(如 Tomcat 9/10)→ Apply *(首次使用需先在 Window → Preferences → Server → Runtime Environments 中添加服务器)* 2. **验证依赖** 项目下出现 **Apache Tomcat 库**(包含 servlet-api.jar)即成功: ```plaintext Project ├── src └── Libraries └── Apache Tomcat v9.0 → servlet-api.jar ``` #### ✅ 方法 2:手动添加 JAR(无服务器时) 1. **下载 JAR** 获取 Servlet API 包(如 [javax.servlet-api-4.0.1.jar](https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api)) 2. **导入项目** 右键项目 → Build Path → **Configure Build Path** → Libraries → Add External JARs → 选择下载的 JAR #### 🚩 关键注意事项 1. **作用域设置** 若使用 Maven,依赖需标记为 `<scope>provided</scope>`,避免部署冲突: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> ``` 2. **注解支持** Servlet 3.0+ 支持 `@WebServlet` 注解(如引用[3]所示),无需 `web.xml` 配置: ```java @WebServlet("/demo") public class MyServlet extends HttpServlet { ... } ``` 3. **项目类型** - 动态 Web 项目:需在 **Project Facets** 中勾选 *Dynamic Web Module* - 普通 Java 项目:手动添加 JAR 后即可编译 > **验证成功**:创建继承 `HttpServlet` 的类(如引用[1])时不再报错,可正常覆盖 `doGet()`/`doPost()` 方法[^1]。 --- ### 相关问题 1. 如何在 Eclipse 中配置 Tomcat 服务器运行 Servlet? 2. Servlet 3.0 的注解配置与传统的 `web.xml` 配置有何优劣? 3. 解决 "The import javax.servlet cannot be resolved" 错误的常见方法有哪些? 4. 如何为 Maven 项目添加 Servlet 依赖并设置正确的 scope? 5. 动态 Web 项目和非动态项目添加 Servlet 依赖的主要区别是什么? [^1]: 引用自示例中的 Servlet 实现规范 [^3]: 引用自 Servlet 注解配置方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值