2.Servlet 请求、响应及重定向

时间:2023-02-25 13:55:27

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对象上存放的所有数据。
也就是说,实体内容里面是没有任何数据的。

2.Servlet 请求、响应及重定向

(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接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部&quot ...

  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&comma;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. iOS 网络流量统计

    在开发中,有时候需要获取流量统计信息.研究发现:通过函数getifaddrs来得到系统网络接口的信息,网络接口的信息,包含在if_data字段中, 有很多信息, 但我现在只关心ifi_ibytes,  ...

  2. HDU 4325-Flowers(线段树&plus;离散化)

    题意: 给出每个花开花的时间段,每询问一个时间点输出该时间点开花的数量 分析: 线段树的区间更新,单点查询,但发现时间很大,没法存区间,就想到了离散化. 离散化就是把要处理的数据统一起来重新标号. # ...

  3. hdu 2604Queuing dp&plus; 矩阵快速幂

    题目链接 给一个长度为n的字符串, 每个字符可以使f或m. 问你不包含子串fmf以及fff的字符串数量有多少. 令0表示mm结尾, 1表示mf, 2表示ff, 3表示fm. 那么 f(n+1, 0) ...

  4. 转-CSS优先级(权重)解析

    1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...

  5. C&plus;&plus; 之 Asio 库

    1  简介  Asio 是一个跨平台的 C++ 库,常用于网络编程.底层的 I/O 编程等 (low-level I/O),其结构框架如下: 2  使用 Asio 2.1  下载  Asio 可分为 ...

  6. 颜色框架Hue相关使用方法

    Hue地址 cocoapods安装Hue pod "Hue" 导入框架 import Hue 将十六进制数字变成对应的颜色值 let color = UIColor.init(he ...

  7. &lbrack;one day one question&rsqb; nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  8. C&num;使用GUID

    全局唯一标识符(GUID,Globally Unique Identifier) What is GUID 也称作 UUID(Universally Unique IDentifier) . GUID ...

  9. 过滤器&lpar;filter&rpar;,监听器&lpar;listener&rpar;,与servlet的执行顺序

    创建: 加载顺序 监听器-->过滤器-->Servlet.项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.销毁的时候是反序进行 ...

  10. gdufe1534-小小怪一定认真听课-dfs

    Problem Description: 又到了选课的时间啦.大一萌新小小怪下士第一次选课没有制定好高效的策略,导致第一学期的学分不高,他想在第二学期获得尽可能多的学分,因此作为小小怪下士的上司搭档兼 ...