一、背景介绍:

  HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收 HTML页面的方法。所有的www文件都需要遵循这个标准,也就注定我们的Web的相应模式。 其中我们关注:

“HTTP是一个客户端和服务器端请求和应答的标准(TCP)”

  Web响应模式:Web的响应模式核心是:请求/响应,对应着HTTP中的请求和应答。

“浏览器在地址栏输入响应的URL敲击回车后,浏览器便发送一个Http请求,进而服务器接受到Http请求,服务器接受请求后进行处理,将回应的内容返回给客户端(浏览器)显示。客户端浏览器发送的请求称为request, 服务器端返回的称为response,这种交互都是利用HTTP协议完成度的。”

  在学习的时候,我简单的将客户端和服务器当作简单的两台连接网络的计算机(PC),实际上在我们开发Web项目时,在本地调试时自己的计算机是客户端也是服务器。我们通过一个简单的比喻来描述,Web响应模式。 
  做个比喻: 
  这里我们拿Kenny做个比喻,kenny是客户端,kenny’mom 是服务器,这个时候kenny很饿,说“Mom,get me an apple!”然后他妈就给他了一个苹果。这个时候,他还没吃饱,又说“Mom,getme some Ice cream”,这个时候他妈就去冰箱了一点冰淇淋给他了。如下图所示:

  实际上的是这样:

  以上便是一个简单的对Web响应模式的理解。

二、Servlet工作流程

  浏览器提交的请求是满足Http协议的文本,该文本是由服务器容器,例如Tomcat接受并解析封装成了HttpServletRequest类型的request,所有的HTTP头数据都是可以通过request的对应方法查询到(get),当需要输出给客户端浏览器时,Tomcat将输出流文本封装成HttpServletResponse的response对象,通过设置response的属性,来控制输出的内容。其中,Tomcat利用request和response做为参数,调用Servlet中的方法,例如doget(request,response);

  上述Servlet1的直接把内容反馈给了用户浏览器,客户端接收到服务器的响应的内容。(类比kenny第一次饿了)

  上述Servlet2的查询了数据库或其他的操作,把内容反馈给了客户。(类比kenny吃冰欺凌)

三、Servlet接口&访问方式介绍

  Servlet是实现了javax.servlet.Servlet接口的类,这个接口规定了特定的方法来处理特定的请求,我们只需要实现Servlet相关的方法,Servlet规范是建立在HTTP协议上的,http1.1规范支持OPTIONS/GET/POST/HEAD/PUT/DELETE/TRACE等7种访问方式。下面我们重点介绍Get/Post。

1、GET:表示查询信息,URL中附带少量参数信息,URL总长度不超过255个字符,参数还会在浏览器的地址栏中显示

2、POST:表示提交信息,一般用于提交大数据信息或者文件,提交的内容不收长度限制,也不会在地址栏中显示。

3、HEAD:表示查询文档头信息,服务器返回的文件类型,长度,最后修改时间等等,该方式较少使用。

4、OPTIONS /PUT /DELETE /TRACE:是被声明了但还没有被使用web访问方式,几乎不用。

四、Servlet配置部署

  为了能让Servlet正常运行,需要如下配置

  1. 实现对应的Servlet 例如,FirstServlet.java
  2. 在项目/WebRoot/WEB-INF/web.xml文件中配置Servlet,其中为必填属性,为配置默认参数,Key,Value的形式。取值0或1,配置为1,则Tomcat启动便会加载这个Servlet,如果为0,则有第一次请求这个Servlet时才加载。(这一步将一个编写好的Servlet类配置进了Web.xml,我们知道web.xml中的myFirstServlet对应的就是FirstServlet.java这个Java类)
  3. 当把一个servlet配置进了web.xml后,我们该配置如何通过URL方式来访问进这个Servlet类,也就是调用这个类。这里就要配置,Web.xml中的,指当前web.xml文件中上例配置的Servlet名字,指访问路径,其中通配符*指任意长度的任意字符,?指任意字符。

下面贴出代码

1.实现对应的Servlet 例如,FirstServlet.java

可以在Myeclipse**快捷**的新建出Servlet,单击下图所示

下图需要注意的有三点:

  1. A点是这个Servlet的名字
  2. B点这个是Servlet继承了HttpServlet
  3. C点是这个Servlet生成的相关函数,后文在详细讲解,这里如果不理解可以先忽略。

2.在web.xml文件中配置<\Servlet>

  web.xml的所在的目录是WebRoot/WEB-INF/web.xml

<!-->Web.xml中<-->
<servlet>
<servlet-name>myFirstServlet</servlet-name>
<servlet-class>com.demos.servlet.FirstServlet/FirstServlet.java</servlet-class>
<init-pararm>
<param-name>WelcomeInfo</param-name>
<param-value>Welcome to Servlet world</param-value>
</init-param>
<load-on-startup></load-on-startup>
</servlet>

  其中<servlet> 和 </servlet> 是一对标签,来配置Servlet

  <Servlert-name>配置的是Web.xml中使用这个Servlet的名称。

  <servlert-class>来配置这个Web.xml中<Servlet>的所对应的Servlet的实现类。 

  (说白了这一步我的理解就是,告诉服务器我这有个Servlet,这Servlet 叫什么,到时候有人要用,要用你就调用那个个类)

3.在web.xml文件中配置<\Servlet-mapping>

<!-->上述Web.xml后文<-->
<servlet-mapping>
<servlet-name>myFirstServlet</servlet-name>
<url-patern>Web应用程序的路径/FirstServlet</url-patern>
</servlet-mapping>

  其中<servlet-mapping>是配置Servlet的访问模式,<servlet-name> 使用上述’myFirstServlet‘的这个名字,这个名字就是标识着在Web.xml的一个Servlet类型的量(第二步声明出来的)。 
  <url-patern>来说明了要访问这个Servlet的URL模式,

  可以配置多个url-patern如下:

<servlet-mapping>
<servlet-name>myFirstServlet</servlet-name>
<url-patern>Web应用程序的路径/FirstServlet.jsp</url-patern>
<url-patern>Web应用程序的路径/FirstServlet.php</url-patern>
<url-patern>Web应用程序的路径/FirstServlet.GG</url-patern>
</servlet-mapping>

  这里的配置可一看到后面有.jsp 有 .php 这样的操作可以实现隐藏编程语言的目的,而有些页面也可以用特定的后缀来标识来声明版权(如公司缩写,上文.GG为巧合虚构)

  注意:一个完整的Servlet配置方案需要,Servlet.java类,<servlet>配置,<servlet-mapping>配置。其中<servlet>和<servlet-mapping>配置都是在Web.xml中进行配置。

五、Servlet代码实例

  这里是完整的Servlet代码以及web.xml和对应的实验截图。

  项目结构:<新建Webproject-建包-建Servlet-自动mapping>:

  FirstServlet 代码:

package com.demos.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 = 304496806747823900L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void init() throws ServletException {
// Put your code here
}
}

  这里我们不要在意文件中的细节,只需要注意上述文件中的这里:

public class FirstServlet extends HttpServlet //FirstServlet 继承了HttpServlet
...
PrintWriter out = response.getWriter();//这里就是响应的输出对象 out

  Web.xml的文件:

<?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>Demos</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.demos.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/FirstServlet</url-pattern>
</servlet-mapping>
</web-app>

  结果:F12查看输出源码

  这里我们在浏览器中输入URL后敲击回车会在内容中显示出,“This is class com.demos.servlet.FirstServlet,using the GET method”,这里便是我们输出给用户(用户User指人,客户Clint不一定要是人)的信息,我们按F12可以看出服务器的Servlet返回的所有的信息,在下图的下方显示。 
  其原因是Servlet输出的信息是HTML信息,当浏览器得到这一串信息后,变解析成了一个页面,而页面内容便是中的那串字符。

Servlet介绍以及简单实例的更多相关文章

  1. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  2. OpenLayers简单介绍以及简单实例

    OpenLayers是一个强大的JavaScript包,可以从它的官网免费下载.OpenLayers包含了很多强大的网页地图展示与操作功能,并且能够将不同源的图层展示在同一张地图中,支持各种第三方的地 ...

  3. Servlet(4)—一个简单的Servlet实例

    简单实例 页面请求登陆,提交表单数据 <body> <form action="loginServlet" method="get"> ...

  4. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  5. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  6. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  7. vue路由的简单实例

    vue2.0 和 vue1.0 路由的语法还是有点稍微的差别,下面介绍一下vue-router 2的简单实例: <!DOCTYPE html> <html lang="en ...

  8. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  9. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

随机推荐

  1. yum软件搜索

    安装软件却记不清包名,搜索出所有带SDL的包yum list *SDL* yum install xxx 列出所有的安装套件yum group list yum group install xxx

  2. App启动广告

    需求: App启动的时候获得广告图片链接,如果已经存在,判断是否和本地的相同,不相同才去下载到本地. 流程图: 这些都在广告页的前一个页面操作(logo页或者Application) import a ...

  3. Python并发编程-队列

    队列 IPC = Inter-Process Communication 队列 先进先出 队列的几种方法 #put() #full() #get() #empty() #get-nowait() fr ...

  4. java switch

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha switch 是 开关:转换 的意思. 支持的数据类型 有 : 字节,字符,短整型,整型 ...

  5. NOIP2017 D1T3逛公园

    DP+最短路 两遍最短路判零环 DP转移f[i][j] 到点i的距离比最短路多j时的方案数 #include<bits/stdc++.h> using namespace std; ; s ...

  6. [Codeforces #514] Tutorial

    Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...

  7. [ARC053D]2 つの山札

    题意:给定排列$a_{1\cdots n},b_{1\cdots n}$,执行以下操作$2n-2$次来生成一个长度为$2n-2$的序列:选择$a,b$之一(选择的序列长度要$\geq2$),删除它的第 ...

  8. hdu 1569 最小割

    和HDU 1565是一道题,只是数据加强了,貌似轮廓线DP来不了了. #include <cstdio> #include <cstring> #include <que ...

  9. c# -- Form1_Load()不被执行的三个解决方法

    我的第一个c#练习程序,果然又出现问题了...在Form1_Load() not work.估计我的人品又出现问题了. 下面实现的功能很简单,就是声明一个label1然后,把它初始化赋值为hello, ...

  10. CDOJ 1294 天行廖的游戏 dp 容斥

    天行廖的游戏 题目连接: http://acm.uestc.edu.cn/#/problem/show/1294 Description 天行健,君子以自强不息.地势坤,廖爷以厚德载物 一日在喵哈哈村 ...