package com.bjsxt.server; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class Request {/*请求*/ private InputStream is;//输入流 private String requestInfo;//请求字符串,请求方式,请求的路径,参数,协议,协议版本,请求的正文。。。 private String method;//请求的方式 private String url;//请求的url //输入框的name为key,值为value /* * key: username value :bjsxt * key:pwd value:123 * key:hobby value :read,ball * */ private Map<String,List<String>> parametermapValues;//参数 private static final String CRLF="\r\n";//换行 private static final String BLANK=" ";//空格 //构造方法,初始化属性 public Request() { parametermapValues=new HashMap<String,List<String>>(); method=""; url=""; requestInfo=""; } public Request(InputStream is){ this();//调用本类无参的构造方法 this.is=is; try { byte [] buf=new byte[20480]; int len=this.is.read(buf); requestInfo=new String(buf,0,len); } catch (IOException e) { return; } //调用本类中的分解请求信息的方法 this.parseRequestInfo(); } //分解请求信息的方法 /** * 请求方式 * 请求路径 * 请求的参数 * */ private void parseRequestInfo(){ String paraString="";//用于存储请求参数 //获取请求参数的第一行 String firstLine=requestInfo.substring(0, requestInfo.indexOf(CRLF)).trim();//从0开始,到第一个换行的位置 //分解出请求方式 int index=firstLine.indexOf("/"); this.method=firstLine.substring(0, index).trim(); //分解url ,get可能包含参数,也可能不包含参数post String urlString= firstLine.substring(index,firstLine.indexOf("HTTP/")).trim(); //判断请求方式是GET还 是POST if("get".equalsIgnoreCase(this.method)){ //包含请求参数 if (urlString.contains("?")) { String [] urlArray=urlString.split("\\?"); this.url=urlArray[0]; paraString=urlArray[1]; }else{ this.url=urlString; } }else{//post不包含请求参数 this.url=urlString; paraString=requestInfo.substring(requestInfo.lastIndexOf(CRLF)).trim(); } if (paraString.equals("")) { return; } //请求参数 //System.out.println(paraString); } //用于测试 /*public void show(){ System.out.println(this.url); System.out.println(this.method); }*/ private void parseParam(String prarString) { String [] token=prarString.split("&"); for(int i=0;i<token.length;i++) { String keyValues=token[1]; String []keyValue=keyValues.split("=");//username if (keyValue.length==1) { keyValue=Arrays.copyOf(keyValue, 2); keyValue[1]=null; } //将表单元素的name与name对应的值存储到Map集合 String key=keyValue[0].trim(); String value=keyValue[1]==null?null:keyValue[1].trim(); //放到集合中存储 if (!parametermapValues.containsKey(key)) { parametermapValues.put(key, new ArrayList<String>()); } List<String> values=parametermapValues.get(key); values.add(value); } } public static void main(String[] args) { Request req=new Request(); req.parseParam("username=123&pwd=123&hobby=ball&hobby=paint"); System.out.println(req.parametermapValues); } }
得不到视频中的效果 这是为什么。?
老师,这里同步代码是锁的代码块,锁对象是指,放里面的对象或者线程,里面所有的代码都会锁住吗?
占用内存是负数为什么呢
这里为什么要使用static关揵字,意义在哪里
因为Set没有指定索引的位置,所以获取所有元素的时候只能用增强for来实现吗?
发现一个奇怪的东西:
"ab".matches("a") // false
为什么会返回false呢
按正则的逻辑,包含a可以匹配到的啊.
是java做了特殊处理吗?
当 c == '}' || c == ']' || c == ')' 时,才会进入if判断,不是说明这个栈不是空的吗,这里加stack.empty()判断有什么作用呢?
为什么当前线程的名字不是Test Thread 2?
这个要不要敲
这就完了吗,我在别的地方免费的教程都有学到很多东西,传文件啊还是啥的。而且我想问这个视频是什么时候的,为什么一个视频那么短,就总是关流什么什么的花费了很长时间,不觉得麻烦吗,不是try(){}catch(Exception e){}中空括号放流的会自动关流吗。还有,一对多的聊天,一点都不严谨,自己发的,为什么返回的是他说:....
我是真的没学到啥东西,我感觉我掉坑了
请问上限适用于泛型,但是下限不适用于泛型,是基于什么逻辑和考虑呢?
实际应用中为什么不会考虑泛型的下限情况?
为啥不加字幕啊?原来就挺好的
1、下面这句话是什么意思
ICar car=new Car();
2、有些时候等号左右两边的类型不一致是什么意思呢?
为啥我这个代码运行后,指定的目录下没有Object.txt文件?
但是运行read()方法后可以读的出来
package com.bjsxt.Object2; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Test { public static void main(String[] args) { write(); //read(); } //写对象的方法 public static void write() { //创建对象流对象 ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream("E:\\Object.txt")); //写对象 oos.writeObject(new Student("marry", 23)); oos.writeUTF("写对象"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //关闭 if(oos!=null) { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } //读对象的方法 public static void read() { ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream("E:\\Object.txt")); System.out.println(ois.readObject()); System.out.println(ois.readUTF()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //关闭 if(ois!=null) { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637