request和response 概念

request代表请求对象
response代表的响应对象。

RequestFacade虽然实现了HttpServletRequest 这个接口。但并没有完成相应的请求功能。也就是说这个类并不是它的实现功能类。
Requst和Response才是HttpServletRequest与HttpServletResponse的实现功能类
叫做门面设计模式

   在我们Servlet中使用的request与response    

                        HttpServletRequest接口------>父接口  ServletRequest
                        HttpServletResponse接口----->父接口  ServletResponse

在tomcat中它采用门面模式对requst,response进行操作.
对外提供使用的是 RequestFacade ResponseFacade这两个类,
但是直正完成功能的是 Reqeust,Response类.

1.1.1 关于request,response总结:
1.它的作用:
request代表的是http请求对象,通过request可以获取Http请求信息.
response代表的是http响应对象,通过response可以设置响应信息。

                        2.在我们的servlet中使用的request,response是怎样来的?
                               它是tomcat服务器帮助创建的,通过service方法传递到了我们的servle中。
                               tomcat在创建request对象时,就将http请求中的信息封装到request中.
                              
                        3.它们的体系结构
                               ServletReqeust------>HttpServletReqeust-------->具体的实现类是由服务器创建的。tomcat中是 RequestFacade
                               ServletResponse----->HttpServletResponse------->具体的实现类是由服务器创建的。tomcat中是 ResponseFacade

              http响应中包含三部分

1.响应行
响应行中重要的是状态码.
response对象可以通过 setStatus(int num)方法去操作.
• setStatus(int)
• 常用状态码:200、302、304、404、500

                        2.响应头
                               setHeader():适用于单值的响应头
                               addHeader():适用于多值的响应头
                               setDateHeader();适用于毫秒值的响应头
                               setIntHeader();适用于单值的int型的响应头
                        3.响应正文
                        如果出现中文将是乱码,这里就要解决乱码:
                        response.setContentType("text/html;charset=utf-8");

示例2:通过response来控制响应头,完成指定时间跳转到指定页面.

带协议路径
response.setHeader(“refresh”,
不带协议路径
response.setHeader(“refresh”, “3;url=/web_03/index.html”);

 获得向客户端进行数据输出的流对象:

   //得到文件路径

String path=“E:\教学课件\javase课件\java-se-ppt\讲课ppt\javaWeb\web_03\0.jpg”;

//创建输入流对象读取图片信息
FileInputStream in=new FileInputStream(path);

     //将读取到的字节信息保存到字节数组
         //这里使用的是io-jar包下的一个工具类完成的(更高效)
         byte[] b=IOUtils.toByteArray(in);
        
         //使用响应对象得到字节输出流对象,完成对字节数据的输出
     resp.getOutputStream().write(b);

对于请求方式post与get的参数问题
1.如果是post请求,那么在请求正文中会显示请求参数。
username=tom&password=123

                        2.如果是以get请求方式,请求参数会在请求行中.
                               url?username=tom&password=1234
                              
                
                 1.获取http请求行中信息.
                        1.获取请求方式

request.getMethod() ///GET POSt
2.获取请求路径
request.getRequestURI(); // /servlet00/Demo URI统一资源标识符
request.getRequestURL().toString();
//http://localhost:8080/servlet00/Demo URL统一资源定位符

                               URI包含了URL,URI是URL的抽象                    
                               URI表示资源是什么
                               URL表示资源在网络上的具体位置                                    
                              
                        3.获取请求协议

request.getProtocol();

1.1.2 关于request获取客户机信息.

                               1.得到客户机ip地址.
                                      request.getRemoteAddr();
                                     
                               2.获取请求的资源名称
                                      getContextPath();这个方法得到的是工程名,其实是虚拟目录名称.
                                     
                                      /servlet00/Demo
                                      /servlet00---->工程名或虚拟目录.
                                      /Demo---->它代表的是资源路径
  1. 获取请求时的参数信息
    request.getQueryString();是在请求时输入的参数( ? 号后面的部分 )

// // 1.获取请求方式.
// String method = request.getMethod();
// System.out.println(method); // GET
//
// // 2.获取请求uri
//String uri = request.getRequestURI();
//System.out.println(uri); //servlet00/Demo
//获取请求url
//String url = request.getRequestURL().toString();
//http://localhost:8080/servlet00/Demo

// 3.获取协议
// String protocol = request.getProtocol();
// System.out.println(protocol); // HTTP/1.1
//
// // 4.得到客户机的ip地址
// String ip = request.getRemoteAddr();
// System.out.println(“IP:” + ip);
//

   //5.获取工程名称
   //String pname=request.getContextPath(); //工程名
   //System.out.println(pname);

//6. 获取请求时的参数信息
String cs = req.getQueryString();
System.out.println(cs);

request获取请求参数
		    1.String getParameter(String name)
                               根据请求参数中的name值获取对应的value值.
                              
                        2.String[] getParameterValues(String name);
                               操作多个值的组件,例如  checkbox。
                              
                        3.Enumeration getParameterNames();
                               获取请求参数中的所有name的值.
                              
                        4.Map<String,String[]> getParameterMap()
                               得到请求参数的name与value的map映射

       // 设置响应编码
       response.setContentType("text/html;charset=utf-8");
      
       //针对于post请求中文乱码解决
      
       request.setCharacterEncoding("utf-8");

       String username = request.getParameter("username"); //
       // 如果name写错,或者是没有name,那么得到的是null值.
       // username = new String(username.getBytes("iso-8859-1"), "utf-8");

       System.out.println(username);

1.1 【request域对象】
Servlet中三大域对象:request、session、application(ServletContext的对象),都有如下三个方法:
    > void setAttribute(String name, Object value)
    > Object getAttribute(String name)
> void removeAttribute(String name);

                ServletContext就一个域对象.

request的创建与销毁.
当请求来的时候,tomcat服务器会创建request,response对象。
当响应产生,request对象销毁。
也就是说,每一次请求都是一个新的request。

                        request也是一个域对象,它也可以存取删除数据。
                               setAttribute()
                               getAttribute()
                               removeAttribute();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Angzush

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值