request对象的原型是javax.servlet.http.HttpServletRequest.此对象由服务器自动创建。
在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。服务器在创建此对象时把Http请求的三样数据已经封装给了request对象。所以想获得请求的数据只要调用request对象的getXXX方法即可。
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
请求参数:
get请求: 数据存在于请求行中,网址中?后面部分;
post请求:数据存在于请求正文中;
常用的获取数据的方法(请求体):
String getParameter(String name) 获得指定参数名对应的一个值。如果有返回字符串,如果没有则返回null。
String[] getParameterValues(String name) 获得指定参数名对应的一个数组。如果有返回字符串数组,如果没有则返回null。
Map<String,String[]> getParameterMap(); 获取表单中所有的数据。//框架用
setCharacterEncoding(String env) 设置请求体的编码,用于解决POST请求参数乱码问题,只解决post请求正文的乱码问题
new String(username.getBytes("iso-8859-1"),"UTF-8"); 解决get方式提交的乱码
与请求行相关的方法
getMethod(); //获取请求方式
getRequestURL(); //获取URL
getRequestURI(); //获取URI
getContextPath();// 获取项目名
getRemoteAddr(); // 获取客户机IP地址
与请求头相关的方法
getHeader(String name); 以字符串形式返回请求头的值
request的生命周期: 当服务器收到客户端发送的请求时,就会创建request对象,当服务器对这次请求做出回应了,呢么request对象就会被销毁.存的数据只能在一次请求范围内有效!!!
request作为域对象的相关方法
request.setAttribute(String name,Object value); 向request中添加<key,value>
Object request.getAttribute(String name);
请求转发
request.getRequestDispatcher("/XXXServlet").forward(request,response); 当下一个资源需要传递过来的数据时适合使用;
重定向
respnose.sendRedirect(request.getContextPath()+"/XXXServlet"); 当下一个资源不需要传递过来的数据时适合使用。
转发与重定向的区别
0.转发服务器内部执行, 重定向是浏览器执行
1.转发的地址栏没有变化, 重定向的地址栏发送了变化.
2.转发一次请求一次响应, 重定向是两次请求两次响应.
3.转发的路径不需要写工程名, 重定向的路径需要加工程名.
4.转发只能在本网站内部, 重定向可以定向到任何页面.
5.转发可以传递数据, 重定向不能传递数据。
原文:https://www.cnblogs.com/xiao-cui-tong/p/13111455.html