Servlet学习笔记之ServletDemo

一、什么是Servlet

  1、什么是Servlet?

  维基百科上有写:Java Servlet 是Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet是是不能够独立运行的,Servlet运行在Web容器里面。(什么是Web容器?Web容器是一个特殊的JVM,它负责维护Servlet的生命周期及为每个请求生成线程)

  2、Servlet有什么用?

  Servlet承担的功能可以理解为三点:1)接收客户端的请求;2)自己处理或者调用逻辑层的API处理请求;3)处理结果返回应答给客户端。

  3、请求/应答模式(最常用的是基于HTTP 协议传输)

  

  注意几点:

    1)大多数的传输是基于HTTP协议的;

    2)一次HTTP调用是指一个请求和应答来回;

    3)HTTP协议是面向连接的;(即,经过一次调用后会断开(节省资源,但延长时间),现在也有长连接(能缩短响应时间))

    4)HTTP协议是无状态的。(即,服务器答应后不再保留客户端信息)

二、Servlet主要API

  ServletAPI主要在javax.servlet包里面:

  关于Servlet的的主要API,这里主要是思考一下它的设计思路,以下是三个问题:1)三个接口的来源;2)什么时候使用抽象类;3)为什么抽象类分为了两层?下面逐一分析:

  1、三个接口的来源:Servlet接口,原理上只要实现了这一个接口就可以建立一个Servlet类,但是这样的话里面有一些方法就要自己去实现了;ServletRequest接口,用来接受请求内容;ServletResponse接口,用来返回应答给客户端。

  2、什么时候使用抽象类:抽象类和接口的区别在于抽象类可以定义实现一些方法的同时又可以对其子类进行约束。也就是在上图中的抽象方法可以实现接口的部分方法,对于不能实现的又可以以抽象方法的形式对其子类进行约束,让其子类实现其还没有实现的方法。

  3、为什么抽象类分开为两层:便于扩展,因为这里的设计思路是先建立一个原型的抽象Servlet类,原型Serrvlet之后可以依据不同的通讯协议再建立一个基于某一个协议的Servlet抽象类,例如这里的是Http协议的Servlet抽象类,如果以后有扩展可以继承原型抽象类建立另一个协议的Servlet抽象类。

三、搭建ServletDemo

 (一)、web应用的基本结构:

    —WEB-INF

    — —web.xml(部署描述文件,项目必备,web服务器对项目解析时首先读取该文件)

    — —classes(用来存放程序的字节码文件)

    — —lib(用于存放程序执行需要的jar包)

  (二)、Servlet

    1、DemoServlet.java

 1 package com.kwan.web.servlet;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 public class DemoServlet extends HttpServlet {
12
13     private int initCounter = 0;
14     private int doCounter = 0;
15     private int serviceCounter = 0;
16     private int destroyCounter = 0;
17     private String str = "";
18
19     @Override
20     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
21         doPost(req, resp);
22     }
23
24     @Override
25     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
26         System.out.println("-----doGet or doPost-----");
27         doCounter++;
28         PrintWriter pw = resp.getWriter();
29         str += "Thank you! " + doCounter + "\n";
30         pw.write(str);
31         pw.close();
32     }
33
34     @Override
35     protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
36         System.out.println("-----service-----");
37         serviceCounter++;
38         super.service(arg0, arg1);
39     }
40
41     @Override
42     public void destroy() {
43         System.out.println("-----destroy-----");
44         destroyCounter++;
45         System.out.println("-----end-----");
46         System.out.println("initCounter="+initCounter);
47         System.out.println("serviceCounter="+serviceCounter);
48         System.out.println("doCounter="+doCounter);
49         System.out.println("destroyCounter="+destroyCounter);
50     }
51
52     @Override
53     public void init() throws ServletException {
54         System.out.println("-----init-----");
55         initCounter++;
56     }
57
58 }

    2、web.xml

 1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2
 3 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 4   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 6                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 7   version="3.0"
 8   metadata-complete="true">
 9
10     <servlet>
11         <servlet-name>DemoServlet</servlet-name>
12         <servlet-class>com.kwan.web.servlet.DemoServlet</servlet-class>
13     </servlet>
14
15     <servlet-mapping>
16         <servlet-name>DemoServlet</servlet-name>
17         <url-pattern>/demo</url-pattern>
18     </servlet-mapping>
19
20 </web-app>

    3、index.html

1 <html>
2     <body>
3         <form method="post" action="/DemoServlet/demo">
4             <input type="submit"></input>
5         </form>
6     <body>
7 </html>

四、Servlet的生命周期

上面的小例子运行后,点击五次submit之后再退出会看到下面的显示结果:

  这里只是说明Servlet生命周期中的三个回调方法:init、destroy、service,这三个方法是由web容器调用,而非servlet类调用,而且init和destroy方法只会调用一次。

  Servlet的生命周期是这样的:

  1)web容器加载servlet类,在接收请求时检查实例池是否存在servlet类,若不存在则实例化并调用init方法初始花servlet实例;

  2)web容器接受请求时,调用service方法,在service方法里面可以调用各种方法来处理这些请求;

  3)当servlet实例要销毁前,web容器会调用destroy方法,这个方法可以用来在实例销毁前做一些保留信息的工作。

五、参考资料

1、维基百科 Java_Servlet

2、Java私塾

时间: 2024-08-11 03:35:21

Servlet学习笔记之ServletDemo的相关文章

测试servlet学习笔记

操作方法: 1.新建工程: File-->new-->Java Project-->TestServlet(工程名称)-->Finish. 2.加载servlet-api.jar类包: TestServlet(右键)-->Build Path-->Configure Build Path-->Library -->Add External JAR Selection-->(浏览在tomcat的lib目录下找到servlet-api.jar选中后点击打开

SERVLET 学习笔记

SERVLET 学习笔记 一.Servlet基本定义 Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类.通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容. 二.Tomcat容器等级 Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器.其中,CONTEXT容器,一个CONTEX

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

Servlet学习笔记(七)—— JSP概述

1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐: ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译. 2.注释: (1)JSP备注:<% %>,不会发送到浏览器,不能嵌套 (2)HTML备注:<!-- -->,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面.在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面.

Servlet学习笔记(六)—— 自定义过滤器的编写

Boss今天让我写一个类似BBS留言板的过滤器,要求对字符编码.登录权限.敏感词进行过滤操作. 总体分两模块: 一.过滤器 //Filter.java package lewa; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public interface Filter { public void init(); public void doFilter(ServletRequest reu

Other - 01 - Servlet学习笔记 - 概览

Servlet规范 本文第一段是 copy 过来的,请各位看官谅解,顺序结构参照 Servlet 3.1 规范. 什么是 Servlet Servlet 是基于 Java 技术的 web 组件,容器托管的,用于生成动态内容.像其他基于 Java 的组件技术一样,Servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节码,可以被基于 Java 技术的 web server 动态加载并运行.容器,有时候也叫做 servlet 引擎,是 web server 为支持 servlet

Servlet学习笔记(九)—— 文件下载

一.文件下载概述 例如图片或者HTML这类静态资源,只要在浏览器中打开正确的网址就可以下载.只要资源放在应用程序目录或者其下的子目录中,但不在WEB-INF下,Servlet/JSP容器就会将资源发送到浏览器.但有的时候,静态资源被保存在应用程序目录之外,或者保存在数据库中,或者有时候你需要控制让某些人能够看到这个资源,同时又要防止其他网站引用它.每当遇到这类情况时,就必须通过编程来发送资源. 通过编程的方式实现文件下载可是让我们有选择的将一个文件发送到浏览器. 为了将资源比如文件发送到浏览器,

Servlet学习笔记(八)—— 文件下载

一.文件下载概述 比如图片或者HTML这类静态资源,仅仅要在浏览器中打开正确的网址就行下载.仅仅要资源放在应用程序文件夹或者其下的子文件夹中,但不在WEB-INF下.Servlet/JSP容器就会将资源发送到浏览器. 但有的时候,静态资源被保存在应用程序文件夹之外,或者保存在数据库中.或者有时候你须要控制让某些人可以看到这个资源,同一时候又要防止其它站点引用它.每当遇到这类情况时,就必须通过编程来发送资源. 通过编程的方式实现文件下载但是让我们有选择的将一个文件发送到浏览器. 为了将资源比方文件