java复习web篇——servlet

  1.Servlet

Servlet的概述: 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.Servlet就是SUN公司提供的一个动态网页开发技术.
2.5版本:基于配置式开发(web.xml)
3.0版本:基于注解式开发
Servlet的作用:
它会基于HTTP协议, 在服务器端接收客户端发出的请求, 然后进行相应的业务逻辑处理, 处理完了以后, 会向客户端返回一个响应

  2.使用Servlet:
(1). 编写一个类

  1. 实现servlet 接口
  2. 继承GenericServlet 类
  3. 继承HttpServlet 类
    实际开发使用
    一般要实现servlet的话, 都是通过继承HttpServlet 类

(2). 将编写的这个类配置到服务器中.
配置web.xml
注意: url-pattern 的值不可以出现重复的, 否则tomcat 启动失败

  3.使用ServletRequest接收参数:

  • String getParameter(String name); ------用于接收一个名称对应一个值的数据.
  • String[] getParameterValues(String name); ------用于接收一个名称对应多个值的数据.
  • Map getParameterMap();------用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
  • Enumeration getParameterNames()-------用于获取表单中提交的所有的参数的名称.

  4.servlet 执行过程:

  1. 根据浏览器的servlet访问的标识去项目中的web.xml文件中去找相匹配的url-pattern的值
  2. 去servlet-mapping中的servlet-name 标签中去获取值
  3. 去servlet标签中的servlet-name 的标签中去找相匹配的值
  4. 去servlet-class中找到servlet的路径, 通过反射的方式来让相对应的servlet运行

  5.Servlet的生命周期
servlet 何时被创建, 何时被销毁
当客户端向服务器端发出一个请求的时候, 服务器端首先会判断对应的servlet是否已经被初始化了, 如果该servlet没有被初始化的话, 那么首先会执行init() 对该servlet进行初始化, 接着运行service(), 如果该servlet已经被初始化了, 那么直接运行service(), 当服务器关闭的时候, 会执行destory() 销毁servlet
init()
只会被运行一次, 初始化servlet的时候
service()
每次操作servlet的时候, 都会被执行
destory()
只会执行一次, 销毁servlet

  6.扩展的标签: <load-on-startup>
用来控制servlet什么时候被初始化---- 写在<servlet></servlet>标签中
如果该标签没有被设置或者值为负数, 那么该servlet只有被访问的时候才会被初始化, 如果该标签的值为正数的话, 那么当服务器一启动该servlet就会被初始化
注意: 值必须为整数, 当为正整数的时候, 值必须大于1, 值越小优先级越高

  7. HTTP协议超文本传输协议
定义:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
作用:规定浏览器和服务器的数据交互的格式.

(1)HTTP协议的特点:
基于请求和响应的模型

  • 必须先有请求后有响应.
       * 请求和响应必须成对出现.
    默认的端口号是80.

(2)HTTP协议的请求部分

 客户端 :(浏览器, 手机, 平板) 发出请求, 发送给服务器端
请求行:
请求方式:GET和POST的区别

  • GET的提交的参数会显示到地址栏上,而POST不显示.
  • GET往往是有大小限制的,而POST没有大小的限制.
  • GET没有请求体,而POST有请求体.
  • 提交路径:
  • 协议版本:
    请求头:都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.
    User-Agent:代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
    Referer:代表的是网页的来源. --- 防盗链.
    If-Modified-Since:通常与响应中的头Last-Modified一起使用查找本地缓存
    请求体:
    封装POST提交方式的提交的参数

(3)HTTP协议的响应部分

 服务器:发出响应, 发送给客户端
响应行:

  • 协议版本
  • 状态码 :
  • 200 :成功
  • 302 :重定向
  • 304 :查找本地缓存
  • 404 :资源不存在
  • 500 :服务器内部错误
  • 状态码描述

响应头:键值对,一般一个key对应一个value,也有一个key对应多个value

  • Last-Modified:与请求中的If-Modified-Since一起使用查找本地缓存.
  • Content-Dispostion :文件下载的使用使用的一个头信息.
  • Location :重定向的跳转的路径.
  • Refresh:定时刷新/定时跳转.

响应头是用来修饰响应体的
setHeader("",""):一个key 对应一个value
addHeader(): 一个key 对应多个value

响应体:
显示浏览器的页面的内容
用来设置需要返回给客户端的信息
getWriter().write()
getOutputStream().write()

设置响应体需要注意的问题:

  1. 使用字符流肯定出现中文乱码
  2. 字符流和字节流不可以同时在一个servlet中出现, 否则500
  3. 字符流不可以直接输出数字, 如果输出数字的话, 会按照ASCii表进行转码.
    getWriter().write(20) ;
    解决: getWriter().write(20+"") ;