第三季

需购买观看

201

尚学堂JAVA最全教程

配合JAVA300集视频课程,一集一个文档

本文档配合:java300集第一季201

【最新文档更新请加入速学堂www.sxt.cn】

【专业JAVA培训机构,真正零首付入学www.bjsxt.com

Request的进一步实现存储参数:

   requestServer相应的代码参考第200集即可。
 

手写tomcat_封装Request_方式及url

本节课主要讲解以面向对象封装Request。说白了就是将原有receive()方法中获取的请求的内容进行分析,分割字符串获取请求方式、请求资源、请求参数即可,封装成Request类。

目标

原有receive()方法中关于请求代码的片段进行封装,封装成Request类,同时获取请求方式、请求资源、请求参数

socket = server.accept();
//使用字节输入流  一次性读取请求内容
byte[] data =new byte[20480];
int len =socket.getInputStream().read(data);
String requestInfo=new String(data,0,len).trim();
System.out.println(requestInfo);
/**
 * 目标:
 * 1、获取Request 协议
 * 2、获取请求方式
 * 3、获取请求资源
 * 4、获取请求参数
 * @author 北京尚学堂裴新
 * */
public class Request {
//两个常量
private static final String BLANK=" ";
private static final String CRLF="\r\n";
private Request () {
}
}


获取Request协议 Request类为:

加入属性存储Request协议信息

private String requestInfo;
Request(InputStream is){
//使用字节输入流  一次性读取请求内容
byte[] data =new byte[20480];
int len=-1;
try {
len = is.read(data);
requestInfo=new String(data,0,len).trim();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(requestInfo);
//没有获取信息,不用进行下一步操作
if(null==requestInfo||requestInfo.length()<1){
return ;
}
//解析字符串
        parseRequestInfo();
}

加入解析字符串的方法使用构造器接收Socket的输入流,通过Socket的输入流即可获取Request协议,将receive()方法中的代码放入构造器即可,获取协议信息后,进行字符串的解析。

/**
 * 解析字符串
 */
private void parseRequestInfo(){
}

GET请求方式

POST请求方式

GET /index.html? name=test&pwd=123456  HTTP/1.1 

Accept: text/html, application/xhtml+xml, * / * 

Accept-Language: zh-CN 

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) 

Accept-Encoding: gzip, deflate 

Host: localhost 

Connection: Keep-Alive

POST /index.html  HTTP/1.1 

Accept: text/html, application/xhtml+xml, * / * 

Accept-Language: zh-CN 

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) 

Accept-Encoding: gzip, deflate 

Host: localhost 

Connection: Keep-Alive

  

name=test&pwd=123456 

从请求协议中

发现请求方式、请求资源在首行,请求参数可能存在,如果存在必须区分,get请求时在首行,post请求时在请求实体中,因此必须加以区分。

加入三个属性,分别存储 请求方式、资源、参数。

//请求方式
private String method;
//请求资源
private String url;
//请求参数
private String queryStr;

分解字符串首行,获取请求方式获取method

·    1、首行如何获取?

·     截取字符串 ,从0位置 HTTP/的位置即可

·    2、请求方式如何获取?

·     截取字符串 ,从0位置到/的位置即可

 parseRequestInfo()中加入以下代码即可:

//首行
String firstLine =requestInfo.substring(0,requestInfo.indexOf("HTTP/")).trim();
//请求方式
method =firstLine.substring(0, requestInfo.indexOf("/")).trim().toLowerCase();


分解字符串首行,获取url,注意,如果请求方式为get,url中可能存在请求参数,需要将请求参数进行分离。url如何获取?获取url

·    在获取的首行中,截取字符串,从/到最后即可

·    1get 可能存在请求参数,如果存在 通过 ? 分割字符即可   

·    2post 即为url

 parseRequestInfo()中加入以下代码即可:

//url
url=firstLine.substring(requestInfo.indexOf("/")).trim();
//我们这里只考虑两种get|post情况,如果请求方式为get 需要进一步判断
if(method.equals("get")&&url.contains("?")){
String[] urlPara=url.split("\\?");
url=urlPara[0]; //请求资源
queryStr=urlPara[1];//请求参数
}else if(method.equals("post")){
}

 到此,已经获取请求方式和URL,下一步需要获取请求参数和封装请求参数。

总结

·    封装Request 协议

·    获取method

·    获取url


分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183