【概念】

Servlet通常被称为服务端小程序,是运行在服务端的程序,用于处理及相应客户端的请求。

Servlet是用java语言开发网页动态资源的技术。

【特点】

1.Servlet是个特殊的Java类,这个Java类必须继承HttpServlet类。

2.一个普通的java类实现了Servlet接口,也叫作Servlet程序。通常继承HttpServlet是为了创建一个基于Http协议的Servlet。

3.Servlet程序要部署到服务器(如Tomcat)运行。

【Servlet提供的响应客户端请求的方法】

1. doGet()      用于响应客户端的GET请求。

2. doPost()     用于响应客户端的POST请求。

3. doPut()      用于响应客户端的PUT请求。

4. doDelete()  用于响应客户端的DELETE请求

注:客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。

【Servlet开发1(Servlet3.0之前)】

[ 第1步 ]

编写java类,继承HttpServlet 。重写doGet()和doPost()方法。

package com.Higgin.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public FirstServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet方法执行---");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost方法执行---");
}
}

[ 第2步 ](没有使用IDE的情况下)

把Servlet的class字节码拷贝到WEB-INF/classes目录下

[ 第3步 ]

在web.xml中配置对应的servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      id="WebApp_ID" version="3.0">
<display-name>HelloServlet</display-name> <servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.Higgin.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> </web-app>

【运行结果】

【对于web.xml中Servlet配置的注释】

1.由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把Servlet程序映射到一个URL地址上,这个工作是在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,在servlet3.0之后,可以使用@WebServlet("....")代替。

2.<servlet>元素用于注册Servlet,它包含两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称Servlet的完整类名

3.一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问的路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称Servlet的对外访问名称

  <!-- 配置一个Servlet -->
<servlet>
<!-- Servlet内部名称,自定义 -->
<servlet-name>FirstServlet</servlet-name>
<!-- Servlet的 类全名 -->
<servlet-class>com.Higgin.servlet.FirstServlet</servlet-class>
</servlet>
<!-- Servlet的 映射配置 -->
<servlet-mapping>
<!-- Servlet的内部名称,一定要和上面的保持一致 -->
<servlet-name>FirstServlet</servlet-name>
<!-- Servlet的映射路径(访问Servlet的名称) -->
<url-pattern>/test</url-pattern>
</servlet-mapping>

【Servlet开发2:利用Servlet3.0新特性@WebServlet注释】

最大不同:直接在对应的Servlet类名(如上面的FirstServlet类)上加上注释@WebServlet("/test"),无需在web.xml中进行配置就可以实现相同的效果。

package com.Higgin.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class FirstServlet
*/
@WebServlet("/test")
//servlet3.0新特性
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public FirstServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet方法执行---");
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost方法执行---");
} }

 【Servlet的执行过程】

前提:TomCat服务器启动,首先加载webapps中的每个web应用的web.xml配置文件。

1.在浏览器输入对应的url, http://localhost:8080/HelloServlet/test

2.截取到URL的字符串,得到需要访问的资源名称:     /test

3.在HelloServlet网站下的web.xml信息中搜索是否存在  /test匹配的  url-pattern。

4.匹配到对应的url-pattern之后,取出当前映射信息中的servlet-name的名称,然后在web.xml信息中搜索是否存在一个相同servlet-name名称的servlet配置信息。

5.找到对应的servlet配置信息之后,取出当前配置信息的servlet-class的内容,即字符串 com.Higgin.servlet.FirstServlet

6.创建FirstServlet对象,然后调用FirstServlet类中的方法。

7.Servlet就把内容返回给浏览器用户。

【关于http://localhost:8080/HelloServlet/test】

浏览器中输入:http://localhost:8080/HelloServlet/test

http ://             http协议(1.本地hosts文件查找域名和ip映射 2.找不到,联网到DNS服务器找有名和ip映射器 )

8080      端口 (TomCat:8080)

/HelloServlet      站点下的web应用名称

/test       资源名称,截取到/test 字符串

          1.在HelloServlet应用下的web.xml文件中查找是否存在匹配的url-pattern

          2.使用Servlet的内部名称在web.xml文件中查找是否存在相同名称的Servlet配置

          3.得到对应的servlet-class内容,字符串 com.Higgin.servlet.FirstServlet

通过反射构造HelloServlet对象,调用方法(doGet///),将内容返回输出到浏览器,看到效果。

【关于Servlet接口的实现类HttpServlet】

Servlet接口定义了两个默认实现类:HttpServlet和GenericServlet。

* HttpServlet指能够处理HTTP请求的Servlet,它在原有的Servlet接口上添加了一些与HTTP协议处理相关的方法,它比Servlet接口的功能更为强大。因此在编写Servlet时,通常应该继承这个HttpServlet类,避免直接去实现Servlet接口。

* HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如果为GET请求,则调用HttpServlet的doGet方法;如果为POST请求,则调用doPost()方法。因此,我们在编写Servlet时,通常只需要编写doGet()或doPost()方法,而不需要去复写service方法。

11_Servlet基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  2. Java路径操作具体解释

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...

  3. windows身份验证模式和SQL server身份验证模式 有什么不同

    两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...

  4. 如何在mac上創建txt文档

    文件編輯(Mac下的記事本),shift + command + T 進入純文字編輯模式!

  5. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...

  6. jsp:session对象存储数据

    public void setAttribute(String key,Object obj).session对象可以调用该方法将参数object指定的对象obj添加到session对象中,并为添加的 ...

  7. Swift和OC相互调

    在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , ...

  8. java.lang.SecurityException: Permission denied (missing INTERNET permission?) 解决

    Android app里试图用HttpUrlConnection获取网络连接,忘记在AndroidManifest清单文件里声明需要用到Internet的权限,运行时报此错误. 解决方法 在Andro ...

  9. 深入理解计算机系统第二版习题解答CSAPP 2.14

    假设x和y的字节值分别为0x66和0x39.填写下表,指明各个C表达式的字节值. 0x66 = 0110 0110(B) 0x39 = 0011 1001(B) 表达式 值 x & y 0x2 ...

  10. innodb对update的处理

    当更新非聚集索引上记录 和 聚集索引上的主键时,是标记删除,然后插入新的记录 当更新聚集索引上的非主键列时,是updated-in-place,也就是说原地修改,不会插入新记录. 之前一直以为都是以标 ...