300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Request的学习笔记(属Servlet学习课程)

Request的学习笔记(属Servlet学习课程)

时间:2019-08-18 01:22:21

相关推荐

Request的学习笔记(属Servlet学习课程)

文章目录

获取请求消息数据1.获取请求行的数据2.获取请求头的数据3.获取请求体的数据4.获取其它的数据4.1.获取请求参数的通用方式中文乱码问题4.2.请求转发4.3.共享数据4.4.获取 ServletContext 对象继承与实现体系

浏览器访问服务器时,会将用户提交的参数数据、协议版本、请求头信息封装成请求报文(即请求数据包)发送给服务端。

服务器(例如Tomcat)收到请求报文会封装到 Request 对象中。程序员可以通过 Request 对象获取请求消息数据。

获取请求消息数据

1.获取请求行的数据

GET /web-demo-03/demo01?name=zhangsan HTTP/1.1

方法:

1.1.获取请求方式:GET

String getMethod()

1.2.获取虚拟目录:/web-demo-03

String getContextPath()

1.3.获取Servlet路径:/demo01

String getServletPath()

1.4.获取请求URI:/web-demo-03/demo01

URI 统一资源标识符

String getRequestURI()

1.5.获取GET方式的请求参数:name=zhangsan

String getQueryString()

1.6.获取请求URL:http://localhost:8080/web-demo-03/demo01

URL 统一资源定位符

String getRequestURL()

1.7.获取协议及版本:http/1.1

String getProtocol()

1.8.获取客户机的IP地址

String getRemoteAddr()

2.获取请求头的数据

请求头名称不区分大小写。

方法:

String getHeader(String name)通过请求头的名称获取请求头的值

Enumeration<String> getHeaderNames()获取所有的请求头名称。Enumeration 类似迭代器

示例代码:

package priv.lwx.javaex.web_demo_03.web.servlet;/*** 获取referer,防止盗链** @author liaowenxiong* @date /12/29 11:21*/import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet(value = "/demo06")public class ServletDemo06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取refererString referer = request.getHeader("referer");System.out.println(referer);// 防止盗链if (referer != null) {if (referer.contains("/web-demo-03")) {// 应用内正常访问System.out.println("播放电影");} else {// 应用外访问System.out.println("想看电影吗?来优酷吧!");}}}}

3.获取请求体的数据

只有 post 请求方式才有请求体,在请求体中封装了 post 请求的请求参数。

步骤:

3.1.获取流对象

BufferedReader getReader():获取字符输入流,只能操作字符数据

ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据(主要用于文件上传、视频上传等场景)

3.2.从流对象中取数据

示例代码:

package priv.lwx.javaex.web_demo_03.web.servlet.request;/*** 获取请求体的数据** @author liaowenxiong* @date /12/29 11:21*/import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.BufferedReader;import java.io.IOException;@WebServlet(value = "/request-demo05")public class RequestDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取请求消息体的数据// 1.获取字符流BufferedReader reader = request.getReader();// 2.读取数据String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}}}

4.获取其它的数据

4.1.获取请求参数的通用方式

不论 get 还是 post 方式,都可以使用下面的方法获取请求参数。

方法:

String getParameter(String name):根据参数名称获取参数的值。要注意的问题: 如果 name 与实际的请求参数名不一致,则返回 null。

如果前端页面并没有输入参数值,则返回空字符串""

String[] getParameterValues(String name):根据参数名称获取参数值的数组。例如:hobby=ds&hobby=ps

Enumeration<String> getParameterNames():获取所有请求参数的名称

Enumeration<String> parameterNames = req.getParameterNames();// 迭代遍历Enumeration对象while (parameterNames.hasMoreElements()) {String s = parameterNames.nextElement();System.out.println(s);}

Map<String,String[]> getParameterMap():获取所有请求参数的 Map 集合。

中文乱码问题

tomcat 8 已经将 get 请求方式的中文乱码问题解决了,但是 post 请求方式会出现中文乱码问题。

解决办法:

获取参数前,设置解码的字符编码为 utf-8,代码如下:

request.setCharacterEncoding("utf-8");

这个字符编码要和前端页面的字符编码保持一致。

4.2.请求转发

请求转发:一种在服务器内部的资源跳转方式

步骤:

4.2.1.通过 request 对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path),path 是转发目标的资源路径

4.2.2.使用 RequestDispatcher 对象来进行转发:requestDispatcher.forward(ServletRequest request, ServletResponse response)

特点:

4.2.3.浏览器地址栏的访问路径没有变化

4.2.4.只能转发到当前服务器内部的资源

4.2.5.转发只是一次请求

4.3.共享数据

域对象:一个有作用范围的对象,可以在范围内共享数据

Request 域对象:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

方法:

void setAttribute(String name,Object obj):存储数据

Object getAttribute(String name):获取数据;通过属性名获取属性值

void removeAttribute(String name):删除数据;通过属性名删除对应的数据;通过键移除对应的键值对

4.4.获取 ServletContext 对象

ServletContext getServletContext()

继承与实现体系

HttpServletRequest 接口继承自 ServletRequest 接口

org.apache.catalina.connector.RequestFacade(tomcat 实现的类型),实现 HttpServletRequest 接口

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。