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提交方式的提交的参数

扫描二维码关注公众号,回复: 1549628 查看本文章


(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+"") ;

猜你喜欢

转载自www.cnblogs.com/unrulywind/p/9163411.html