A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-9-21 17:01 编辑

『黑马程序员济南』Java就业笔记串讲--Servlet

HTTP
HTTP的协议的概述
协议:
* 什么是协议:规定双方需要遵守的规则.
HTTP协议:
* 什么是HTTP协议:用来规定浏览器与服务器之前需要遵守的规则.超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP协议的作用:规范浏览器和服务器之间的数据传递.
HTTP协议的特点:
* 基于请求和响应的模型.
    * 必须先有请求后有响应.
    * 请求和响应必须成对出现.
* 默认的端口号是80.
HTTP协议的版本:
* 1.0        :每次响应后即刻关闭了连接.
* 1.1        :现在使用.不是每次响应后挂断,等待长时间以后没有请求会挂断.
HTTP协议的详解
请求部分
* 请求行
    * 提交方式:
        * 提交方式有很多,常用的GET和POST:
        * 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提交方式的提交的参数.
响应部分
* 响应行:
    * 协议版本
    * 状态码                :
        * 200        :成功
        * 302        :重定向
        * 304        :查找本地缓存
        * 404        :资源不存在
        * 500        :服务器内部错误
    * 状态码描述
* 响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.
    * Last-Modified                        :与请求中的If-Modified-Since一起使用查找本地缓存.
    * Content-Dispostion        :文件下载的使用使用的一个头信息.
    * Location                                :重定向的跳转的路径.
    * Refresh                                :定时刷新/定时跳转.
* 响应体:显示浏览器的页面的内容.

Servlet的概述
什么是Servlet:
* 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.
* Servlet就是SUN公司提供的一个动态网页开发技术.
Servlet的作用:
* 用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
使用Servlet:
* 编写一个类实现Servlet接口.
* 将编写的这个类配置到服务器中.
Servlet的入门:
* 编写类:
[Java] 纯文本查看 复制代码
public class ServletDemo1 implements Servlet{
        @Override
        /**
         * 为用户处理请求和响应的方法.
         */
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
                res.getWriter().println("Hello Servlet...");
        }
...
}

* 配置:
  
[XML] 纯文本查看 复制代码
<!-- 配置Servlet -->
  <servlet>
          <!-- Servlet的名称 -->
          <servlet-name>test1</servlet-name>
          <!-- SErvlet的全路径 -->
          <servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
  </servlet>
  <!-- Servlet的映射 -->
  <servlet-mapping>
          <!-- Servlet的名称 -->
          <servlet-name>test1</servlet-name>
          <!-- Servlet的访问路径 -->
          <url-pattern>/ServletDemo1</url-pattern>
  </servlet-mapping>

* 访问:
http://localhost:8080/day09/ServletDemo1
使用ServletRequest接收参数
* String getParameter(String name);                ---用于接收一个名称对应一个值的数据.
* String[] getParameterValues(String name);---用于接收一个名称对应多个值的数据.
* Map getParameterMap();                                        ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.
* Enumeration getParameterNames()                        ---用于获取表单中提交的所有的参数的名称.
Servlet的实现的关系
Servlet                        :接口
   |
GenericServlet        :通用的Servlet
   |
HttpServlet                :HttpServlet
* 编写一个类继承HttpServlet,重写doGet和doPost方法.
* 配置

Servlet的生命周期
生命周期:就是一个对象从创建到销毁的过程.
Servlet生命周期:Servlet从创建到销毁的过程.
* 何时创建:用户第一次访问Servlet创建Servlet的实例
* 何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.
Servlet的相关的配置:
启动时创建Servlet
Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet的配置:
在web.xml中在<servlet></servlet>标签中配置:
* <load-on-startup>2</load-on-startup>  --- 传入正整数,整数越小,被创建的优先级就越高.
url-pattern的配置
url-pattern配置方式共有三种:
1.完全路径匹配        :以 / 开始                                例如:        /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
2.目录匹配                :以 / 开始 需要以 * 结束.        例如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配                :不能以 / 开始 以 * 开始的. 例如: *.do , *.action
***** 错误的写法        : /*.do
有如下的配置:
  
[XML] 纯文本查看 复制代码
<servlet>
    <servlet-name>ServletDemo4</servlet-name>
    <servlet-class>com.itheima.a_servlet.ServletDemo4</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo4</servlet-name>
    <url-pattern>/ServletDemo4</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>ServletDemo5</servlet-name>
    <servlet-class>com.itheima.a_servlet.ServletDemo5</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo5</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>ServletDemo6</servlet-name>
    <servlet-class>com.itheima.a_servlet.ServletDemo6</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletDemo6</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

如果访问地址:
http://localhost:8080/day09/ServletDemo4                :第一个
http://localhost:8080/day09/aaa.do                                :第二个
***** 完全路径匹配 > 目录匹配 > 扩展名匹配
开发中的路径的编写:
相对路径:都是需要找位置相对关系.不能以 / 开始的.
* ./ 当前路径  ../上一级目录
* 使用相对路径访问:
    * http://localhost:8080/day09/demo4-url/demo1.html
    * http://localhost:8080/day09/ServletDemo6
绝对路径:不需要找位置相对关系. 以 / 开始的.
* 绝对路径中分为客户端路径和服务器端路径:
    * 客户端路径一定要加工程名.                /day09/ServletDemo6
    * 服务器端路径不需要加工程名.        /ServletDemo6
使用Http协议中的Refresh头信息
Refresh之前已经介绍可以定时页面跳转.需要使用程序设置头信息才可以.
response中设置响应头
* addHeader(String name,String value);                --- 针对一个key对应多个value的响应头.
    * addDateHeader(String name,long date);
    * addIntHeader(String name,int value);

* setHeader(String name,String value);                --- 针对一个key对应一个value的响应头.
    * setDateHeader(String name,long date);
    * setIntHeader(String name,int value);

ServletContext对象
***** ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.
* 用来存取数据:
* 用来向ServletContext中存入数据.
* 用来从ServletContext中获取数据.
* 用来从ServletContext中移除数据.
ServletConfig:了解.获得Servlet的配置信息.
* String getServletName();                ---获得Servlet在web.xml中配置的name的值.
* String getInitParameter(String name);        ---获得Servlet的初始化参数的.
* Enumeration getInitParameterNames();                ---获得所有Servlet的初始化参数的名称.

ServletContext
ServletContext的作用:
* 1.用来获得全局初始化参数.
* 2.用来获得文件的MIME的类型.
* 3.作为域对象存取数据.
ServletContext是一个域对象.
    * 作用范围:整个web工程.
    * 创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.
    * 销毁:服务器关闭的时候,或者项目从服务器中移除的时候.
* 4.用来读取web项目下的文件.
点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈




1 个回复

倒序浏览
不错,这个是连载的吗?
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马