Servlet(一)

本文详细介绍了Servlet的概念、特点及其生命周期,通过示例展示了如何配置和运行一个简单的Servlet应用。

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

一、Servlet是什么

Servlet是服务端的applet,服务端的应用,servlet是由Web服务器加载和执行的,servlet从客户端(通过Web服务器)接收请求,执行某种作业,然后返回结果。

Servlet 架构

Servlet 架构
·客户端通过HTTP提出请求.
·Web服务器接收该请求并将其发给servlet。如果这个servlet尚未被加载,Web服务器将把它加载到Java虚拟机并且执行它。
·servlet将接收该HTTP请求并执行某种处理。
·servlet将向Web服务器返回应答。
·Web服务器将从servlet收到的应答发送给客户端。
由于servlet是在服务器上执行,通常与applet相关的安全性的问题并不需实现。要注意的是Web浏览器并不直接和Servlet通信,Servlet是由Web服务器加载和执行的。


二、Servlet的特点:

跨平台,java语言

可扩展,java语言

持久,只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)

安全,从外界调用一个Servlet的唯一方法就是通过Web服务器


三、Servlet生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

Servlet 通过调用 init () 方法进行初始化。

Servlet 调用 service() 方法来处理客户端的请求。

Servlet 通过调用 destroy() 方法终止(结束)。

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。


服务器收到请求后检查是否加载创建Servlet对象,没有的话,加载创建,调用init()初始化,调用service() 处理客户端请求,在服务器停止和重启之前调用destory()。

Servlet没有main函数,由Servlet引擎来控制和调度,init只会被调用一次,并保存在内存中,每次有请求时创建一个线程,单一线程都会调用service方法,然后在根据情况调用doGet和doPost。destory方法执行一次,用来关闭 Servlet 数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。


四、通过实例来介绍一下Servlet工作原理

首先要配置开发环境  JDK+Eclipse+Tomcat   http://www.runoob.com/jsp/eclipse-jsp.

首先新建一个项目Dynamic web project


项目目录结构

deployment descriptor:部署的描述。

src:java代码

build:放入编译之后的文件。WebContent:放进写入的页面。

WebContent:存放web.xml,也可以是jsp文件


新建Servlet继承HttpServlet,重写doGet和doPost

//@WebServlet("/MServlet")
public class MServlet extends HttpServlet {
private static final long serialVersionUID = 1L;   
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().write("ssssssss");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}


在web.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <servlet>
  <servlet-name>test</servlet-name>   <!-- 自定义name -->
  <servlet-class>com.demo.MServlet</servlet-class>  <!--完整包名+类名-->
  </servlet> 
  <servlet-mapping>
  <servlet-name>test</servlet-name>  <!-- 同上 -->
  <url-pattern>/MServlet</url-pattern>  <!--访问的url,去掉了上下文环境  -->
  </servlet-mapping>
</web-app>


在tomcat服务器中跑起来运行,Run As  Server



还有一种方式设置访问的url

在java代码中设置,通过@WebServlet("/MServlet")

@WebServlet("/MServlet")
public class MServlet extends HttpServlet{

}


这样一个小demo就跑起来了


demo中servlet工作原理


一个http请求的过程

首先根据web.xml文件中的<url-pattern>找到对应的<servlet-mapping>

确定<servlet-mapping>中的<servlet-name>,根据<servlet-name>找到<servlet-class>,然后加载执行该class


Servlet可以被映射到多个url上

<servlet-mapping>
  <servlet-name>test</servlet-name>  <!-- 同上 -->
  <url-pattern>/MServlet</url-pattern>  <!-- 访问的url,去掉了上下文环境  -->
  </servlet-mapping>
  <servlet-mapping>
  <servlet-name>test</servlet-name>  <!-- 同上 -->
  <url-pattern>/other/MServlet</url-pattern>  <!-- 访问的url,去掉了上下文环境  -->
  </servlet-mapping>


url可以使用通配符,*.后缀  和   /开头/*结尾  ,如果url中只有一个/,那么这个url对应的Servlet为缺省的Servlet,当找不到匹配的url时,就会跳转到缺省Servlet

还可以设置<load-on-startup>来让web应用启动时就装载Servlet实例对象,并调用init方法





一篇不错的文章

http://www.cnblogs.com/rocomp/p/4808924.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值