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. wine安装稳定使用falsh播放器

    1安装wine,wine安装使用网上自行查找 2.安装flash播放器.exe 下载附件的falsh播放相关.tar.gz,解压后得到 Flash.ocx (flash10 for windows的插 ...

  2. python常见报错类型

     更新ing 报错类型 报错内容 错误判断 错误解决方式 IndentationError IndentationError:unexpected indent 格式错误:以外缩进   Indenta ...

  3. 第 10 章 容器监控 - 080 - Weave Scope 容器地图

    Weave Scope 容器地图 Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器. 安装 执行如下脚本安装运行 Weave Scope ...

  4. PowerDesigner设置Oracle不区分大小写

    一. powerdesigner设置当前数据库 打开powerdesigner,然后选择菜单DatabaseChange current DBMS,如图: 修改这个下拉框的值即可. 二. power ...

  5. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建列组合

    jQuery EasyUI 数据网格 - 创建列组合 easyui 的数据网格(DataGrid)可以创建列组合,如下所示: 在本实例中,我们使用平面数据来填充数据网格(DataGrid)的数据,并把 ...

  6. prometheus-operator 详细总结(helm一键安装)

    一.介绍prometheus-operator 二.查看配置rbac授权 三.helm安装prometheus-operator 四.配置监控k8s组件 五.granafa添加新数据源 六.监控mys ...

  7. linux环境下安装使用selenium Chrome

    安装驱动 http://chromedriver.storage.googleapis.com/index.html 下载对应chrome浏览器版本的驱动程序 chmod +x chromedrive ...

  8. async-await用法

    转载:https://segmentfault.com/a/1190000011526612?utm_source=tag-newest

  9. SQL-在Update中进行子查询和左联查询

    以下总结源自后边的三个参考思索和测试而来: 我们有一张行政区划表,为了查询速度的优化,我们需要在这张表中,将每个乡镇的记录中写入其所属的省.市.县, 表如下: 当然,我们可以使用游标或在存储过程中使用 ...

  10. 爬虫(九)scrapy框架简介和基础应用

    概要 scrapy框架介绍 环境安装 基础使用 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能 ...