欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java复习web篇——servlet

程序员文章站 2023-03-22 13:19:11
1.Servlet Servlet的概述: 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.Servlet就是SUN公司提供的一个动态网页开发技术.2.5版本:基于配置式开发(web.xml)3.0版本:基于注解式开发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+"") ;