javaweb:request请求对象(5)
1.请求和响应的概述:
什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。
什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应。
2.HttpServletResponse对象
HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse
响应信息分为三部分:响应行、响应头、响应正文(响应体)
1.1 发送状态码的相关方法:
>>>1.设置状态码
setStatus(int sc) :参数就是状态码。
setStatus(int sc, String sm) :第一个参数表示状态码,第二个参数 就状态码的描述。
常见的状态码:200 响应成功
302 重定向
404 请求资源找不到
500 服务器代码出异常。
3.HttpServletRequest请求对象
HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中,常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数。
1.1 HttpServletRequest请求对象
1.获取请求行消息的相关方法:
常用的请求行方法:
>>> 1.获取请求提交的方式: getMethod();
>>> 2.获取请求的协议: getProtocol();
>>> 3.获取项目名称:getContextPath();
>>> 4.获取servlet路径:getServletPath();
>>> 5.获取请求路径: getRequsetURI(),getRequestURL();
uri对应的值:/项目名称/servlet路径
url对应的值:http://localhost:8080/uri
2.获取请求消息头相关的方法>>> 1. 根据消息头,获取值: String value = getHeader(消息头的名称);>>> 2. 获取所有的消息头: Enumeration er = getHeaderNames();根据Referer请求消息头,做一个防盗链的案例:难点:怎么判断这个发起的下载请求是从别的网站上发起的?解决方法:根据Referer请求头对应的值,是否包含了服务器的名称如果包含,就说明是从本网站下载的,否则就不是。3.获取请求参数相关的方法:>>> 1.根据name属性值,获取用户输入的值:String value = getParameter(name属性对应的值);>>> 2.根据name属性值,获取用户选择的值:String[] vaules = getParameterValues(name属性对应的值);>>> 3.没有参数,获取所有值:Map<String ,String[]> map = getParameterMap();4.解决请求参数的中文乱码问题:中文乱码处理分两种情况:第一种情况:处理get方式提交的中文乱码使用的String的构造方法解决中文乱码:new String(字节数组,编码格式);代码:String newvalue = new String(value.getBytes("ISO8859-1"),"utf-8");第二种情况:处理post请求的中文乱码问题:post提交,会把参数首先提交到request对象的缓冲区中,缓冲区默认编码是ISO8859-1,不支持中文处理方法:把request缓冲区的编码给设置成支持中文的码表格式。代码:request.setCharacterEncoding("utf-8");5.通过Requset对象传递数据什么域对象:在一定的范围内,可以存值和取值。request域对象:在一次请求中,可以存值和取值。>>> 存值: setAttribute(String key,Object obj);>>> 取值:Object obj = getAttribute(String key);>>> 移除: removeAttribute(String key);1.2 RequestDispatcher接口在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。得到转发对象:RequestDispatcher forwardObj = request.getRequestDispatcher("另一个资源的路径");常用方法:>>> 1.实现请求转发:forwardObj.forward(request,response);>>> 2.实现请求包含:forwardObj.include(request,response);1. 请求转发:特点:发送了一次请求,响应一次,和request域对象配合使用,可以实现值的传递。转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。请求重定向:特点:发送了两次请求,响应了两次,不能和request域对象配合使用。重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。2.请求包含:请求包含:在服务器内部完成的,路径不需要携带项目名称。
2.通过request获得请求行
获得客户端的请求方式:String getMethod()
获得请求的资源:
String getRequestURI()
StringBuffer getRequestURL()
String getContextPath() —web应用的名称
String getQueryString() ---- get提交url地址后的参数字符串
username=zhangsan&password=123
request.getRemoteAddr() — 获得访问的客户端IP地址request.getRemoteAddr() — 获得访问的客户端IP地址
public class LineServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1、获得请求方式String method = request.getMethod();System.out.println("method:"+method);//method:GET//2、获得请求的资源相关的内容String requestURI = request.getRequestURI();StringBuffer requestURL = request.getRequestURL();System.out.println("uri:"+requestURI);//uri:/WEB15/lineSystem.out.println("url:"+requestURL);//url:http://localhost:8080/WEB15/line//获得web应用的名称String contextPath = request.getContextPath();System.out.println("web应用:"+contextPath);//web应用:/WEB15//地址后的参数的字符串String queryString = request.getQueryString();System.out.println(queryString);//null//3、获得客户机的信息---获得访问者IP地址String remoteAddr = request.getRemoteAddr();System.out.println("IP:"+remoteAddr);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}
3.通过request获得请求头
long getDateHeader(String name)
String getHeader(String name)
Enumeration getHeaderNames()
Enumeration getHeaders(String name)
int getIntHeader(String name)
//1.获得指定头
request.getHeader("User-Agent");
//2.获得所有头的名字
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);System.out.println(headerName+":"+headerValue);
}
referer头的作用:执行该此访问的的来源
做防盗链
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><a href="/WEB15/referer">访问headerServlet资源</a><form action="/WEB15/line" method="get"><input type="text" name="username"><br><input type="password" name="password"><br><input type="submit" value="提交"><br></form>
</body>
</html>
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class RefererServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//对该新闻的来源进行判断String header = request.getHeader("referer");if(header!=null&&header.startsWith("http://localhost")){//是从自己的网站跳转过来的,可以看新闻response.setContentType("text/html;charset=UTF-8");response.getWriter().write("1000金牌");}else{response.getWriter().write("你是盗链者");}}
4.通过request获得请求体
请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()
public class ContentServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获得单个表单值String username = request.getParameter("username");System.out.println(username);String password = request.getParameter("password");//2.获得多个表单的值String[] hobbys = request.getParameterValues("hobby");for(String hobby : hobbys){System.out.println(hobby);}//3.获取所有请求参数的名称Enumeration<String> parameterNames = request.getParameterNames();while(parameterNames.hasMoreElements()){System.out.println(parameterNames.nextElement());}System.out.println("--------------------");//4.获得所有的参数,参数封装到一个Map<String, String[]>Map<String, String[]> parameterMap = request.getParameterMap();for(Map.Entry<String, String[]> entry : parameterMap.entrySet()){System.out.println(entry.getKey());for(String str : entry.getValue()){System.out.println(str);}System.out.println("--------------------");} }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
5.request的其他功能
1)request是一个域对象
request对象也是一个存储数据的区域对象
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
注意:request域的作用范围:一次请求中
2)request完成请求转发
获得请求转发器----path是转发的地址
RequestDispatcher getRequestDispatcher(String path)
通过转发器对象转发
requestDispathcer.forward(ServletRequest request, ServletResponse response)
public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//向request域中存储数据request.setAttribute("name", "tom");//servlet1将请求转发给servlet2RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");//执行转发的方法dispatcher.forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
public class Servlet2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//从request域中取出数据Object attribute = request.getAttribute("name");response.getWriter().write("hello haohao..."+attribute);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.request的其他细节
1.ServletContext域与request域的生命周期比较
ServletContext域
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个WEB应用
request域
创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中
2.转发与重定向的区别
1)重定向两次,转发一次请求
2)重定向地址栏的地址变化,转发地址不变
3)重定向可以访问外部网站,转发不能访问内部资源
4)转发的性能优于重定向
3.客户端地址与服务器端地址的写法
客户端地址:
是客户端去访问服务器的地址,服务器外部地址,特点:写上web应用名称
(直接输入地址,重定向)
服务器端地址:
服务器内部资源的跳转的地址,特点:不需要写web应用的名称
javaweb:request请求对象(5)相关推荐
- JavaWeb—Request请求对象
目录 一.概述 二.Request对象 2.1 Request继承体系 小结 2.2 Request获取请求数据 2.2.1 获取请求行数据 2.2.2 获取请求头数据 2.2.3 获取请求体数据 小 ...
- Servlet的学习之Request请求对象(2)
在上一篇<Servlet的学习(十)>中介绍了HttpServletRequest请求对象的一些常用方法,而从这篇起开始介绍和学习HttpServletRequest的常用功能. 使用Ht ...
- php request对象,PHP 中TP5 Request 请求对象的实例详解
PHP 中TP5 Request 请求对象 public/index.php app\index\controller\Index.php <?php namespace app\index\c ...
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Python Flask Web 第八课 —— request 请求对象
from flask import request 请求对象包含客户端发出的所有请求信息. 1. request.headers request.headers.get('User-Agent') 获 ...
- $.post把表单对象传递过去_第二章 第三节 Request请求对象详解
Request对象和Response对象是必须熟悉的. Request对象负责请求的构造和处理 Response对象负责返回资源的解析和处理 一.Request对象参数 Request(url[, c ...
- Request请求对象
一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...
- Flask框架——请求钩子与request请求对象
目录 请求钩子 request对象 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接 在请求开始时,根据需求进行权限校验 在请求结束时,指定 ...
- ThinkPHP5.0中Request请求对象的使用和常用的操作
request的使用 第一种方法 在控制器头部添加request引用 然后在方法里调用 'instance'类 然后在调用方法: public function index($name='name') ...
最新文章
- SMOTE过采样方法
- leetcode算法题--二分查找
- Android 手把手教您自定义ViewGroup
- 1.2 matlab数值数据的输出格式
- 【面试测试题】贪婪是好事
- Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序
- ABAP代码检查的注意事项有哪些
- c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”
- the computational graph needed to compute the outputs报错解决
- 深度学习笔记-卷积神经网络CNN与循环神经网络RNN有什么区别?
- 第三天,编码设置,主键设置与删除,无关子查询,相关子查询,表与表之间的关系...
- linux常用内核端口,基于Linux下的/O端口和I/O内存详解
- 马哥linux多道处理程序,马哥linux课堂笔记
- 计算机辅助设计与制造实例教程答案,计算机辅助设计实例教程= Example Course of Computer Aided Design...
- c语言链表课件,C语言链表详解ppt课件.ppt
- python之WeChat撩妹神奇
- 攻防世界 logmein wp
- win10安装账户卡住_安装win10系统卡住不动的原因和处理方法
- js字符串转换成数字
- 如果说未来不需要硬盘了,你会不会感到惊讶?