PS:以下仅为个人学习笔记,涩及方面略窄 

#######################     Request     #######################

/**
*    request代表用户通过浏览器发起的请求:
*    Request对象将浏览器发送来的Http请求
*    解析为对象的属性.只要使用request对象
*    的方法就可以获取Http请求的全部信息
*/

1. 获取请求头的名称

Enumeration<String> names = req.getHeaderNames();

request中有一个 getHeaderNames()方法,用来获取全部请求头的名称

返回值是一个Enumeration(枚举,java老旧的一种迭代器,现被Iterator替代)

2. 可通过HeaderNames获取对应请求头

可以获得 ->

主机IP和端口,连接方式,缓存控制,用户代理 等信息.

while (names.hasMoreElements()) {
String name = names.nextElement();
System.out.println(name+": "+req.getHeader(name));
}

由于Enumeration有着迭代器的性质,可以通过迭代获取所有信息,控制台输出举例如下:

host: localhost:8088
connection: keep-alive
cache-control: max-age=0
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
upgrade-insecure-requests: 1
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9

3. URI 和 URL区别

String uri = req.getRequestURI();
StringBuffer utl = req.getRequestURL();
System.out.println("uri: "+uri);
System.out.println("url: "+utl.toString());

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

(可以理解成一个资源名)

而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

(可以理解成一个资源的完整名称,包括文件所在位置)

至于区别输出如下:

uri: /Dpl_7_Servlet/request  

url: http://localhost:8088/Dpl_7_Servlet/request
                 (项目名)    (servlet名)

4.如何读取请求参数值?

(1)request提供的getParameter方法。

String  getParameter(String paramName);
注:
a.如果请求参数名写错,会返回null值。
b.如果不填写任何数据,会获得空字符串。

(2)request提供的getParameterValues

#######################     Response     #######################

/**
*   任何发送到浏览器的响应信息都可以
* 利用response对象来设置并且发送到客户端
*/

# 设置响应状态码 (就是设置响应状态行)

response.setStatus(200);

HTTP协议中有多种状态码:如 200-请求成功 404-请求失败,未找到资源 500-服务器遭遇错误 等

# 设置响应头部
 response.setContentType("text/html;charset=utf-8");

text/html: 代表响应类型

charset=utf-8:  浏览器在解码时会使用不同的编码,这里设置编码是给浏览器解码时统一的编码

# 设置响应Body中的编码

response.setCharacterEncoding("UTF-8");

在输出时,默认使用iso-8859-1来编码,所以在Servlset输出

中文时会乱码,为了解决乱码问题会使用response设置字符编码


# 发送body内容,利用流发送
//使用Printwriter 发送文本

1 PrintWriter pw = response.getWriter();

2 pw.println("世界你好!"); 

 

//使用OutputStream 发送非文本(如图片等)

     
    //获取文件输入流

      BufferedInputStream bis

        = new BufferedInputStream(
            new FileInputStream(
                new File("1.jpg")));

     //响应状态行
response.setStatus(200);
//发送响应头
response.setContentType("image/jpg");
response.setContentLength((int)pngFile.length());
//发送body
OutputStream out = response.getOutputStream();
int b ;
while( (b=bis.read())!=-1){
out.write(b);
}
bis.close();
out.close();

#######################     重定向     #######################

(1)什么是重定向?

服务器通知浏览器,向一个新地址发送请求。
注:
服务器可以发送一个302状态码以及一个location消息头(
值是一个地址,称之为重定向地址)给浏览器,浏览器收到之
后,会立即向重定向地址发送请求。

(2)如何重定向?

response.sendRedirect(String url);
注:url就是重定向地址。
注: 重定向之前,容器会清空response对象上存放的所有数据。
也就是说,实体内容里面是没有任何数据的。

(3)特点

a.重定向地址是任意的。
b.重定向之后浏览器地址会发生变化。

2.Servlet容器如何处理请求资源路径?

比如 http://ip:port/servlet-day03/abc.html
"/servlet-day03/abc.html"
step1. 容器默认会认为访问的是一个servlet
即查找和"/abc.html"匹配的servlet。
注:
匹配规则:
a.精确匹配:
<url-pattern>/abc.html</url-pattern>
b.通配符匹配:
<url-pattern>/*</url-pattern>
<url-pattern>/demo/*</url-pattern>
*:匹配零个或者多个任意的字符。
c.后缀匹配:
<url-pattern>*.do</url-pattern>
*.do 匹配所有以.do结尾的请求。
step2.如果找不到匹配的servlet,则访问对应的文件。
找到了就返回该文件。如果找不到,返回404。

3.如何让一个servlet处理多种请求?

step1. 采用后缀匹配。
step2. 分析请求资源路径,依据分析结果,来调用
不同的分支来处理。

2.Servlet 请求、响应及重定向的更多相关文章

  1. servlet中的请求响应与重定向区别

    一.概念 请求响应(转发):将客户端请求转发另一个servlet或者jsp页面------------------------getRequestDispatcher()方法 重定向: 返回一个连接给 ...

  2. servlet请求转发于重定向

    请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛. 一. 请求的转发 Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部" ...

  3. servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别

    1,请求重定向:client行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保留,地址栏的URL地址会改变. 2,请求转发:server行为,req ...

  4. Servlet(五):请求转发和重定向

    请求转发: 问题: 服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确. 解决: 使用请求转发. 特点: 一次 ...

  5. 【Servlet】深入浅出JavaServlet重定向和请求转发

    import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax. ...

  6. javaweb之Servlet,http协议以及请求转发和重定向

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 一直用的框架开发,快连Servlet都忘了,此文旨在帮自己和大家回忆一下Servlet主要知识点.话不多说开始吧 用idea构建Servlet项 ...

  7. Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)

    ServletContext可以实现请求转发(ServletContext请求转发相关内容见之前博客:http://blog.csdn.net/megustas_jjc/article/details ...

  8. servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

    html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&g ...

  9. Servlet的请求转发和重定向

    在学习servlet中对于转发和重定向的理解是非常重要的,但是常常把重定向和转发给混了,今天特地花点时间来总结以下. 一.servlet的转发 1.请求原理图如下所示:  2.可以简单理解转发就好比一 ...

  10. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

随机推荐

  1. 使用jQuery修改带有!important 的强制样式

    我们习惯性的会用这种方法进行修改: $(".test").css("width","100px !important"); 但是往往是修改失 ...

  2. C# T 泛型类,泛型方法的约束条件用法

    class A<T> where T:new() 这是类型参数约束,where表名了对类型变量T的约束关系.where T:A 表示类型变量是继承于A的,或者是A本省.where T: n ...

  3. C#数组--(一维数组,二维数组的声明,使用及遍历)

    数组:是具有相同数据类型的一组数据的集合.数组的每一个的变量称为数组的元素,数组能够容纳元素的数称为数组的长度. 一维数组:以线性方式存储固定数目的数组元素,它只需要1个索引值即可标识任意1个数组元素 ...

  4. CSS中的单位px、em、rem、%、vw、vh、vm

    px 相对长度单位,像素px 是相对于显示器屏幕分辨率而言的.是我们网页设计常用的单位,也是基本单位. 通过 px 可以设置固定的布局或者元素大小,缺点是没有弹性.用 px 设置字体大小时,比较稳定和 ...

  5. Windos消息驱动

    当Window是向程序发送消息时,它调用程序中的一个函数,这个函数用来描述Windows发送的消息,成为窗口函数或消息处理函数.他是一个自定义的回调函数: LRESULT CALLBACK Windo ...

  6. 一个axios的简单教程

    转载于:https://www.jianshu.com/p/13cf01cdb81f 转载仅供个人学习 首先要明白的是axios是什么:axios是基于promise(诺言)用于浏览器和node.js ...

  7. 51nod-1627 瞬间移动(组合数+逆元)

    题目描述: 有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案,答案对10 ...

  8. K8s的调度策略

    Scuedulor是K8s的调度器 sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName为空的 pod,对每个 pod 都会创建一 ...

  9. 李航《统计学习方法》CH02

    CH02 感知机 前言 章节目录 感知机模型 感知机学习策略 数据集的线性可分性 感知机学习策略 感知机学习算法 感知机学习算法 感知机学习算法的原始形式 算法的收敛性 感知机学习算法的对偶形式 导读 ...

  10. C#生成.tlb文件初认识

    刚接手同事的代码,生成文件时,发现生成了一个对应的dll文件(应用程序中输出类型为类库),和一个对应的.tlb文件,但是报如下的错误: 那么.tlb文件是如何生成的呢? 选择项目->右键属性-& ...