Servlet

  Servlet(服务器端小程序)是使用Java语言编写的服务器端程序,像JSP一样,生成动态的Web页。Servlet主要运行在服务器端,并由服务器调用执行。

Servlet处理的基本流程:

    

(1)客户端通过HTTP提出请求;

(2)Web服务器接收该请求并将其发送给Servlet,若这个Servlet尚未被加载,Web服务器将它加载到Java虚拟机中并执行它。

(3)Servlet程序将接收该HTTP请求并执行某种处理。

(4)Servlet会将处理后的结果向Web服务器返回应答。

(5)Web服务器将从Servlet收到的应答发回给客户端。

Servlet接口中最重要的是Servlet接口,此接口下定义了一个GenericServlet的子类,一般不会继承此类,而是根据所使用的协议选择GenericServlet的子类继承,例如HttpServlet。

实现一个servlet,有三种方法:

(1)实现Servlet接口;

(2)继承GenericServlet(实现service方法);

(3)继承HttpServlet(重写doGet,doPost方法)。

Servlet接口

 public abstract interface Servlet{}

  接口中的方法:

// Servlet实例化之后,置入服务之前精确地调用init方法。在调用service方法之前,init方法必须成功退出。
public void init(ServletConfig config) throws ServletException; //返回一个ServletConfig对象,通过init方法存储ServletConfig对象以便这个方法能返回这个对象。
public ServletConfig getServletConfig(); //Servlet引擎调用这个方法以允许Servlet响应请求。
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException; //允许Servlet向主机的Servlet运行者提供有关它本身的信息。
public String getServletInfo(); //当一个Servlet被从服务中去除时,Servlet引擎调用这个方法。
public void destroy();

  

GenericServlet抽象类

  这个类的存在使得编写Servlet更加方便。它提供了一个简单的方案,这个方案用来执行有关Servlet生命周期的方法以及在初始化时对ServletConfig对象和ServletContext对象进行说明。

public abstract class GenericServlet extends java.lang.Object implements Servlet, ServletConfig, java.io.Serializable

  常见方法:

  1、init方法

 public void init() throws ServletException;
public void init(ServletConfig config) throws ServletException;

init()方法是用来让你对GenericServlet类进行扩充的,使用这个方法时,你不需要存储config对象,也不需要调用super.init(config)。

init(ServletConfig config)方法是一个对这个Servlet的生命周期进行初始化的简便的途径。该方法会存储config对象然后调用init()。如果你重载了这个方法,你必须调用super.init(config)。

  2、service方法

public abstract void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;

这是一个抽象的方法,当你扩展这个类时,为了执行网络请求,你必须执行它。

HttpServlet抽象类

  这是一个抽象类,用来简化HTTP Servlet写作的过程。它是GenericServlet类的扩充,提供了一个处理HTTP协议的框架。在这个类中的service方法支持例如GET、POST这样的标准的HTTP方法。这一支持过程是通过分配他们到适当的方法(例如doGet、doPost)来实现的。

public abstract class HttpServlet extends GenericServlet implements java.io.Serializable

  常见方法:

  1、doGet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException;

  被这个类的service方法调用,用来处理一个HTTP GET操作。这个操作允许客户端简单地从一个HTTP服务器“获得”资源。

  2、doPost

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException; 

  被这个类的service方法调用,用来处理一个HTTP POST操作。这个操作包含请求体的数据,Servlet应该按照他行事。

  3、service

 protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException; 

  公有的service接收到请求时,会抛给保护的那个service,只起一个中转的作用。service中根据哪种方式的请求,再抛给相应的处理方法(get则doGet来处理,post则doPost处理)

  Servlet程序编写完成后,无法立即访问,因为所有的Servlet程序都是以*.class的形式存在的,必须在web.xml文件中进行配置。

 <servlet>
<servlet-name>hello</servlet-name> <!-- 与servlet-mapping对应 --> <servlet-class>com.demo.myservlet</servlet-class> <!-- 包.类名称 -->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern> <!-- 页面的映射路径 --> </servlet-mapping>

  配置表示的是,通过/helloServlet路径即可找到对应的<servlet>节点,找到<servlet-class>所指定的Servlet程序“包.类”名称。

Servlet生命周期

  Servlet程序是运行在服务器端的一段Java程序,其生命周期受到Web容器的控制,生命周期包括加载、初始化、响应、销毁和卸载5个部分。

生命周期中对应的方法:

//Servlet初始化时调用
1 public void init() throws ServletException
//Servlet初始化时调用,可以通过ServletConfig读取配置信息
2 public void init(ServletConfig config) throws Servlet Exception
//Servlet服务,一般不会直接覆写此方法,而是使用doPost()或doGet()方法
3 public abstract void service (ServletRequest req,ServletResponse res) throws Servlet Exception,IOException
//Servlet销毁时调用
4 public void destroy()

各个生命周期的作用:

1、加载Servlet

  (1)Web容器负责加载Servlet,当Web容器启动时或者第一次接收到请求时,容器负责创建Servlet实例。用户通过部署web.xml文件指定Servlet的位置(Servlet所在的包.类名称),成功加载后,Web容器会通过反射的方式对Servlet进行实例化。

  (2)启动时加载Servlet需要在Servlet元素中添加

<load-on-startup>1</load-on-startup>

中间的数字可以为0或自然数,数字越小,优先创建对象

2、初始化

  当一个Servlet被实例化后,容器将调用init()方法初始化这个对象,初始化是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库连接、读取资源文件信息等,如果初始化失败,Servlet会直接被卸载。

  注:在正常情况下,Servlet只会初始化一次,以后每次请求该Servlet时不会创建新对象,使用容器中存放的对象。

3、响应

  当接收到请求后,Servlet将调用service()方法(常用的是doGet()或doPost()方法)进行处理。在service()方法中,Servlet可以通过ServletRequest接收用户的请求,也可以利用ServletResponse设置响应信息。

4、销毁

  当Web容器关闭或检测到一个Servlet要从容器中被删除时,会自动调用destroy()方法,以便让该实例释放掉所占用的资源。销毁也只会被调用一次。

5、卸载

  当一个Servlet调用完destroy()方法,此实例将等待被垃圾收集器所回收。

Servlet获取HttpSession实例,ServletContext实例

HttpSession实例

  在Servlet程序中想要取得一个Session对象,则可以通过HttpServletRequest接口完成

public HttpSession getSession()

  session属于HTTP协议的范畴,而且session操作时使用到了Cookie的处理机制,而Cookie是在每次发送请求的时加在头信息并发送到服务器上的,所有要想取得session肯定要依靠HttpServletRequest接口。

ServletContext实例

  application内置对象是ServletCont接口的实例,表示的是Servlet的上下文。如果要在一个Servlet中使用此对象,直接通过GenericServlet类提供的方法即可。

public ServletContext getServletContext()

   

Servlet跳转

  从一个JSP或者一个HTML页面可以通过表单或超链接跳转进Servlet,那么从Servlet也可以跳转进其他的Servlet、JSP或者其他页面。

客户端跳转

  如Servlet想在客户端跳转,直接使用HttpServletResponse接口的sendRedirect()方法即可,但是需要注意的是,此跳转只能传递session和application范围的属性,无法传递request范围的属性。  

response.sendRedirect();

服务器端跳转

  在Servlet中没有像JSP中的<jsp:forward>指令,所以,要想执行服务器端跳转,必须依靠RequestDispatcher接口中的forward方法完成。

public void forward(ServletRequest request,ServletResponse response) throws ServletException,IOException

  想要使用此接口还需要使用ServletRequest接口中提供的方法进行实例化

public RequestDispatcher getRequestDispatcher(String path)

  服务器跳转后,页面的路径不会发送改变,可以在跳转后的JSP文件中接收到session及request范围的属性。

Servlet小总结的更多相关文章

  1. 第一个servlet小程序

    第一个servlet小程序 com.fry.servlet.HelloServlet package com.fry.servlet; import javax.servlet.ServletExce ...

  2. IDEA使用技巧,如何在JSP中创建Servlet“小程序”

    步骤 1.新建一个java类,实现Servlet接口 2.实现接口中的抽象方法: 3.在web.xml文件中配置好servlet <web-app ......> <servlet& ...

  3. servlet(2) - 利用MyEclipse新建一个servlet - 小易Java笔记

    1.Tomcat在MyEclipse中集成 ==> Window-preferences-MyEclipse-Servers-Tomcat-Tomcat 6.x-点击右侧的Browse,选择你的 ...

  4. 关于Servlet小总结

    目录 Servlet Servlet简介 Servlet简单实现 Servlet注解 Servlet生命周期 启动时加载Servlet Servlet客户端 HTTP请求的结构 Servlet服务器 ...

  5. 第一个servlet小例子

    1.sendForward.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  6. Servlet小示例:jsp页面提交信息Servlet接收并打印输出

    该示例采用doPost方法提交表单,该示例一共包含两个文件. 一个是用来提交用户信息的表单userForm2.jsp,另一个是用来接收参数的Servlet. userForm2.jsp <%@ ...

  7. Servlet小知识点

    1. Sevlet是一个java类,供以其他程序调用,不能独立运行,需要Servlet引擎(Servlet容器)来管理和调度. 2. 服务器启动后,一般只会创建一个Servlet实例对象,init方法 ...

  8. 一个简单的servlet小程序

    servlet是不能单独运行的,他是运行在web服务器或应用服务器上的java程序,或者可以说是在servlet容器上运行的,我们经常使用到的tomcat就是一个servlet容器. 他是处理HTTP ...

  9. Servlet小总结(转)

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

随机推荐

  1. 大雄和哆啦A梦

    题目:大雄和哆啦A梦题目介绍:这个图片名称有点奇怪?! 1,打开链接会看到大雄和哆啦A梦的照片,把它下载下来.就是下面这个图片. 2,用wireshark打开,会看到最后面出现 rar ,还有flag ...

  2. Web登录敲门砖之sql注入

    声明:文本原创,转载请说明出处,若因本文而产生任何违法违纪行为将与本人无关.在百度.博客园.oschina.github .SegmentFault.上面都关于sql注入的文章和工具.看过很多sql注 ...

  3. Python学习笔记 变量

    蒟蒻高举横幅:部分内容转自廖雪峰的Python教学 1.Python是动态语言,即它的变量是没有类型的. !/usr/bin/env python a = 'ABC' print a a = 123 ...

  4. postman 时间戳和加密

    在使用postman进行接口测试的时候,对于有些接口字段需要时间戳加密,这个时候我们就遇到2个问题,其一是接口中的时间戳如何得到?其二就是对于现在常用的md5加密操作如何在postman中使用代码实现 ...

  5. JAVA基础1——字节&位运算

    占用字节数 & 取值范围 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...

  6. input type="radio" 赋值问题

    之前项目中 后台传值 然后赋给单选input   在网上找了好久,现在有时间了,整理一下  ,方便以后有人会用到. $('radio[name="sex"][value'" ...

  7. 自学python笔记(二)

    一:在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍.所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样 ...

  8. 《Linux命令行与shell脚本编程大全》第二十章 正则表达式

    20.1 什么是正则表达式 20.1.1 定义 正则表达式是你所定义的模式模板.linux工具可以用它来过滤文本. 正则表达式利用通配符来描述数据流中第一个或多个字符. 正则表达式模式含有文本或特殊字 ...

  9. URL, URI, URN三者区别

    URL和URN都是URI的子集 URL和URN都是URI,但是URI不一定是URL或者URN URI,URL,URN关系图 关于URL: URL是URI的一种,不仅标识了Web 资源,还指定了操作或者 ...

  10. Carbondata源码系列(二)文件格式详解

    在上一章当中,写了文件的生成过程.这一章主要讲解文件格式(V3版本)的具体细节. 1.字典文件格式详解 字典文件的作用是在存储的时候将字符串等类型转换为int类型,好处主要有两点: 1.减少存储占用空 ...