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. 从C#到Objective-C,循序渐进学习苹果开发(2)--Objective-C和C#的差异

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台开发苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验. 在上篇<从C#到 ...

  2. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  3. div css仿京东订单流程图样式代码

    效果展示 http://hovertree.com/texiao/css/25/ 本效果适合PC,也适合移动端 手机扫描二维码查看效果: 效果图: 代码如下: <!DOCTYPE html> ...

  4. WPFINotifyPropertyChanged使用技巧

    WPFINotifyPropertyChanged使用技巧 public class NotifyPropertyChanged : INotifyPropertyChanged { public e ...

  5. 【Java每日一题】20161207

    package Dec2016; public class Ques1207 { public static void main(String[] args) { new Test(); new Te ...

  6. python3.4怎么连接mysql pymysql连接mysql数据库

    本文介绍了python3 4连接mysql数据库的方法,在python3 4中使用原来python2 7的mysqldb已不能连接mysql数据库了,可以使用pymysql.   在python3.4 ...

  7. oracle sql初次接触

    oracle 语法有些地方都是和mysql一样,但还是有很多不同之处: 注意:dual该表为oracle中本身就存在的数据表.比如想取数据库时间(系统时间)就可以用这张表来完成. 创建表语法: cre ...

  8. 2016暑假多校联合---A Simple Chess

    2016暑假多校联合---A Simple Chess   Problem Description There is a n×m board, a chess want to go to the po ...

  9. 减小服务器负担,Apache启用mod_expires模块

    mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求. 在使用之前,首先要确认一下”mod_expires”模组是否有启用.如 ...

  10. JS this,call和apply以及回调函数

    this this引用,引用的是一个对象,对象不同或函数调用方式的不同,this引用会根据代码的上下文语境自动改变引用对象的特性. 引用规则 1,在最外层代码中,this引用引用的是全局对象(wind ...