Servlet总结

一、Servlet的生命周期

          1、从浏览器发送请求到服务器:http://localhost:8080/webObject/Aservlet

       2、从项目web.xml配置中找到servlet配置

       3、Servlet对象创建时机? 第一次访问servlet时.

       4、Servlet对象创建的特点? 通过只在第一次访问时调用init的现象, 一个servlet实例在服务器中只有一个.
          5、当请求访问servlet时,service方法会处理请求.

          6、将响应的内容返回到服务器中
          7、当服务器将要关闭,服务器会销毁服务器中的Servlet对象,在真正销毁之前调用destory方法.

 

二、关于ServletConfig 启动信息

        String getInitParameter(String name) 获得配置信息 根据键获得值

        Enumeration getInitParameterNames() 获得配置信息 获得所有键

        String getServletName() 获得servlet的名称 <servlet-name>AServlet</servlet-name>

        ServletContext getServletContext() 该方法返回ServletContext对象.

三、Servlet线程

       Servlet的实例在服务器运行期间只有一个实例存在.所以线程不安全.
       线程不安全: 如果使用成员变量来接受线程参数.如果发生并发,那么会出现线程问题(覆盖)
       解决办法: 将装载线程参数的变量放置到方法中,编程局部变量.

 

四、servlet的路径配置

       <url-pattern></url-pattern>

     该配置,配置方式有两种
     1、路径匹配: 一定以"/"开头
      /AServlet
     /ABC/AServlet
     /ABC/BCD/AServlet
     /ABC/*
     /*
     /
   2、后缀名匹配: 以*开头
     *.do
     *.action
     *.html
注意:
     匹配范围越大,优先级越低.
     后缀名匹配和路径匹配不能同一配置中混合使用. 例如: /*.do
    一个servlet可以配置多个路径. 直接在<servlet-mapping>元素中添加多个<url-pattern>配置即可.
    优先级: /AServlet > /abc/* > *.do > /*

 

 

五、ServletContext

   

      创建: 随着项目的启动而创建

      销毁:随着项目的关闭而销毁

      获得:通过ServletConfig对象的 getServletContext方法获得.

      功能:
             1.可以获得项目参数
             2.是Servlet技术中的3个域对象之一
             3.获得项目内的资源

   

           1>获得项目参数
                       String getInitParameter(String name)
                       Enumeration getInitParameterNames()

          2>域功能
              Servlet三大域
                           application
                           request
                           session
              jsp技术中的域
                           page

             域用于服务器组件之间的通讯(例如:两个servlet之间通讯).
             域的实质就是map.
             application域 就是在整个项目内共享数据的map.

          *操作域的方法:
                     void setAttribute(String key,Object value);         //设置属性(键,值)
                     Object getAttribute(String key);                       //通过键得到值
                     Enumeration<String> getAttributeNames();      //获得所有的键名
                     void removeAttribute(String key);                    //删除属性

 

           3>获得项目内资源
                    // 该方法使用相对路径获得 资源的流 其中 "/" ==> 项目根下 WebRoot
                    InputStream sc.getResourceAsStream();
                    // 使用相对路径获得绝对路径
                    String sc.getRealPath("/student.xml");

 

 

 

六、Response对象

      Response对象,用于生成http响应信息. 对于开发人员来讲,就是 向response 对象中添加信息即可.

                   响应首行
                           HTTP/1.1 200 OK
                           void setStatus(int sc)
                           void setStatus(int sc, String sm) Deprecated(过时)
                           void sendError(int sc)
                           void sendError(int sc, String msg)


                  响应头
                           键:值
                           void setHeader(String name, String value) 设置键值对.
                           void setDateHeader(String name, long date) 设置键值对.
                           void setIntHeader(String name, int value) 设置键值对.
                           void addHeader(String name, String value) 添加键值对.
                           void addDateHeader(String name, long date)添加键值对.
                           void addIntHeader(String name, int value) 添加键值对.

                  响应空行
                 响应正文
                           需要给浏览器的资源
                           getWriter(); 字符流.
                           getOutputStream() 字节流

 

七、Request对象

      HTTP请求协议:
                          (请求首行 请求方式 请求路径 协议/版本号)
                          String getMethod() 获得请求方式
                          request.getContextPath(): /day08-request 获得项目路径
                          String getServletPath()
                          request.getQueryString(): name=tom?age=19 获得请求路径中的参数
                          request.getRequestURI(): /day08-request/AServlet 获得当前访问的相对路径,相对主机路径
                          request.getRequestURL(): http://localhost:8080/day08-request/AServlet 获得当前访问的绝对路径
                          request.getServletPath(): /AServlet 获得servlet路径
                          String getScheme() 获得协议协议
       请求头 键:值
                          request.getContentLength(): -1 返回正文内容长度
                          request.getContentType(): null 返回正文内容类型
                          request.getLocale(): zh_HANS_CN 获得accept-language:zh_CN
                          request.getServerName(): localhost 获得主机名称
                          request.getServerPort(): 8080 获得访问端口号


                          String getHeader(String name) 根据键获得值(值只有一个)
                          long getDateHeader(String name)
                          int getIntHeader(String name)
                          Enumeration getHeaderNames() 获得所有请求头的名字
                          Enumeration getHeaders(String name) 根据键获得值(值有多个)

        请求空行
        请求正文 post请求才有=> 请求参数 => name=tom&age=18
                          String getParameter(String name) 根据参数键获得参数值
                          Map<String,String[]> getParameterMap() 返回封装参数的Map
                          Enumeration getParameterNames() 获得所有参数的键
                          String[] getParameterValues(String name) 根据参数键获得参数值(值有多个)

 

八、解决乱码问题

             一:

                       1、设置编码码表:(编码时使用,将数据传递到浏览器)

                                   response. setContentType();

                       2、设置解码码表:

                                   response.setHeader("content-Type","text/html;charset=UTF-8");

                      针对上述代码冗杂,可以更加简便

                      response.setContentType("text/html;charset=UTF-8");

             二、

                    request.setCharacterEncoding("UTF-8");

                     

 

posted @ 2017-05-17 17:22  流走的沙子  阅读(185)  评论(0编辑  收藏  举报