文档章节

Request 和 Response 原理

Jusenr
 Jusenr
发布于 2016/05/17 00:45
字数 1277
阅读 10
收藏 0
点赞 2
评论 0

* Request 和 Response 原理:


    * request对象和response对象由服务器创建,我们只需要在service方法中使用这两个对象即可
    
    * 继承体系结构:
        ServletRequest <--继承-- HttpServletRequest <--实现--- RequestFacade

* Response:封装响应消息,设置响应消息
    * 设置响应行:HTTP/1.1 200 ok
        * setStatus(int code):设置响应状态码
            * 演示重定向:302
                //简化版的重定向
                response.sendRedirect("http://192.168.1.66:8080/zxc/one");
                
                * 实现原理
                //1.设置响应状态码为 302
                response.setStatus(302);
                //2.设置响应头 location
                response.setHeader("location", "http://192.168.1.66:8080/zxc/one");
        
    * 设置响应头:
        * setHeader(String name,String value):
        * setDateHeader(String name, long date)
        * setIntHeader(String name, int value)

    * 设置响应体:
        * getOutputStream():发送字节数据
            * 验证码:
                * 防止恶意注册
        
        * getWriter():发送字符数据
            * 发送中文数据时,需要在获取流之前设置编码方式,并且要告诉客户端浏览器,服务器使用的编码方式
                //简化版设置编码的方式
                response.setContentType("text/html;charset=utf-8");

 1 package Response;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 public class ResponseTest extends HttpServlet {
12 
13     
14     private static final long serialVersionUID = -3007244764565301466L;
15 
16     public void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18     /*
19      * 设置响应消息体:
20      *     getOutputStream():发送字节数据
21      *     getWriter():发送字符数据
22      */
23         /*
24         //设置流的编码方式
25         response.setCharacterEncoding("utf-8");
26         //告诉客户端,服务器使用的编码方式
27         response.setHeader("content-type", "text/html;charset=utf-8");
28         */
29         
30         //设置编码方式
31         response.setContentType("text/html;charset=utf-8");
32         //获取字符输出流
33         PrintWriter pw = response.getWriter();//默认编码是 iso-8859-1
34         //设置数据
35         pw.write("<h3>你好啊 ! response...</h3>");
36         //刷新
37         pw.flush();
38     }
39 
40     public void doPost(HttpServletRequest request, HttpServletResponse response)
41             throws ServletException, IOException {
42         this.doGet(request, response);
43 
44     }
45 
46 }

 


* Request:封装请求消息,获取请求消息
    * 获取请求消息:
        * 获取请求行:GET /day08/req1?name=zs HTTP/1.1
            * getMethod():获取请求方式
            * getContextPath():获取虚拟目录
            
            * getRequestURI():获取URI(统一资源标识符)    /day07/one        /one
            * getRequestURL():获取URL(统一资源定位符)    http://localhost:8080/day07/one
            * getRemoteAddr():获取客户机的IP地址
            
            * getQueryString():get方式获取请求参数
        * 获取请求头:
            * String getHeader(String name)
            * long getDateHeader(String name)
            * int getIntHeader(String name)  
            
            

 1 package Request;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class RequestTest2 extends HttpServlet {
11 
12     private static final long serialVersionUID = -5095708647887091449L;
13 
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16 
17         //获取请求头
18         String agent = request.getHeader("user-agent");
19         System.out.println(agent);
20         
21         if(agent.contains("MSIE")){
22             System.out.println("IE  来了...");
23         }else if(agent.contains("Firefox")){
24             System.out.println("火狐   来了...");
25         }else if(agent.contains("Chrome")){
26             System.out.println("谷歌    来了...");
27         }else{
28             System.out.println("其他浏览器  来了...");
29         }
30         
31         System.err.println("..............................");
32     }
33 
34     public void doPost(HttpServletRequest request, HttpServletResponse response)
35             throws ServletException, IOException {
36         this.doGet(request, response);
37 
38     }
39 
40 }

 


        * 获取请求体:封装post请求参数数据
            * BufferedReader getReader():
            * ServletInputStream getInputStream():
        
        
            * 通用的获取请求参数的方式:
                * String getParameter(String name):根据键名获取值
                * String[] getParameterValues(String name):根据键名获取值的数组,一般用于复选框
                * Map<String,String[]> getParameterMap():获取所有参数的map集合
                * Enumeration getParameterNames():获取所有的键名枚举
        
        

 1 package Request;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class RequestTest extends HttpServlet {
11 
12     private static final long serialVersionUID = 4919849090529066482L;
13 
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16 
17         //演示获取请求行数据
18         
19         System.out.println(request.getMethod());//获取请求发式
20         System.out.println(request.getContextPath());//获取虚拟目录
21         System.out.println(request.getRequestURI());//获取URI
22         System.out.println(request.getRequestURL());//获取URL
23         System.out.println(request.getRemoteAddr());//获取ip
24         System.out.println(request.getQueryString());//获取请求参数
25         System.out.println(request.getProtocol());//获取协议
26         
27         System.err.println("--------------------------");
28         
29         response.sendRedirect(request.getContextPath()+"/index.jsp");
30     }
31 
32     public void doPost(HttpServletRequest request, HttpServletResponse response)
33             throws ServletException, IOException {
34         this.doGet(request, response);
35 
36     }
37 
38 }

 

 

   * 请求参数中文乱码问题:
                1.通用:
                    //1.解码  iso
                    byte[] bytes = username.getBytes("iso-8859-1");
                    //2.编码 utf-8
                    username = new String(bytes, "utf-8");
                2.post专用
                    //设置输入流的编码为 utf-8
                    request.setCharacterEncoding("utf-8");
    
    * 域对象:代表一次请求
    
    * 请求转发:
        * 转发特点:
            1.地址栏不发生变化
            2.一次请求,一次响应
            3.不能转发外部站点

 1 package Request;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class RequestTest7 extends HttpServlet {
11 
12     private static final long serialVersionUID = 3744695995118989884L;
13 
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16 
17         System.out.println("req7 被访问了。。。");
18         
19         //存储数据
20         request.setAttribute("msg", "hehehe...");
21         
22         //转发至req
23         request.getRequestDispatcher("/req").forward(request, response);
24     }
25 
26     public void doPost(HttpServletRequest request, HttpServletResponse response)
27             throws ServletException, IOException {
28         this.doGet(request, response);
29 
30     }
31 
32 }

 


        * 重定向的特点:
            1.地址栏发生变化
            2.两次请求,两次响应
            3.可以访问外部的站点

 1 package Response;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class ResponseTest2 extends HttpServlet {
11 
12     /**
13      * 
14      */
15     private static final long serialVersionUID = -449184946348811489L;
16 
17     public void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19 
20         System.out.println("resp2 被访问了。。。");
21         //演示重定向
22         //1.设置相应状态码 302
23         response.setStatus(302);
24         
25         //2.设置相应头  location
26         //注意: http:// 不可以少
27         //response.setHeader("location", "http://192.168.1.66:8080/zxc/resp");
28         
29         //简化版的重定向
30         response.sendRedirect("http://192.168.1.66:8080/zxc/resp");
31     }
32 
33     public void doPost(HttpServletRequest request, HttpServletResponse response)
34             throws ServletException, IOException {
35         this.doGet(request, response);
36 
37     }
38 
39 }

 

本文转载自:http://www.cnblogs.com/rongsnow/p/5167692.html

共有 人打赏支持
Jusenr
粉丝 0
博文 20
码字总数 10876
作品 0
西安
Android工程师
会话技术-session

场景 session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。 request.getSession(false) 只获取,不创建 session的实现原理 原理 如何防止关闭浏览器后存...

遥远的绝响 ⋅ 2015/11/12 ⋅ 0

websocket介绍- 2

在讲Websocket之前,我就顺带着讲下 long poll 和 ajax轮询 的原理。 首先是 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。 场景再现: ...

dfatxm ⋅ 2016/11/29 ⋅ 0

day10 Request&Response

service(request,response)工作原理: Response: 响应行:响应的协议 响应的状态码 响应的描述 响应头 响应正文 状态码,字节流,字符流: 注意:设置错误的要用:sendError() 重定向: 乱码:...

萧小蚁 ⋅ 2016/03/13 ⋅ 0

jsp重定向forward和sendRedirect的比较

JSP的重定向有两种:forward和sendRedirect,它们的原理以及区别是什么呢? 它们在使用上的区别有很多,那些都是表面现象,在理解了它们各自的原理以后,使用上的区别那就能容易掌握了。 一、...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

MediaWiki自动登陆和更新页面

Mediawiki系统开放了API,向wiki系统的api.php发送http请求,可实现很多功能。 1.登陆:原理可查看mediawiki api文档 # Login userName = '***' password = '***' headers = dict() headers...

TinkerS ⋅ 2012/04/09 ⋅ 0

springboot的shiro配置之过滤器

springboot整合shiro的文章到处都是。包括springboot的官网都有相应的例子。但是这块有个注意点,需要那些从springmvc迁到springboot的朋友注意下。这个问题困扰我了两三天,今天分享出来让后...

hyssop ⋅ 2016/11/21 ⋅ 0

OkHttp的Interceptor原理分析

OkHttp的Interceptor原理分析 标签(空格分隔): Java OkHttp Interceptor Chain 样例 上面代码中,我已经向mClient中添加了两个拦截器。第一个用于给原来的请求添加一个auth_token查询参数...

林泳坛 ⋅ 2016/03/03 ⋅ 0

Android Telephony分析(三) ---- RILJ详解

前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程。 这里说的RILJ指的是RIL.java (frameworksopttelephonysrcjavacomandroidinternaltelephony) , RILC指的是Ril.cpp (ha...

linyongan ⋅ 2016/07/29 ⋅ 0

Servlet开发入门

一:Tomcat简介 内部原理主要一个connector,一个container;connector主要负责解析网络请求,container负责生成一个ruquest和一个response; 二:servlet简介 Servlet是sun公司提供的一门用...

城固如春 ⋅ 2016/08/31 ⋅ 0

爬虫课堂(十六)|Scrapy框架结构及工作原理

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的...

小怪聊职场 ⋅ 03/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 35分钟前 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 51分钟前 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部