一.前言

  小生不才,大二下半学期第二个星期,近11月博客园。星期六闲来看看经典书。重温下Serlvet。

二.温故而知新:超文本转移协议HTTP

   HTTP协议是通过互联网(internet)或企业内部网(intranet)交换数据。介绍下http请求,http响应的过程。

   #KFC点全家桶

    HTTP实现的是资源的请求和传送,类似点单。
      1)请求(request)  :小姐向服务员post请求:“来个全家桶”。(post,get是最常用的,下文HttpServlet中会涉及.)
      2)回复(response):服务员根据情况,回应顾客的请求。

   #多发情况-服务员的响应

      1)服务员准备全家桶,交给小姐。(返回 200 成功状态码)
      2)服务员今天不销售全家桶,反馈无。(无法找到某资源)
      3)服务员将命令转给准备的厨师。(重定向)

三.Servlet  API (自顶向下模式讲解)

    ①展示下javax.servlet.http中主要的类型。

       

                           KFC组织图(Serlvet 重要成员)

   
     ②javax.servlet.Servlet
       先搞个kfc机构出来--引例

       #MyServlet类

package sedion.jeffli.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet; @WebServlet(name = "MyServlet" , urlPatterns = {"/my"})
public class MyServlet implements Servlet{ private transient ServletConfig servletConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return servletConfig;
} @Override
public String getServletInfo() {
// TODO Auto-generated method stub
return "M 0333333333y Servlet";
} @Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.servletConfig = arg0;
} @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
String servletName = servletConfig.getServletName();
arg1.setContentType("text/html");
PrintWriter writer = arg1.getWriter();
writer.print("<html><head></head><body>Helo:"+servletName+"</body></html>"); } }
      然后web工程部署,tomcat 7 注意要7。然后火狐敲入:http://localhost:8080/web工程名/my

         解剖(小生温州医科大学,恶心一下提提神)

        One!※take care

         @WebServlet(name = "MyServlet"  , urlPatterns = {"/my"})
         WebServlet注解类型来声明一个Servlet。在声明同时,还可以告诉容器那个URL调用这个Serlvet。name是可选的,urlPattern也是可选的,但几乎都会用到它。urlPattern告诉容器,/my模式可以调用这个MyServlet。(一个通道,方便购买全家桶,小姐你要吗?)
         自然用web.xml部署描述也是可以的。

        Two!

           MyServlet类,重写了Servlet类中的init→service→destroy方法,属于Servlet生命周期方法。  
      

      #ServletRequest

      getParameter最常用的方法。通常用来返回一个html表单域的值。也可以用来获取查询字符串的值。例,利用URL调用:      
     http://localhost:8080/servletTest/my?id=jeffliId
     就可以用下面语句来获取id的值:

    

String id = request.getParameter("id");

      #ServletResponse

      在调用service方法之前,Servlet容器会创建一个ServletResponse。其中定义的getWriter()方法,返回可将文本床给客户端java.io.PrintWriter。默认PrintWriter对象采用ISO-8859-1编码。

      #ServletConfig

      @WebServlet中以下面这种方式初始化值,值由:键和值。
@WebServlet(
name = "MyServlet" ,
urlPatterns = {"/my"},
initParams = {
@WebInitParam(name="jeffliName",value="QiangqiangLi")
}
)

      #ServletContext

      每个web应用只有一个context,在分布式环境下,一个应用可以同时分布到多个容器,并且每个java虚拟机都有一个ServletCotext对象。 
    ③javax.servlet.GenericServlet

      这个抽象类给我们完成了Servlet接口中所有方法提供默认实现等,方便了我们用。如果MyServlet类继承GenericServlet,我们只需要重写service方法即可。(小姐,你坐着不用走普通流程,我们给你绿色通道。全家桶马上来!)

    

    ※核心

    ④Http Servlet

      Http Servlet两种特性:

        1)不覆盖service方法,而是覆盖doGet,doPost。极少情况下,覆盖doHead,doPut,doTrace,doOptions或doDelete。

        2)用HttpServletRequest和HttpServletResponse 代替 ServletRequest 和ServletResponse。因为将请求相应对象分别从Servlet容器向下转换。

          HttpServletRequest:

            HttpSession getSession() 返回session对象,没有的话,创建新的session对象。

四.Servlet完成一次请求处理的过程:

从客户端(Guest)向服务器发送HTTP请求,该HTTP请求传递给Servlet Container。该Container负责:

  • 分析HTTP请求的信息,并新建request对象,将HTTP请求中的信息放入request对象
  • 新建response对象
  • 根据web.xml(或注释生成),查找URL对应的Servlet对象。如果Servlet对象不存在,则新建相应Servlet对象。
  • 创建新的线程,用于处理本次请求。线程拥有指向request和response对象的引用。

             

五.参考文献[在此感谢]

http://book.douban.com/doulist/3575997/

http://www.cnblogs.com/vamei/archive/2013/05/12/3073932.html

①小姐,来桶全家桶不?(Servlet)的更多相关文章

  1. 南邮 base64全家桶

    这几天不想学逆向 做做crypto(菜还瞎j2做)..... 题目: 全家桶全家桶全家桶!我怎么饿了......密文(解密前删除回车):R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpY ...

  2. IP 基础知识全家桶,45 张图一套带走

    前言 前段时间,有读者希望我写一篇关于 IP 分类地址.子网划分等的文章,他反馈常常混淆,摸不着头脑. 那么,说来就来!而且要盘就盘全一点,顺便挑战下小林的图解功力,所以就来个 IP 基础知识全家桶. ...

  3. 10分钟详解Spring全家桶7大知识点

    Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...

  4. 框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)

    ​ 题外话: 看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boo ...

  5. 一文解读Spring全家桶 (转)

    Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...

  6. 【转】Spring全家桶

    Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflo ...

  7. iOS Keychain钥匙串,应用间数据共享打造iOS上的全家桶

    Demo先行:https://github.com/rayshen/GIKeychainGroupDemo 该demo里有2个工程,你先运行任何一个会存储一个值,再运行另一个会访问之前的app存储的值 ...

  8. 用 Vue 全家桶二次开发 V2EX 社区

    一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...

  9. vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)

    Vue有多优秀搭配全家桶做项目有多好之类的咱就不谈了,直奔主题. 一.Vue 系列一已经用vue-cli搭建了Vue项目,此处就不赘述了. 二.Vue-router Vue的路由,先献上文档(http ...

随机推荐

  1. Java--druidAPI查询

    maven依赖<dependency> <groupId>in.zapr.druid</groupId> <artifactId>druidry< ...

  2. 83、源代码管理工具(Git)

    一.简介 git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git起源 作者是Linux之父:Linus Benedict Torvalds 当 ...

  3. Codeforces Codeforces Round #484 (Div. 2) E. Billiard

    Codeforces Codeforces Round #484 (Div. 2) E. Billiard 题目连接: http://codeforces.com/contest/982/proble ...

  4. 【原创】IO流:读写操作研究(输入流)

    默写代码(以下问题要求能默写,不翻书不百度) 输入 问题一:从文件abc.txt中读取数据到字节数组并打印出来. 分析:如果读取数据,首先第一个问题,数据有多少?如果数据量不确定,如果确定字节数组大小 ...

  5. spring filter lister servlet

    https://blog.csdn.net/nacey5201/article/details/8547772 https://blog.csdn.net/xwl617756974/article/d ...

  6. latex 常用自定义_随时更新

    1.向量定义 代码: \newcommand{\vector}[1]{${#1}_1,{#1}_2,\cdots,{#1}_n$} 效果: a1,a2,...,an

  7. python学习,excel操作之xlrd模块常用操作

    import xlrd ##工作表## #打开excel f = xlrd.open_workbook("test.xlsx") file = f.sheet_by_name(&q ...

  8. Python学习过程中各个难点---函数篇

    对于函数,我一直分不清局部变量与全局变量,今天又好好研究了下,终于搞清楚了. 例子: 其次对于global这个关键字我也是一知半解的状态,之前整个人都是懵懵的,现在搞明白了 匿名函数: 匿名函数使用关 ...

  9. 利用Qt Designer 进行 空间提升propomotion 的时候异常: NO such file or directory

    1. 因为在提升的时候,只设置了 类名,以及文件名,但是没有给定Qt 的uic 的指定搜索路径,因此报错 在生成的ui_xxxx.h文件必然找不到这个文件. 如下图: 2. 解决方法 在项目的属性中: ...

  10. UltraISO制作CentOS 7.6 U盘引导安装盘

    一.制作准备: 1.UltraISO下载安装 2.CentOS镜像文件下载(阿里镜像下载) 二.制作引导盘: 1.电脑插入U盘 2.UltraISO加载镜像文件: 文件->打开->选择对应 ...