HTTP协议

HTTP协议——超文本传输协议,用于定义web浏览器和web服务器之间数据交换的过程,遵守一定的通讯的格式;

HTTP请求——包括请求行和多个信息头

  • 请求行:包含请求方式(常用的GET、POST等)、URL(可附加参数,在URL后接?,若多个数据可用&隔开)、HTTP的版本号
  • 信息头:
  1. Accept:表示浏览器所支持的数据类型
  2. Accept-Charset:表示浏览器所支持的字符集
  3. Accept-Language:表示浏览器的语言环境
  4. Accept-Encoding:表示浏览器支持的压缩格式
  5. Host:告诉服务器所要访问的主机
  6. If-Modified-Since:告诉服务器缓存数据的时间
  7. Referer:告诉服务器客户机是从哪个页面来的,防盗链
  8. Connect:请求完后是断开连接还是保持连接

HTTP响应——包含状态、信息头、实体内容

  • 状态行:HTTP版本号、状态码、原因叙述(如:OK)
  • 信息头:
  1. Location:告诉浏览器跳到哪(重定向)
  2. Server:告诉服务器的型号
  3. Content-Encoding:告诉浏览器数据的压缩格式
  4. Content-Language:告诉浏览器的语言环境
  5. Content-Type:告诉浏览器回送数据的类型
  6. Contennt-Length:告诉浏览器数据的长度
  7. Refresh:告诉浏览器定时刷新
  8. Content-Disposition:告诉浏览器以下载的方式打开数据
  9. Transfer-Encoding:告诉浏览器数据以分块的方式回送
  10. Expires:-1  :控制浏览器不要缓存

Servlet接口

Servlet是一个用于处理连接请求的接口,处理过程如下:

  1. web服务器检查是否已经装载了该Servlet的实例对象,如果是,直接走3,否则,执行2;(首次访问才会创建目标Servlet)
  2. 装载并创建一个Servlet实例对象,并调用实例对象的init()方法;
  3. 创建一个封装HTTP请求信息的HttpServletRequest对象和一个代表HTTP响应信息的HttpServletResponse对象,后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
  4. WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法;

Servlet接口的实现类:GenericServlet、HttpServlet。

平时用的比较多的是HttpServlet类,它是在原有的Servlet接口上添加了一些HTTP协议处理方法,且覆写了service方法,该方法可以自动判别请求方式,如GET,则调用doGet;如POST,则调用doPost方法,因此我们在编写Servlet时,只需覆写doGet和doPost方法即可;

为了让客户端通过URL访问到Servlet接口程序,我们通常需要在web.xml这个配置文件中配置URL;通过<servlet>和<servlet-mapping>这两对元素完成;

<servlet>包含两个子元素<servlet-name>和<servlet-class>;分别表示Servlet的注册名和完整类名;

<servlet-mapping>包含两个子元素<servlet-name>和<url-pattern>;分别用于指定注册名的对外的访问路径,可以是正则表达式,匹配原则是“越像谁就找谁”;且一个<servlet>可以对应多个<servlet-mapping>;

如果在<url-pattern>中仅设置一个斜杆/,则表示该<servlet>为缺省Servlet,即将匹配不到的url都交给缺省Servlet处理;

Servlet与普通java类的区别是:Servlet是一个供其他java程序调用的java类,不可以单独运行;在Servlet整个生命周期中,只会调用一次init方法,即Servlet实例一旦创建,会被保存在内存中,为其服务后续的请求,而service方法却是每次请求都调用一次;

当有多个客户端连接到同一个Servlet时,Servlet并不会再实例化,而是通过多线程调用service方法进行处理,这个时候就有可能会造成线程的安全问题,而引起这种问题的往往是存在全局变量,当多个service方法调用该变量时就会造成错误,最好的解决方法是设置局部变量,即每个线程各种操作各种线程内的变量,互不影响;

java_第一年_JavaWeb(2)的更多相关文章

  1. java_第一年_JavaWeb(14)

    EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...

  2. java_第一年_JavaWeb(13)

    JSTL标签库——核心标签库 为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了: 核心标签库从功能上可 ...

  3. java_第一年_JavaWeb(11)

    自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...

  4. java_第一年_JavaWeb(15)

    Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...

  5. java_第一年_JavaWeb(12)

    SimpleTag标签 定义了五个方法:setJspContext.setJspBody.setParent和getParent以及最重要的doTag方法(完成了所有的业务逻辑): setJspCon ...

  6. java_第一年_JavaWeb(10)

    JavaWeb的两种开发模式 JSP+JavaBean框架:JavaBean负责封装数据.提供方法,JSP负责处理用户请求和显示数据:只能开发较为简单的业务: JSP+JavaBean+Servlet ...

  7. java_第一年_JavaWeb(9)

    JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...

  8. java_第一年_JavaWeb(8)

    前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...

  9. java_第一年_JavaWeb(7)

    JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...

  10. java_第一年_JavaWeb(6)

    会话 会话:浏览器从打开一个进程访问服务器到该浏览器关闭,我们称之为一个会话: 在浏览器和服务器交互期间,会不可避免地产生一些数据,而为了为每个用户保存其对应的数据,可使用两种技术:Cookie和Se ...

随机推荐

  1. v-cloak解决Vue双大括号闪烁问题

    相信不少人和我一样,初次查看一个技术的文档的时候,知识吸收的很慢,因为对这个技术的不熟悉导致不清楚各种操作的应用场景,当我意识到这件事之后,我决定换种学习思路,即以实战为主,卡壳就查文档,会对这个技术 ...

  2. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    进入正题 1. PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template> <div> &l ...

  3. glibc2.22

                 

  4. MongoDB Compass管理工具下载、安装和使用

    内容来自:https://jingyan.baidu.com/article/925f8cb884f6f8c0dce0565a.html ,https://blog.csdn.net/bg101775 ...

  5. js中(try catch) 对代码的性能影响

    https://blog.csdn.net/shmnh/article/details/52445186 起因 要捕获 JavaScript 代码中的异常一般会采用 try catch,不过 try ...

  6. final、finally、 finalize区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11444366.html final final可以用来修饰类.方法.变量,分别有不同的意义,final ...

  7. 英语单词debug

    来源——docker官网首页https://www.docker.com/ 翻译 vt. 调试,排除故障,除错,改正有毛病部分 过去式 debugged 过去分词 debugged 现在分词 debu ...

  8. HashMap接口测试

    package com.iotek.map; import java.util.Collection;import java.util.HashMap;import java.util.Map;imp ...

  9. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛

    求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$   $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...

  10. Android逆向之旅---基于对so中的section加密技术实现so加固

    一.前言 好长时间没有更新文章了,主要还是工作上的事,连续加班一个月,没有时间研究了,只有周末有时间,来看一下,不过我还是延续之前的文章,继续我们的逆向之旅,今天我们要来看一下如何通过对so加密,在介 ...