一、Servlet的请求处理
servlet代码可以对浏览器的请求进行处理,也可对服务器的响应进行处理,下面主要介绍这两个的特点。
1、浏览器的请求(Request)
浏览器请求大致分为三大块:请求行、请求头、请求实体
(1)请求行
(1.1)获取请求方式:可以获取是get方法请求还是post方法请求
(1.2)获取地址栏路径
URL(统一资源定位符) 能够获取项目中完整的目录
例:http://localhost:8080/abc/test
URI(统一资源标识符) 获取项目目录的一部分
例:abc/test
(1.3)获取协议及版本 getScheme()协议 getProtocol()协议和版本
=============================
(2)请求头
(2.1)根据请求头的key获取其value
(2.2)获取请求头中的所有key
=============================
GET方式的额外数据(数据位于URL上)
该方只是介绍get方式获取用户表单的数据,并不算在请求实体中。
(3)请求实体 post方式的额外数据会放在请求实体中
(用户表单的方式提交的才能生效)
(3.1)getParameter()方法可以获取get方式或post方式的额外数据,但该方法只能获取一key一value的值
(3.2)getParameterValues()方法用户获取一Key多value的数据
(3.3)获取访问自己服务器地址的ip(少用)
2、服务器的响应(Response)
服务器的响应分为状态行,应答头和响应实体
注意:应答头和响应实体需要一起使用
服务器的响应即表示服务器返回给浏览器端的一次响应消息
(1)状态行(由服务器来设置)
这里只是说了几个常用的,还有具体的可以自行去搜索使用
协议版本 http状态码 http状态描述
http状态码 200 404(路径错误) 500(服务器代码出错)
http状态描述 ok notfound Internal Server Error
(2)应答头(服务器提供给浏览器该如何显示数据的一些相关信息)
响应实体(服务器返回给客户端的数据)
(2.1)通过getWriter()返回的打印流给浏览器返回字符数据
(2.2)通过getOutputStream()返回字节输出流用于返回二进制数据
(这里输出了一张图片)
额外的说明:
1.先设置字符集,再打开流。
2.比较常用,出现乱码也可以使用该代码 response.setContentType(“content-type”, “text/html;charset=utf-8”);
以上就是servlet中浏览器请求与服务器响应的特点,以及该如何使用获取。
下面介绍请求转发与重定向的区别
请求转发和重定向都是服务器中一个资源跳转到另一个资源的行为,在代码使用过程中,根据需要,从二者选其一。
二、请求转发
1、过程:浏览器请求一次,服务器响应一次,响应并创建一个request对象。
第一个响应的对象把数据转发给第二个servlet对象,由第二个对象返回给浏览器
2、跳转:
url地址可以设置本服务器中的webServlet注解,或html
request.getRequestDispatcher("url地址").forward(request, response);
例:
3、数据设置
key是String类型,value可以是任意类型
request.setAttribute("key", "value");
例:
三、重定向
1、过程:浏览器每次请求,服务器都会创建一个request对象,第一个对象不把请求数据传给第二个,直接响应并告诉自己的请求路径,如果不匹配,浏览器为了获取需要的数据,修改地址栏,重新请求,请求完毕对象消失,两个对象不同,所以数据无法传递
2、跳转:url地址设置同上
response.sendRedirect("url地址");
3、重定向无法设置数据,因为请求次数的问题,两次请求request对象不同,数据无法进行传递。
二者的区别
一、请求转发不会改变地址栏
重定向会将地址栏改变 (浏览器向服务器发了两次请求,第二次请求改变地址)
二、请求转发可以通过request中的Attribute属性传递数据
重定向不可使用request传数据
三、请求转发的请求资源不可以是本服务器以外的资源
重定向可以请求本服务器以外的资源
注意:无论是请求转发还是重定向后,都不要在其代码下面加其他代码。如执意要加也不会报错,但代码不会进行处理,等同无效。