这一阵子在学java三大框架。却在学习过程中发现前面的知识已经忘记了。所以决定写一篇博客来总结回顾之前的学习。


1.Servlet是什么?

  servlet是一个运行在服务器端的小应用程序。通过HTTP协议接受和相应来自Web客户端的请求。

  提到web客户端的请求和对web客户端的响应,必须了解HTTP协议。

2.HTTP协议

  HTTP协议用于定义web浏览器(客户端)和web服务器(服务器端)之间交换数据的过程以及交换的数据的格式。

    (1)请求部分

      请求部分包括请求消息行、请求消息头以及消息正文。

      请求消息行:

         请求方式  URI  协议/版本

         [GET|POST]  uri   http/1.1

      请求消息头

        Accept-[Charset|Encoding|Language]:告诉服务器浏览器可接受的MIME类型(即客户端能接受什么类型的文件)。

        Accept-Charset:客户端浏览器支持哪种字符集

        Accept-Encoding:客户端浏览器能进进行解码的数据编码方式。eg.gzip

        Accept-Language:客户端浏览器希望接受的语言种类。

        Host:初始URL中的主机和端口号

        Referer:包含一个url,用户从该url代表的页面出发访问当前请求的页面。

        Content-Type:内容类型。告诉服务器,客户端浏览器传输数据的MIME类型(文件传输类型).eg.application/x-www-form-urlencoded;

        User-Agent:浏览器类型;IE,Chrome

        Content-Length:请求消息正文的长度

        Connection:表示是否需要持久连接。默认为Keep-Alive(持久连接)。

        Cookie:设置服务器使用Set-Cookie发送的http cookie。

        Date:请求时间

      消息正文:

        当请求方式是POST时,才能看到消息正文

    (2)响应部分

      响应部分包括响应消息行、响应消息头和响应正文

        响应消息行:

         协议/版本  响应状态码  对响应状态码的描述

         HTTP/1.1  200      OK

         响应状态码包括:

           200  正常

           302/307  重定向

           304  未修改(表示当前客户端缓存的版本是最新版) 

           404  服务器上不存在客户端请求的资源

           500  服务器内部错误

        响应消息头:(常用)

          Location:指示新的资源的位置。通常和302/307一起使用完成请求重定向

          Server:apache tomcat指示服务器的类型

          Content-Encoding:gzip服务器发送的数据采用的编码类型

          Content-Length:80 告知客户端浏览器响应正文的长度

          Content-Language:zh-cn 服务器发送的文本的语言

          Content-Type:text/html;charset=GB2312服务器发送的内容的MIME类型(文件的传输类型)

          Refresh:1;url=http://www.xxx.com指示客户端刷新的频率,单位为秒。可用于还剩几秒跳转页面。

          Content-Dispositation:attachment;filename=aaa.zip 告诉客户端这是要下载的文件

          Set-Cookie:xx=xx 服务器端发送的Cookie

        响应正文:

          在网页右键查看源码即可查看

3.Servlet生命周期

    实例化-》初始化-》服务-》销毁

 出生:(实例化new-》初始化init)第一次访问servlet时出生

 活着:(服务service)应用活着,servlet就活着

 死亡:(销毁)应用卸载了,servlet就销毁。

注:可通过在注解@WebServlet中配置load-on-startup,使servlet在服务器启动时就创建

 

4.Servlet的三种创建方式

  (1)实现javax.servlet.Servlet接口

  (2)继承javax.servlet.GenericServlet类(适配器模式)重写service方法

      适配器模式,GenericSelvlet是个抽象类,只有service方法是抽象方法,其余的都已经实现了servlet的方法

  (3)继承javax.servlet.http.HttpServlet类(模板方法设计模式) 常用。但注意不要重写servic()方法。只重写doGet()和doPost()即可。因为HttpServlet的service方法中使用的是doget和dopost方法

5.Serlvet配置url-pattern

    匹配规则:

      优先级:绝对匹配 > /开头匹配 > 扩展名方式匹配

      绝对匹配是指没有使用通配符*,*代表任意字符串。

      /* 任意字符都能识别

      *.字符串  以*.字符串结尾的请求都可以访问。

      /action/*   以/action开头的请求都可以访问

      如果url-pattern的值是/,表示执行默认映射。所有的资源都可以访问。

6.Servlet的线程安全

    Servlet只创建一次,销毁一次。每次访问都是多线程。所以有线程安全问题。所以不要写全局变量,只写局部变量,用户不共用变量。

7.ServletConfig的使用

作用1:获取Servlet的配置信息。

作用2:获得ServletContext对象

 第一种方式获得配置信息,其实就是获得web.xml里面servlet标签下的init-param标签内的param-value
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
第二种方式获得config配置信息*/
String encoding = this.getServletConfig().getInitParameter("encoding"); 第三种方式获得配置信息
String encoding = this.getInitParameter("encoding");//为什么能使用this.get...是因为该类是继承了httpservlet,httpservlet继承了GenericServlet
//然后GenericServlet的getIniParameter()返回servletconfig内的getinitParameter方法,所以
//就可以直接调用。
  

获取ServletContext对象 String name = (String) this.getServletContext().getAttribute("name");

8.ServletContext

    ServletContext代表的是整个应用。一个应用只有一个ServletContext对象。单实例。ServletContext对象实际上就是一个Map(setAttribute和getAttribute)。

常用方法:

  域对象:setAttribute(sString , Object ) ,getAttribute(String ) ,rmoveAttribute(String)

  获取全局配置信息:getInitParameter(String )  根据配置文件中<context-param>标签下的name得到value

  获取资源路径:getRealPath(String path)  根据资源名称得到资源的绝对路径。可以得到当前应用任何位置的任何资源。

  实现servlet的转发:getRequestDispatcher(String path); 参数表示要跳转到那里去。其实质就是请求转发。注意不是重定向。

  

      

java之servlet学习基础(一)的更多相关文章

  1. java之servlet学习基础(二)

    上一次写到Servlet的实现方法,主要还是通过继承HttpServlet来实现Servlet.下面主要是回顾一下HttpServletRequest和HttpServletResponse对象中的一 ...

  2. java web Servlet学习笔记-2 请求重定向和请求转发的区别

    请求转发与请求重定向的区别 请求重定向和转发 1.请求重定向:浏览器的行为(通过响应对象HttpServletResponse来执行) 特点:可以重新定向访问其他Web应用下的资源 浏览器发出了2次请 ...

  3. java web Servlet 学习笔记 -3 会话管理技术

     Cookie和HttpSession 什么是会话: 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 每个用户在使用浏览器与服务器进行会话的过 ...

  4. java Web Servlet学习笔记-1 HttpServletQequest对象的学习

     HttpServletQequest对象的学习 HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求 ...

  5. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  6. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

  7. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  8. [ Java学习基础 ] Java的抽象类与接口

    一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  9. Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)

    本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...

随机推荐

  1. input file禁用手机本地文件选择,只允许拍照上传图片

    <input type="file" accept="image/*" capture="camera"> 会有个问题,上传的图 ...

  2. nodeJs 操作Mysql数据库

    nodeJs下操作数据库需要安装npm模块: mysql npm install mysql --save-dev 新建express项目 express --view=ejs 在项目根目录下新建数据 ...

  3. VC使用双缓冲制作绘图控件

    最近用VC做了一个画图的控件.控件在使用的时候遇到点问题.在控件里画了图之后切换到其他页面,等再切换回来的时候,发现控件里画的图都不见了.这是因为VC里面,当缩小.遮挡页面后客户区域就会失效,当再次显 ...

  4. golang基于etcd实现分布式锁(转)

    下面描述使用 Etcd 实现分布式锁的业务流程,假设对某个共享资源设置的锁名为:/lock/mylock 步骤 1: 准备 客户端连接 Etcd,以 /lock/mylock 为前缀创建全局唯一的 k ...

  5. (转)php读取文件使用redis的pipeline导入大批量数据

    第一次写博客,哈哈,纯属用来记录一下自己工作中遇到的问题及解决办法. 昨天因为工作的需求,需要做一个后台上传TXT文件,读取其中的内容,然后导入redis库中.要求速度快,并且支持至少10W以上的数据 ...

  6. java获取当前日期所在的周的周一,并以周一为一周开始

    public String getMonday(String date) { if (date == null || date.equals("")) { System.out.p ...

  7. 想拥有自己的Python程序包,你只需15步

    来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...

  8. Day09 -超级经典面试题:Ruby的a ||= b(or-equals)是什么意思呢?

    前情提要: 写了这一系列下来,发现Ruby有许多特别的方法.前几天提到String字串,并且接续着在第八天我们了解串接(concatenate)与插入interpolation#{}方法(就连加号+也 ...

  9. 手机访问电脑端Wampserver2.4-x64服务

    我用的Wampserver2.4-x64 1. 先确保你的手机和电脑连在同一个局域网内. 2. Window + R, 然后输入 ipconfig,然后获取ip地址, 长这样: 192.168.XX. ...

  10. PTA变成总结1

    1)实验代码 #include<stdio.h>int main(){ int N,k,n,i,j,p,m,ge; char op; while(1){  scanf("%d % ...