Dya1209和Dya1210学习的内容

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)——英文翻译过来就是大白话:此方法必须返回类型请求的结果。

image.png

2)选择"Add return statement"(百度翻译:添加返回语句)

Dya1209和Dya1210学习的内容_第1张图片
image.png

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

Dya1209和Dya1210学习的内容_第2张图片
image.png

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();//在命令行打印异常信息在程序中出错的位置及原因。
    }
}
}

你可能感兴趣的:(Dya1209和Dya1210学习的内容)