Dya1209学习的内容
1.解析字符串
package com.guoyasoft.Day1211; import java.util.HashMap; import java.util.Map; public class stringTools { //拿到一个字符串:"get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1" //1.什么都不用想,直接先写一个静态方法(方法名:testString(可以任意取)) public static void testString(){ //2.先打印一句话,打印内容随意些,主要是为了测试是否可以调通这个方法 System.out.println("测试互通"); //3.先把字符串放进一个str的String变量中 String str="get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1"; //4.通过"split"分割器来分割字符串内容,这边写通过空格进行分割,分割成3块内容 //a.首先我们知道是通过空格来进行分割,即是输入str.split(" ") //b.分割后的内容我们需要给他取个名字,即是数组名diyibu //c.分割后的内容需要放进一个String数组类型里面(可以通过下表的方式获取) String[] diyibu = str.split(" "); //5.分割后的内容我们肯定需要使用啊,所以我们需要通过下表的方式来获取分割后的3个数组名 String fangFa = diyibu[0];//通过下标的方式取截取后的第一块的内容,起了一个变量名叫fangfa String url = diyibu[1];//同上 String banBen = diyibu[2];//同上 //6.写一个打印语句,测试一下步骤3、4、5是否成功 System.out.println("方法:"+fangFa); System.out.println("url:"+url); System.out.println("版本:"+banBen); //7.由于第二部分url里面的内容我们有些需要有些不需要,就需要用到截取了(比如:我们想要个ip,那我们肯定只需要127.0.0.1; //所以我们需要把切割后的第二部分内容url再进行截取成一小个一小个我们想要的数据,并存储到一个变量中) //a.通过indexof来定位想要的内容;b.通过substring来截取需要的内容 int index = url.indexOf("://");//截取://之前的内容,即是http String protocal = url.substring(0,index);//把截取的内容放大protocal变量中;(0,xieYI)的意思是:从第1位开始截取,截取到://之前结束 System.out.println("协议:"+protocal);//打印一下,看下上面的操作有没有成功,后面所有的打印都是为了验证之前的思想是否成功,就不重复再写了 url = url.substring(index+3);//通过substring来截取掉之前已经成功截取出来的内容,+3即是截取掉"http://"这么一大块 System.out.println("第一次url截取后的内容:"+url); //后面的截取,一直到"?"之前都是使用以上的方法即可,代码就不重复注释了 index=url.indexOf(":"); String ip=url.substring(0,index); // request.setIp(ip); System.out.println("ip="+ip); url=url.substring(index+1); System.out.println(url); index=url.indexOf("/"); String port=url.substring(0,index); // request.setPort(port); url=url.substring(index+1); System.out.println(url); index=url.indexOf("/"); String prjName=url.substring(0,index); // request.setPrjName(prjName); System.out.println("prjName="+prjName); url=url.substring(index+1); System.out.println(url); index=url.indexOf("?"); String resource=url.substring(0,index); // request.setResource(resource); System.out.println(resource); String queryString=url.substring(index+1); //8.由于后面需要截取的内容是"name=guoyasoft&password=123456", // 通过这个字符串可以看到我们可以通过"&"进行分割,把分割后的内容变成key,value的形式存在 String[] parameters = queryString.split("&"); //9.由于分割后的内容我们发现"name=guoyasoft"和"password=123456"都是key,value形式存在的, // 即是知道字段类型,和字段值,此时我们可以使用一个HashMap容器把数据放进容器里面 //a.既然我们已经知道需要使用HashMap容器了,那么先二话不说先new一个HashMap,即new一个HashMap
()的方法 //b.看到new即是需要在前面有个"=",且取一个变量名,这边取的是map //c.然后我们需要定义一个Map键值对,且给key,value声明是String类型的,即是Map ,那么既然Map //已经定义了key和Value都是String类型的,那么HashMap ()这个方法,也需要定义和它一样的,即是HashMap () //d.Map报错了,不要慌,鼠标放上去,看下报错信息,有个导入,这边要注意,我们需要选择的是Import'Map'(java.util),导包以后就不会报错了^_^ Map map = new HashMap (); //e.用一个for循环,把通过"&"分割后的数据循环显示出来即可以使用for(类型 名称:数组名){} for(String s:parameters){ //10.在for循环中,我们可以通过"="分割的方式来,把key,value的值也分割下,然后通过map.put的方式放入map里面 String[] yiZu = s.split("="); map.put(yiZu[0], yiZu[1]);//这边为什么要put呢,就是需要把数据放进map里面,且可以根据传入的Key读取到value System.out.println(yiZu[0]+"="+yiZu[1]); } } } package com.guoyasoft.Day1211Test; import net.sourceforge.htmlunit.corejs.javascript.ast.Yield; import com.guoyasoft.Day1211.stringTools; public class stringToolsTest { //1.测试类里面,直接先写一个main方法 public static void main(String[] args) { //2.调用stringTools类下面的testString方法,Run As一下,看是否可以打印出在stringTools类下写的打印语句 //Run As后的结果:测试互通 stringTools.testString(); //3.在stringTools类下写完第6步后,这边再Run As一下,看一下是否已经成功把数据切割成3份 //Run As的结果如下: // 方法:get // url:http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 // 版本:HTTP1.1 //4.在stringTools类下写完第7步后,这边再Run As一下,看一下是否已经成功截取数据 //Run As的结果如下: // 协议:http // 第一次url截取后的内容:127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 //5.在stringTools类下写完第10步后,这边再Run As一下,看一下数据是否已经成功放入 //Run As的结果如下: // name=guoyasoft // password=123456 } }
2.创建一个Request类,来解析字符串,并进行封装
package com.guoyasoft.Day1211; import java.util.Map; public class Request { //1.把刚才解析的数据,在这边定义一个私有属性 //(需要定义的内容有:fangFa、url、protocal、ip、port、prjName、resource、Map
map、banBen) private String fangFa; private String url; private String protocal; private String ip; private String port; private String prjName; private String resource; private Map map; private String banBen; //2.通过鼠标右键选择"Socure-Generate Getters and Setters",选择select all,点击ok //3.通过鼠标右键选择"Socure-Generate toString()...,点击ok //4.在ParsString中有一个map数组,里面存放的内容都是根据key,value的方式来存放的。为了方便 //取这个key,定义一个getParmameter的方法,在方法里面放一个key,返回一个key,以后就可以直接通过 //map.get(key)的方法来取内容 //key就等于是通讯录中需要寻找的人,这个人的手机号就是value public String getParmameter(String key){ return map.get(key); } public String getFangFa() { return fangFa; } public void setFangFa(String fangFa) { this.fangFa = fangFa; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getProtocal() { return protocal; } public void setProtocal(String protocal) { this.protocal = protocal; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public String getPrjName() { return prjName; } public void setPrjName(String prjName) { this.prjName = prjName; } public String getResource() { return resource; } public void setResource(String resource) { this.resource = resource; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } public String getBanBen() { return banBen; } public void setBanBen(String banBen) { this.banBen = banBen; } } 3.在stringTools 类下,把原来public static void testString()更改为public static Request testString(String str) ,且加上request返回对象
Request:方法名——是一个有返回值的方法,返回的是Request类型的对象;之前的void是一个空的方法,是没有返回值的;
1)public static void testString()中的void改为Request,这时候发现testString()报错了,不要慌,看下报错信息(This method must return a result of type Request)——英文翻译过来就是大白话:此方法必须返回类型请求的结果。
2)选择"Add return statement"(百度翻译:添加返回语句)
3)我们需要调用Request类下的方法,那么就需要加上一个request返回结果,通过request.的方式快捷的去调用Request类下的方法
那么添加了request返回结果,但是我们没有去new 一个Request()的实例对象,这个返回结果依然没法用
所以我们需要在stringTools 类的public static Request testString(String str)方法内去new一个实例对象request,即是添加一行代码:Request request = new Request();
4.在stringTools 类下,加上所有需要调用的方法,即是加上以下代码:
1)request.setFangFa(fangFa);
2)request.setUrl(url);
3)request.setBanBen(banBen);
4)request.setProtocal(protocal);
5)request.setIp(ip);
6)request.setPort(port);
7)request.setPrjName(prjName);
8)request.setResource(resource);
9)request.setMap(map);
Day1210学习的内容
一、tomcat_简化版服务调用协议(不含网络)(未完成版)
1.Tomcat
package com.guoyasoft.Day1211; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.Properties; public class Tomcat { public static void http(String url) throws Exception{ //想通过tomact这个类直接解析之前敲得二个java代码(即是stringTools和Request) //1.先调取stringTools下的testString()方法,再把调取的方法封装到request对象中,得到以下这行代码 Request request = stringTools.testString(url); Response response = new Response(); //随便调用一个request中的方法,打印一下,有之前执行stringToolsTest成功后的返回结果,则表示tomcat已经和早上的另外个java互通了 //2.通过request对象.出getFangFa(),给到变量resoucre(字符串类型的) String resoucre = request.getResource(); System.out.println(resoucre);//打印一下resoucre,看看这个方法有没有调通,在TomcatTest类中运行main方法 //3.输入一个配置文件(InputStream:输入流;File:文件),假设这边需要一个web.properties文件 //a.在任意一个包下新建一个file文件,输入名称web.properties,就会生成一个web.properties配置文件了 //b.通过FileInputStream打开web.properties文件,放到is变量名中————解析配置文件 InputStream is = new FileInputStream("src/main/java/com/guoyasoft/Day1211/web.properties"); //4.新建Properties 类型对象pro Properties pro = new Properties(); //5.通过load加载配置文件 pro.load(is); //6.通过getProperty()方法取值,存到变量className里;()中的resource是上面解析出来的get String className =pro.getProperty(resoucre); //7.获得要执行的类的名字(带.class) ,且把类转出Class 的 对象c Class c = Class.forName(className); //8.新建实例,并转型成object 的实例obj Object obj =c.newInstance(); //9.通过反射的方式,获得方法,执行方法并传参数,最后通过invoke激活 //下面的XXX.class是固定写法,Method报错时,应选择Import'method'(java.lang.reflect) //reflect:反射 //Response.class报错:肯定是在Tomcat中没有去new 一个Response()的实例对象 Method method = c.getMethod("doGet",Request.class,Response.class); //获取getMethod的方法 方法名 方法参数的类型的类 方法参数的类型的类 method.invoke(obj,new Object[]{request,response}); //执行方法并传参 对象 参数1 参数2 } }
2.HTTPServlet
package com.guoyasoft.Day1211; public class HTTPServlet { public void doGet(Request request,Response response){ System.out.println(request.getFangFa()); } }
3.Response
package com.guoyasoft.Day1211; public class Response { }
4.Login
package com.guoyasoft.Day1211; public class Login extends HTTPServlet{ //Login继承HTTPServlet }
5.web.properties
6.TomcatTest
package com.guoyasoft.Day1211Test; import com.guoyasoft.Day1211.Tomcat; public class TomcatTest { public static void main(String[] args) { //添加一个try catch方便找到异常信息 try { Tomcat.http("get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1"); } catch (Exception e) { e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因。 } } }