1.Servlet 
    [1] Servlet简介
        > Server + let
        > 意为:运行在服务器端的小程序。
        > Servlet实际上就是一个接口。
            - 狭义上的Servlet,指的就是Servlet接口
            - 广义上的我们认为凡是实现Servlet接口的类,我们都称他是一个Servlet *****
        > Servlet的作用:
            1.接收用户发送的请求
            2.调用其他的java程序来处理请求
            3.根据处理结果,返回给用户一个页面
 
        > Servlet的HelloWorld
            1.创建一个类并实现Servlet接口
            2.在web.xml文件中对Servlet进行配置
                <servlet>
                    <servlet-name>别名</servlet-name>
                    <servlet-class>全类名</servlet-class>
                </servlet>
                <servlet-mapping>
                    <servlet-name>别名</servlet-name>
                    <url-pattern>需要servlet处理的请求地址</url-pattern>
                </servlet-mapping>
 
        > Servlet的三个名字:
            <servlet-name>
                - Servlet的别名,程序员通过别名对Servlet进行配置
            <servlet-class>
                - Servlet的全类名,服务器通过全类名来创建Servlet的实例
            <url-pattern>
                - Servlet映射的请求地址,用户通过该地址访问Servlet
 
    [2] Servlet的生命周期
        > Servlet的生命周期,指Servlet的对象从被创建到被销毁的过程。
        > Servlet的生命周期方法:
            1.构造器:
                - Servlet第一次处理请求时,会调用构造器,来创建Servlet实例。
                - 只会调用一次,Servlet是单例模式,他是以多线程的方式调用service()方法.
                - Servlet不是线程安全,所以尽量不要再service()方法中操作全局变量。
 
            2.init()方法:
                - 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。
 
            3.service()方法:
                - Servlet每次处理请求时都会调用service()方法,用来处理请求,会调用多次。
 
            4.destroy()方法:
                - Servlet对象销毁前(WEB项目卸载时)调用,用来做一些收尾工作,释放资源。
 
    [3] 相关接口
        ①ServletConfig
            代表:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。
                <servlet>
                    <servlet-name>AServlet</servlet-name>
                    <servlet-class>com.atguigu.servlet.AServlet</servlet-class>
                    <init-param>
                        <param-name>user</param-name>
                        <param-value>root</param-value>
                    </init-param>
                    <init-param>
                        <param-name>password</param-name>
                        <param-value>123123</param-value>
                    </init-param>
                </servlet>
 
            获取:由Tomcat服务器创建,最终作为参数传递到init()方法中,我们可以在init()方法直接使用。
                    当我们通过继承HttpServlet创建Servlet时,由于父类已经实现ServletConfig接口,
                        所以我们可以在Servlet中直接调用ServletConfig的方法。
 
            功能:
                【1】 获取Servlet的别名
                【2】 获取当前Servlet的初始化参数。
                        <init-param>
                            <param-name>user</param-name>
                            <param-value>root</param-value>
                        </init-param>
                        <init-param>
                            <param-name>password</param-name>
                            <param-value>123123</param-value>
                        </init-param>
                【3】 获取当前WEB应用的ServletContext对象。
 
        ②ServletContext
            代表:当前的WEB应用,一个WEB应用对应一个唯一的ServletContext对象,
                  ServletContext对象在项目启动时创建,在项目卸载时销毁。
 
            获取:通过ServletConfig的getServletContext()方法获取。
 
            功能:
                【1】 可以获取整个WEB应用的初始化参数
                    <context-param>
                        <param-name>phone</param-name>
                        <param-value>1388888888</param-value>
                    </context-param>
                【2】 可以获取资源的真实路径(物理路径),主要在文件的上传和下载时使用。
                【3】 可以作为一个域对象在不同的web资源之间共享数据。(下回分解)
 
    [4] GenericServlet
        - 通用Servlet的父类
        - 相比Servlet接口GenericServlet更加简单一些,但是我们最终实际上使用的HttpServlet
 
    [5] HttpServlet
        - HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口
        - 所以我们可以同构继承HttpServlet来创建一个Servlet。
        - HttpServlet重写service()方法:
            1.在该方法中先将ServletRequest和ServletResponse
                强转为了HttpServletRequest和HttpServletResponse。
            2.然调用重载的service()方法,并将刚刚强转得到对象传递到重载的方法中。
        - 重载service(HttpServletRequest request , HttpServletResponse response)
            1.在方法中获取请求的方式(get或post)
            2.在根据不同的请求方式去调用不同的方法:
                如果是GET请求,则调用doGet(HttpServletRequest request , HttpServletResponse response)
                如果是post请求,则调用doPost(HttpServletRequest request , HttpServletResponse response)
        - 结论:
            当通过继承HttpServlet来创建一个Servlet时,我们只需要根据要处理的请求的类型,来重写不同的方法。
                处理get请求,则重写doGet()
                处理post请求,则重写doPost()
 
 
 
    [6] HttpServletRequest 
        代表:浏览器发送给服务器的请求报文。
        获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。
        功能:
            【1】获取用户发送的请求参数
                request.getParameter("username");
            【2】获取项目的名字(用来设置绝对路径)
                request.getContextPath();
            【3】作为一个域对象,在不同的WEB资源之间共享数据。
            【4】请求的转发
                request.getRequestDispatcher("target.html").forward(request, response);
 
 
    [7] HttpServletResponse
        代表:服务器发送给浏览器的响应报文。
        获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。
        功能:
            【1】响应给浏览器一个网页或者是网页片段(设置的是响应报文的响应体)
                response.getWriter("");
            【2】请求的重定向
                response.sendRedirect("target.html");
 
    转发和重定向:(掌握)
 
                            转发                重定向
        请求的次数:          1                      2
        发生的位置            服务器内部            浏览器
        浏览器地址栏        不改变                改变
        浏览器的感知        不知道                知道   
 
 
    [8] 字符编码
        > 当用户通过表单向Servlet发送中文请求参数时,Servlet获取到内容会产生乱码,
            当Servlet向浏览器响应中文内容时,也会产生乱码。
        > 浏览器和服务器之间通信时,中文内容时不能直接发送的,需要对中文进行编码。
        > 编码:
            - 将字符转换为二进制码的过程叫编码。
        > 解码:
            - 将二进制码转换为普通字符的过程叫解码。
        > 编码和解码所采用的规则我们称为字符集。
 
        > 产生乱码问题的根本原因:
            编码和解码所采用的字符集不同。
 
        > 解决方法:
            统一编码和解码的字符集为UTF-8。
 
        > 常见字符集:
            1.ASCII
            2.ISO8859-1
            3.GBK
            4.GB2312
            5.UTF-8
 
        > 请求编码
            - 请求是浏览器发送给服务器的。
            - 浏览器 --> 服务器
            - 浏览器 编码
                > 浏览器的会自动使用网页的字符集对参数进行编码
                  UTF-8的张三:%E5%BC%A0%E4%B8%89
                  GBK的张三:%D5%C5%C8%FD
 
                > 所以我们只需要统一网页的字符集为UTF-8即可。
 
            - 服务器 解码
                post请求
                    > request解码时默认字符集时iso8859-1,但是iso压根就不支持中文
                    > post请求在servlet中解码,所以我们只需要指定request的字符集即可。
                    > 我们可以通过如下方法,来设置request的字符集:
                        request.setCharacterEncoding("utf-8");
                    > 注意:
                        该方法要在request.getParameter()第一次调用之前调用
 
                get请求
                    > get请求是通过url地址传递请求参数,url中的请求参数将会被Tomcat服务器自动解码。
                    > Tomcat的默认编码是iso8859-1,但是iso压根就不支持中文,所以必然乱码。
                    > 只需要修改Tomcat的解码的默认字符集,修改配置文件server.xml
                    > 在server.xml的Connector标签中(改端口号的那个标签)添加如下属性:
                        URIEncoding="utf-8"
                    > 修改完配置文件以后,get请求的编码就不用再处理的,但是post请求还是老样子。
 
        > 响应编码
            - 响应是服务器发送给浏览器
            - 服务器 --> 浏览器
            - 服务器 编码
                > 指定服务器的编码字符集为UTF-8。
                > 指定response的字符集
                    response.setCharacterEncoding("utf-8");
                > 虽然我们已经指定了response的字符集为utf-8,但是浏览器并不是用utf-8解码。
                    浏览器默认使用gb2312解码的,所以依然乱码,只不过没有那么乱。
 
            - 浏览器 解码
                > 浏览器的解码字符集可以通过浏览器来设置(不靠谱)
                > 我们可以通过服务器来告诉浏览器,我们的内容的编码格式为utf-8
                > 我们可以通过一个响应头来告诉浏览器,内容的编码格式:
                    Content-Type:text/html;charset=utf-8
                > 通过response的方法,来设置响应头:
                    response.setHeader("Content-Type", "text/html;charset=utf-8");
 
            解决方案:
                1.设置响应头
                    response.setHeader("Content-Type", "text/html;charset=utf-8");
                2.设置response的编码格式
                    response.setCharacterEncoding("utf-8");
 
                > 当我们设置Content-Type这个响应头时,服务器会自动使用响应头中的字符集为内容编码。
 
                > 最终方案:
                    response.setContentType("text/html;charset=utf-8");
 
        总结:
            post请求:
                - 在request.getParameter()方法第一次调用之前,调用如下代码:
                    request.setCharacterEncoding("utf-8");
            get请求:
                - 修改server.xml配置文件
                - <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
 
            响应:
                - 设置一个Content-Type响应头
                    response.setContentType("text/html;charset=utf-8");
 
 
 
 
    [9] 路径问题
        > URI和URL
            - URL是URI的一种实现,也是URI最常见的实现方式。
            - URI有两种实现方式URL和URN,URN用的很少
            - 我们说URL和URI实际上可以理解为一个意思
 
        > URL地址的格式
            http://主机名:端口号/项目名/资源路径/资源名
 
        ①相对路径和绝对路径
            > 相对路径
            - 之前我们使用的路径全都是相对路径:
                - 所谓的相对路径指相对于当前资源所在路径:
                    http://主机名:端口号/项目名/资源路径/
            - 由于转发的出现,相对路径会经常发生变化,容易出现错误的链接
                所以在开发中我们一般不使用相对路径,而是使用绝对路径。
 
            > 绝对路径
            - 绝对路径使用/开头   
            - 由浏览器解析的绝对路径中的/代表的是服务器的根目录:
                http://主机名:端口号/
                注意:需要加上项目名
 
            - 由服务器解析的绝对路径中的/代表的项目的根目录:
                http://主机名:端口号/项目名/
                注意:不要加项目名
 
            - 转发的路径由服务器解析,设置绝对路径时不需要加项目名
            - 重定向的路径由浏览器解析,设置绝对路径时需要加上项目名
 
 
        ②常见的路径:
            url-pattern:
            转发的路径:
                - url-pattern和转发中的路径都是由服务器解析的,
                    根目录是项目的根目录:
                        http://主机名:端口号/项目名/
                - 所以这两个路径不需要加项目名
 
            重定向的路径:
            页面中的路径:
                - 重定向和页面中的路径(HTML标签中的路径),由浏览器解析的,
                    根目录是服务器的根目录:
                        http://主机名:端口号/
                - 所以这个两个路径必须加上项目名
 
 

[10]运行的流程

[11]HttpServlet

转载请注明出处!

http://www.cnblogs.com/libingbin/

感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

Servlet简介与Servlet和HttpServlet运行的流程的更多相关文章

  1. 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

    一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...

  2. JavaEE:Servlet简介及ServletConfig、ServletContext

    Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术*静态web资源:固定数据文件*动态web资源:通过程序动态生成数据文件2.Servlet技术基于Request ...

  3. Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)

    本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...

  4. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  5. Servlet简介及使用

    javaweb学习总结(五)——Servlet开发(一) 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口 ...

  6. 1.1(学习笔记)Servlet简介及一个简单的实例

    一.Servlet简介 Servlet是使用Java语言编写的服务器端程序,可以生产动态的Web界面. 主要运行在服务器端,Servlet可以方便的处理客户端传来的HTTP请求,并返回一个响应. 二. ...

  7. 二:Servlet简介

    一.Servlet简介 1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是 ...

  8. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  9. (一)Servlet简介

    相关名词解释 HTML:Hyper Text Markup Language,超文本标记语言 HTTP:Hyper Text Transfer Protocol,超文本传输协议 URL:Uniform ...

随机推荐

  1. 上传文件被nginx全部缓存的问题

    nginx采用1.5.6. 后端采用nodejs+formidable的方式接受上传文件,本问题的对应与采用什么样的后端没太大关系,这里只是交代一下. 问题: 在前端页面上将文件上传,nginx没有将 ...

  2. WinForm(VB.NET)获取当前登录的用户名

    运行Windows Task Manager,查看Users标签,可以看到所有登录电脑的用户,现在Insus.NET想命名用VB.NET的WinForm程序去获取当前的用户名. 获取程序简单,可以参考 ...

  3. EditText html 出现提示 This text field does not specify an inputType or a hint

      1 <EditText 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_c ...

  4. Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.

    在Eclipse中开发Android项目时,鼠标停放在想要查看帮助文档的类上面,发现没有显示帮助文档,显示了下面一句话: Note: This element neither has attached ...

  5. JNDI解读(转)

    NDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意 ...

  6. No.016:3Sum Closest

    问题: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  7. Guava学习笔记:复写的Object常用方法

    在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法.每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这 ...

  8. Android library projects cannot be launched

    今天我用SDK自带的ApiDemos建了一个工程,运行的时候出现问题,提示:Android library projects cannot be launched 解决办法如下: 右键工程根目录-&g ...

  9. IO复用_select函数

    select函数: #include <sys/select.h> #include <time.h> #include <sys/types.h> #includ ...

  10. [转]Dcloud App离线本地存储方案

    原文地址:http://ask.dcloud.net.cn/article/166 HTML5+的离线本地存储有如下多种方案:HTML5标准方案:cookie.localstorage.session ...