以http://locahost:8080/......开头,或者以/开头,都是绝对路径
以路径开头:相对路径 路径/路径

Servlet执行流程:(只用自己编写执行的代码,执行的细节全是tomcat封装的)
  1:浏览器输入URL(回车)
    找到服务器端的Tomcat
  2:tomcat解析web.xml文件,根据URL中项目名后面的路径找到对应的class
    <servlet>
      <servlet-name>first</servlet-name> //自己给自己的servlet class取的一个路径名
      <servlet-class>cn.itcast.a.servlet.HelloServlet</servlet-class> //定位servlet所在位置
    <servlet>
    <servlet-mapping>
      <servlet-name>first<servlet-name> //所对应的class别名
      <url-pattern>/hehe<url-pattern> //将class与URL映射到一起
    <servlet-mapping>
  3:通过反射获取该类对象,和它的方法,再通过反射调用相关方法(service)
    和JavaSE项目比较:
      1.WEB项目会屏蔽很多实现细节
      2.WEB项目中,对象创建以及调用相当一部分场景下是反射完成的
Servlet:
  1、资源分类
    静态资源 ----- HTML ----- 源码不改,每次访问的数据都是一样的
    动态资源 ----- 由程序(Servlet)生成 -- 每次访问得到的数据可能都不一样

  2、使用 Servlet 进行动态资源实现 --- 版本1
    A、创建一个类实现 Servlet 接口
    B、重写 service 方法
    C、配置 Servlet 与 URL 的映射
    D、浏览器输入 URL 后,就可以执行 Servlet 的 service 方法了(重点:执行流程)

  3、使用 Servlet 进行动态资源实现 --- 版本2
    A、继承 GenericServlet(通用的Servlet)(GenericServlet实现了Servlet接口,重写了其它的方法,只有具体实现的service方法没有重写)
    B、重写 service 方法
    C、配置Servlet 与 URL 映射

  4、使用 Servlet 进行动态资源实现 --- 版本3 ---- 终极版
    A、eclipse 直接创建 Servlet 类 --- 继承 HttpServlet,配置信息自动生成
    B、重写的不再是 service 方法,而是更加细化的 doGet 或 doPost 方法(service方法中有处理所有请求所对应的方法)
    C、怎么执行?
      根据URL 找到对象类,反射生成对象,反射调用 (父类)service 方法,根据请求方式
      再调用 子类的 doGet 或 doPost
      (反射其实执行的还是service方法,只是service方法中调用了doGet或者doPost方法)

  5、请求与响应简单使用(请求对象和响应对象已经被tomcat封装)
    ServletRequest ---- HttpServletRequest
    A、request 是请求对象
      request.getParamter("键") ---- 可以根据键获取客户录入的值
    B、response 是响应对象
      response.getWriter() --------- 获取一个字符打印流,可以像浏览器响应数据

    被屏蔽的实现:
      request 和 response 这两个对象 和 Servlet 对象一样是 Tomcat 创建的,
      Tomcat 在调用 service 方法时,会把这两个对象作为参数传给 service,最终传给
      doGet 或 doPost

  6、servlet 高级 --- 生命周期
    init ----- 出生时调用的方法 ---- 第一次访问时出现
    servletConfig ---- 解读配置信息
    service -- 每次运行时调用的方法 ---- 每次访问
    destory -- 消亡时调用的方法 ---- 服务器关闭时消亡

  注意:
    servlet 自始至终只有一个(使用了单例设计模式)

  控制Servlet初始化的时机:
    A、web.xml中使用 <load-on-startup>设置初始化时机  
      取值:0 以及正整数,服务器启动时就加载(因为有服务器启动时就加载Servlet,所以servlet-mapping配置错误会导致服务器启动失败)
               如果是负数或不设置,就是第一次访问时加载
    B、 <load-on-startup> 还可以设置启动优先级
      数字越小( >= 0 ),优先级越高

  7、Servlet 映射的 URL 如何配置?
    一般实现,URL 和 类名一致
    <!-- 浏览器地址栏中录入的路径完全匹配才能执行servlet -->
    1.<!-- <url-pattern>/abc/def/xxx</url-pattern> -->
    <!-- 录入的路径只要目录严格匹配即可,而目录后任意 -->
    2.<!-- <url-pattern>/xxx/yyy/*</url-pattern> -->
    <!-- 录入的路径只要后缀名匹配即可,前面任意--> .do .action
    3.<!-- <url-pattern>*.xx<url-pattern> -->
    <!-- 路径爱咋咋地 ,都行--> ---- 不建议使用
    4.<!-- <url-pattern>/</url-pattern> -->

    优先级(越具体优先级越高):
    1 > 2 > 3 > 4

路径问题
  方式1:
    表单的 action = "http://loaclhost:8080/项目名/路径" ---- 繁琐

  方式2:
    表单的 action = "/项目名/路径" ---- 和方式1一样,是对 方式1的简化

    方式1 和 方式2 称之为绝对路径

  方式3:
    表单的 action = "路径" || "../../路径" ---- 相对路径(不建议使用)
    文件位置一旦变动,路径名也要进行相应修改,不易于后期维护

  相对路径怎么推导
  不是根据存储位置推导而是根据地址栏输入的 URL 推导

ServletConfig
  解析servlet的配置文件信息,所有的配置信息全在<servlet></servlet>的子标签中<servlet-mapping></servlet-mapping>是URL和class
  ServletConfig sc = this.getServletConfig(); (this:当前servlet)
  sc.getServletName(); //返回ServletName
  sc.getInitParameter("code"); //得到code的值
    xml代码: <init-param>
            <param-name>code</param-name>
            <param-value>gbk</param-value>
          </init-param>
  Enumeration<String> names = sf.getInitParameterNames(); //得到所有的配置的文件,返回一个迭代器
  while(names.hasMoreElements()){
    String name = names.nextElement();
    System.out.println(name + " " + sf.getInitParameter(name));
  }

编码集概念:
  1、作用,让数字与字符(小图片)产生映射关系
  2、不同的编码集能映射的字符也不同
  3、不同的编码集中相同的字符可以对应的数字也不一样
  解码:
    byte[] b1 = "中".getBytes("UTF-8"); //括号中指定让其按照什么编码集解码
  编码:
    byte[] b2 = new byte[]{-28, -72, -83};
    String str2 = new String(b2,"UTF-8");
Eclipse:GBK
MySQL:UTF-8 MySQL进行数据传递时做了处理,会将其它编码集的代码先按原编码编码之后在按照UTF-8解码,然后传递数据

Servilet初步的更多相关文章

  1. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  2. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  3. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  4. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  5. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  8. CozyRSS开发记录14-RSS源管理初步完工

    CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...

  9. 初步了解CPU

    了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...

随机推荐

  1. UVA11054_Wine trading in Gergovia

    大致题意: 直线上有n个村庄,要么买酒要么卖酒,运酒到隔壁村庄需要这个酒的权值个劳动力 问你至少需要多少劳动力 题目保证了所有权值和为0!!!!!!!!!!!!这个意义重大,表示这是一个封闭的群体 这 ...

  2. gdb调试已在运行中的进程

    一.在服务器上调试进程,服务器上并没有源代码,所以需要将源码上传至服务器,才能调试看到源码,以下是步骤: 1.查看服务进程id:pgrep 服务名 [user@user-MP app]$ pgrep ...

  3. neo4j简单学习

    阅读更多 背景 最近在一些论坛或者新闻里看到了neo4j,一种擅长处理图形的数据库. 据说非常适合做一些join关系型的查询,所以抽空也看了下相关文档,给自己做个技术储备. 过程 深入学习之前,先在网 ...

  4. ionic3 emoj表情包插件 emoji-picker

    1.效果演示: 2.安装扩展包依赖 npm i @ionic-tools/emoji-picker --save 3.app.module.ts中导入插件 import { EmojiPickerMo ...

  5. 升级ssh后续问题

    升级了openssh后远端的服务器无法通过sftp传输文件到高服务器,后来发现是远端的服务器ssh版本太低,而新升级了openssh的服务器已经不再支持老版本ssh client的相关协议,这时候有两 ...

  6. python wave 库 读取 BytesIO 对象的注意事项

    程序中遇到需要使用临时文件时,常使用内存中的 io.BytesIO() 代替实体二进制文件,以避免磁盘IO,同时免去了考虑文件名的麻烦. file = io.BytesIO() file.write( ...

  7. openstack一些介绍

    最近刚考完redhat 的 openstack,就想来这里简单介绍一下. openstack涉及到overcloud和undercloud两个层面的操作,undercloud需要一些技术操作,然后来创 ...

  8. Java中使用try-catch-finally处理IO流中的异常

    我们使用try-catch-finally来接收IO流的异常 finally是最后执行的步骤,非常适合最后存放close来关闭IO流,而且编程中我们不可以随意抛出异常,必须对异常进行处理. 从try- ...

  9. 首次公开!单日600PB的计算力--阿里巴巴EB级大数据平台的进击

    MaxCompute作为阿里巴巴的主力计算平台,在2018年的双11中,再次不负众望,经受住了双11期间海量数据和高并发量的考验.为集团的各条业务线提供了强劲的计算力,不愧是为阿里巴巴历年双11输送超 ...

  10. jdk环境配置-windows 10

    近期由于云服务器到期,重新买了一个云服务器,这里顺便把jdk环境配置步骤做一个记录 1.下载自己需要的jdk 我这里是下的免安装版的  2.计算机(此电脑)->属性->高级系统设置-> ...