java模拟servlet_java入门--模拟实现一个tomcat服务器

package com.bjsxt.server;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.util.*;

public class Request {

private InputStream is;

private String requestInfo;

private String method;// post get private String url;// //用于存储参数的Map集合 //username=zhangsan&password=qwer&role=manager&role=clerk /** key value* username [zhangsan]* password [qwer]* role [manager,clerk]** */

private Map> paramaterValues;

private static final String CRLF="\r\n";

private static final String BLANK=" ";

public String getUrl() {

return url;

}

public Request(){

requestInfo="";

method="";

url="";

paramaterValues=new HashMap>();

}

public Request(InputStream is){

this();

this.is=is;

paraseRequeseInfo();

}

public void paraseRequeseInfo(){

// 获取请求信息 byte[] buf=new byte[10240];

int index = 0;

try {

index = is.read(buf);

} catch (IOException e) {

e.printStackTrace();

}

requestInfo=new String (buf,0,index);

// 取出请求行 请求方式 url地址 请求的协议 String requestLine=requestInfo.substring(0,requestInfo.indexOf(CRLF)).trim();

String[] requestLines = requestLine.split(" ");

method=requestLines[0];

String paramaterLine="";

if(method.equalsIgnoreCase("get")){// 请求方式是get if(requestLines[1].contains("?")){

url=requestLines[1].substring(0,requestLines[1].indexOf("?"));

String[] urls=requestLines[1].split("\\?");

paramaterLine=urls[1].trim();

}else{

url=requestLines[1];

}

}else{//请求方式是Post url=requestLines[1];

paramaterLine=requestInfo.substring(requestInfo.lastIndexOf(CRLF)+1).trim();

}

parseParamater(paramaterLine);

}

public void parseParamater(String paramaterLine){

//username=asdf&password=qwer&role=manager&role=clerk

System.out.println("paramaterLine:"+paramaterLine);

if("".equalsIgnoreCase(paramaterLine)){

return;

}

String[] lines = paramaterLine.split("&");

/*[username,asdf][password,qwer][role,manager][role,clerk]*/

/** key value* username [zhangsan]* password [qwer]* role [manager,clerk]** */

for(String line:lines){

String[] keyValue = line.split("=");

if(keyValue.length==1){// key= keyValue=Arrays.copyOf(keyValue,2);

keyValue[1]=null;

}

String key=keyValue[0];

String value=keyValue[1]==null?null:decode(keyValue[1],"UTF-8");

if(paramaterValues.containsKey(key)){// List values = paramaterValues.get(key);

values.add(value);

}else{

List values=new ArrayList();

values.add(value);

paramaterValues.put(key,values);

}

}

System.out.println(paramaterValues);

}

public String decode(String value,String charset){

// %E5%BC%A0%E4%B8%89 UTF-8 try {

return URLDecoder.decode(value,charset);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return null;

}

// 根据键向外界返回参数的方法 public String getParamater(String name){

if(paramaterValues.containsKey(name)){

List list = paramaterValues.get(name);

if(null == list || list.size()==0){

return null;

}else{

return list.get(0);

}

}

return null;

}

public String[] getParamaterValues(String name){

if(paramaterValues.containsKey(name)){

List list = paramaterValues.get(name);

if(null == list || list.size()==0){

return null;

}else{

String[] values = list.toArray(new String[0]);

return values;

}

}

return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值