Servlet-1-什么是Servlet

一、 Servlet是什么

定义:一种按照Servlet标准,使用Java类编写的服务端应用程序,运行在服务器端,并由服务器调用执行,浏览器可直接访问,可以像JSP一样,生成动态的WEB页,。位于客户端和服务器端的一个中间层,负责接收和请求客户端用户的响应。

Servlet可以提供以下功能:
(1)对客户端发送的数据进行读取和拦截
(2)读取客户端请求的隐含数据
(3)运行结果或者生成结果
(4)发送响应的数据

Servlet与JSP的区别:
1、JSP是Servlet技术的扩展,在本质上就是Sservlet,但是两者的创建方式不一样。
2、Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
3、JSP侧重于视图,Servlet主要用于控制逻辑。
4、Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件,可以方便地编写动态网页.

Servlet多数负责对客户端的请求进行处理和调用JavaBean;由JavaBean负责提供可复用的数据以及数据的访问数据等。
而JSP页面主要负责页面的展示,将动态的数据展现给客户,
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层

二、 Servlet的处理流程

Servlet的处理流程:

  1. 客户端(很可能是Web浏览器)通过HTTP提出请求。
  2. WEB服务器接收该请求并将其发送给servlet。如果这个servlet尚未被加载,web服务器将把它加载到Java 虚拟机并且执行它。
  3. Servlet程序将接收该HTTP请求并执行某种处理。 Servlet会将处理后的结果向Web服务器返回应答。
  4. WEB服务器将从Servlet收到的应答发回给客户端。
    在这里插入图片描述

三、Servlet的生命周期

在这里插入图片描述

  1. 加载Servlet
    WEB容器负责加载Servlet,当WEB容器启动的时候或者是在第一次使用这个Servlet的时候,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置(Servlet所在的包.类名称),成功加载之后,WEB容器会通过反射的方式对Servlet进行实例化。
  2. 初始化
    当一个Servlet被实例化之后,容器将调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,例如:建立数据库连接、读取资源文件信息等,如果初始化失败,则此Servlet将被直接卸载。
  3. 处理服务
    当有请求提交时,Servlet将调用service()方法(常用的是doGet()或doPost())进行处理,在service()方法中,Servlet可以通过ServletRequest接收客户的请求,也可以利用ServletResponse设置响应信息。
  4. 销毁
    当WEB容器关闭或者检测到一个Servlet要从容器中被删除时,会自动调用destroy()方法,以便让该实例释放掉所占用的资源。
  5. 卸载
    当一个Servlet调用完destroy()方法后,此实例将等待被垃圾收集器所回收,如果需要再次使用此Servlet的时候,会重新调用init()方法初始化。

四、如何编写和部署Servlet

  1. 编写Servlet
    根据servlet的发展,Servlet的编写有两种写法,分别是:Servlet2.0 和 Servlet 3.0。

(1). Servlet2.0写法:

HelloServlet类:
package com.etch.edu;
……
public class HelloServlet extends HttpServlet {
    
       //序列化  可以自动生成或者自行定义
       private static final long serialVersionUID = 1L;
       public void init() throws ServletException{
            System.out.println("初始化 init 方法");
       }
	   
       public void doGet(HttpServletRequest request, HttpServletResponse response){
              …….
       }
       ……
}
Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
<servlet>
         <servlet-name>helloServlet</servlet-name>
         <servlet-class>com.etch.edu.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
         <servlet-name>helloServlet</servlet-name>
         <url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>

(2)Servlet3.0写法:

HelloServlet类:
package com.etch.edu;
@WebServlet(
        urlPatterns = { "/HelloServlet " }, 
        name = " helloServlet "
)
public class HelloServlet extends HttpServlet {
    
       //序列化  可以自动生成或者自行定义
       private static final long serialVersionUID = 1L;
       public void init() throws ServletException{
            System.out.println("初始化 init 方法");
       }
	   
       public void doGet(HttpServletRequest request, HttpServletResponse response){
              …….
       }
       ……
}
属性名描述
name指定 Servlet 的 name 属性,等价于 <servlet-name>。如果没有指定,则该Servlet的取值即为类的全名。
urlPatterns指定Servlet的URL匹配模式。等价于<url-pattern> 标签。
loadOnStartup指定 Servlet 的加载顺序,等价于<load-on-startup> 标签。当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载;正数的值越小,该servlet的优先级越高,应用启动时就越先加载;当值相同时,容器就会自己选择顺序来加载

编译时会出现找不到servlet包的错误
如果用户使用手工的方式编译一个Servlet的话,则有可能在编译时会出现以下的错误提示:

  1. 软件包 javax.servlet 不存在
  2. 软件包 javax.servlet.http 不存在

这两个Servlet的开发包实际上是保存在%TOMCAT_HOME%\lib\servlet-api.jar路径下,但是由于现在使用javac命令编译的时候,是使用的JAVA> SE环境编译的,但是Servlet本身已经属于JAVA EE的应用范畴,所以就出现了找不到开发包的情况,此时,有两种方式:
一种是通过classpath指定,在classpath中加入此开发包的路径
另外一种方式是将Servlet的开发包保存在%JAVA_HOME%\jdk1.6.0_02\jre\lib\ext目录之中

  1. 部署Servlet:
    (1)原始的编译部署
    利用Java编译器,将具体的Java类进行编译,例如本例中运行编译命令:javac FirstServlet.java 在当前目录中生成FirstServlet.class文件,将FirstServlet.class文件拷贝到WEB-INF文件夹下的classes文件夹下
    (2)利用Eclipse或者IntelliJ IDEA中Tomcat服务器
    打开IE浏览器,在地址栏中输入地址:http://localhost:8080/HelloServlet/FirstServlet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值