请求和响应
1.请求对象
- 请求,顾名思义,就是使用者希望从服务器端索取一些资源,向服务器发出询问。在B/S架构中,就是客户端浏览器向服务器发出询问。在我们的JavaEE工程中,客户浏览器发出询问,要遵循HTTP协议所规定的。
- 请求对象,就是在JavaEE工程中,用于发送请求的对象。我们常用的对象就是ServletRequest和HttpServletRequest,它们的区别就是是否和HTTP协议有关。
2.响应对象
- 概述:响应,它表示了服务器端收到请求,同时也已经处理完成,把处理的结果告知用户。简单来说,指的就是服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。
3.什么是get
- get,就是向某个地方获取一些数据,这个获取的过程可以理解为一个简单的查询,没有造成什么影响,专业名词叫做"幂等",意思是:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。所以这种类型的请求可以被缓存,下次有同样的请求就直接从缓存读取,不用浏览器再次发送请求。
- get请求一般是通过url,url里面拼接上参数。
4.什么是post
- post是希望服务器做某项操作,也就是不幂等。因为是设计成有影响的操作,所以它不能被缓存。post请求一般都是表单提交,可以在body里面携带数据。所以网上说的安不安全只是因为get请求是可以在url看到,post请求是需要看一下开发者工具而已。
5.请求正文中中文编码问题
POST方式请求
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
GET方式请求
GET方式请求的正文是在地址栏中,在Tomcat8.5版本以后,Tomacat服务器已经帮我们解决了,所以不会有乱码问题了。
6.请求转发(与重定向的区别)
/**
* 请求转发的注意事项:负责转发的Servlet,转发前后的响应正文丢失,由转发目的地来响应浏览器。
* 重定向特点:
* 两次请求,浏览器行为,地址栏改变,请求域中的数据会丢失
* 请求转发:
* 一次请求,服务器行为,地址栏不变,请求域中的数据不丢失
*
* 请求域的作用范围:
* 当前请求(一次请求),和当前请求的转发之中
*/
public class RequestDemo6 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.拿到请求调度对象
RequestDispatcher rd = request.getRequestDispatcher("/RequestDemo7");//如果是给浏览器看的,/可写可不写。如果是给服务器看的,一般情况下,/都是必须的。
//放入数据到请求域中
request.setAttribute("CityCode", "bj-010");
//2.实现真正的转发操作
rd.forward(request, response);//实现真正的转发操作
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class RequestDemo7 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取请求域中的数据
String value = (String)request.getAttribute("CityCode");
response.getWriter().write("welcome to request demo 7 "+value);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
7.请求包含
/**
* 请求包含的注意事项:被包含者的响应消息头丢失。因为它被包含起来了。
* 请求包含
*
* 它是把两个Servlet的响应内容合并输出。
* 注意:
* 这种包含是动态包含。
*
* 动态包含的特点:
* 各编译各的,只是最后合并输出。
*/
public class RequestDemo8 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("I am request demo8 ");
//1.拿到请求调度对象
RequestDispatcher rd = request.getRequestDispatcher("/RequestDemo9");
//2.实现包含的操作
rd.include(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class RequestDemo9 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("include request demo 9 ");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
版权声明:本文为weixin_54072875原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。