创建客服端(在httpClient_1包下)

  1. public class Client {
       public static void main(String[] args) {
           //1.创建socket对象
           Socket client=null;

           DataOutputStream dos = null;
           DataInputStream dis =null;
           try {
               client = new Socket("localhost", 8888);
               //2.获取输出流请求
               dos = new DataOutputStream(client.getOutputStream());
               dos.writeUTF("我是客服端:服务器你好!");
               //3.获取输出流响应
               dis = new DataInputStream(client.getInputStream());
               System.out.println(dis.readUTF());
          } catch (IOException e) {
               e.printStackTrace();
          } finally {
               //4.关闭流
               IOClose.closeAll(dis,dos,client);
          }


      }

创建IOClose类

  1. public class IOClose {
       //关闭全部的工具类
       public static void closeAll(Closeable...c){
           for (Closeable closeable : c) {
               if (closeable!=null){
                   try {
                       closeable.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }
          }

创建服务端(在httpserver_1包下)

  1. package com.feng.server;

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server {
       public static void main(String[] args) {
           //1.创建ServerSocket对象
           ServerSocket server = null;
           Socket client =null;
           DataInputStream dis =null;
           DataOutputStream dos =null;
           try {
               server = new ServerSocket(8888);
               //2.监听是否有客服端发送请求
               client = server.accept();
               //3.获取Socket对象
               //4.获取输入流 ->得到客服端的请求
               dis = new DataInputStream(client.getInputStream());
               System.out.println(dis.readUTF());
               //5.获取输出流 ->给客服端响应结果
               dos = new DataOutputStream(client.getOutputStream());
               dos.writeUTF("客服端你好,我是服务器,我接受到了你的信息");
          } catch (IOException e) {
               e.printStackTrace();
          } finally {
               IOClose.closeAll(dos,dis,client,server);
          }

同样创建IOClose

在CS结构server(2)

  1. package com.feng.server;

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server2 {
       public static void main(String[] args) {
           //1.创建ServerSocket对象
           ServerSocket server = null;
           Socket client =null;

           BufferedReader br = null;
           try {
               server = new ServerSocket(8888);
               //2.监听是否有客服端发送请求
               client = server.accept();
               //获取来自浏览器的请求信息
               br = new BufferedReader(new InputStreamReader(client.getInputStream(), "utf-8"));
               String str=null;
               while ((str=br.readLine()).length()>0) {
                   System.out.println(str);
              }
          } catch (IOException e) {
               e.printStackTrace();
          } finally {
               IOClose.closeAll(br,client,server);
          }
      }
    }

创建HTML

  1. <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>javaWeb</title>
    </head>
    <body>
       <h1>HelloWorld</h1>
       <form action="http://localhost:8888/index.html" method="post">
           <p>用户名:<input type="text" id="uname" name="username"></p>
           <p>密码:<input type="password" id="pwd" name="password"></p>
           <p><input type="submit" value="登入"/></p>
       </form>
    </body>
    </html>

创建server3

获取来自浏览器的请求信息

  1. //获取来自浏览器的请求信息
    is = client.getInputStream();
    byte[] buf = new byte[20480];
    int len = is.read(buf);
    System.out.println(new String(buf,0,len));

对web浏览器做出响应

添加参数

  1. String CRLF="\r\n";
    String BLANK=" ";
    InputStream is = null;
  1. /**对web浏览器做出响应*/
    StringBuilder sb = new StringBuilder();
    StringBuilder sbContent = new StringBuilder(); //响应的文本
    sbContent.append("<html><head><title>响应结果</title></head>");
    sbContent.append("<body>登入成功</body></html>");

    //1拼接响应头
    sb.append("HTTP/1.1").append(BLANK).append(200).append(BLANK).append("OK");
    sb.append(CRLF);
    sb.append("Content-Type: text/html;charset=UTF-8");
    sb.append(CRLF);
    sb.append("Content-Length:").append(sbContent.toString().getBytes().length).append(CRLF);
    sb.append(CRLF);//带表响应头与响应正文部分之间的换行
    sb.append(sbContent);
    //2通过输出流
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"));
    bw.write(sb.toString());
    bw.flush();
    bw.close();

整合server3

  1. public class Server3 {
       public static void main(String[] args) {
           //1.创建ServerSocket对象
           ServerSocket server = null;
           Socket client =null;
           String CRLF="\r\n";
           String BLANK=" ";
           InputStream is = null;
           try {
               server = new ServerSocket(8888);
               //2.监听是否有客服端发送请求
               client = server.accept();
               //获取来自浏览器的请求信息
               is = client.getInputStream();
               byte[] buf = new byte[20480];
               int len = is.read(buf);
               System.out.println(new String(buf,0,len));
               /**对web浏览器做出响应*/
               StringBuilder sb = new StringBuilder();
               StringBuilder sbContent = new StringBuilder(); //响应的文本
               sbContent.append("<html><head><title>响应结果</title></head>");
               sbContent.append("<body>登入成功</body></html>");

               //1拼接响应头
               sb.append("HTTP/1.1").append(BLANK).append(200).append(BLANK).append("OK");
               sb.append(CRLF);
               sb.append("Content-Type: text/html;charset=UTF-8");
               sb.append(CRLF);
               sb.append("Content-Length:").append(sbContent.toString().getBytes().length).append(CRLF);
               sb.append(CRLF);//带表响应头与响应正文部分之间的换行
               sb.append(sbContent);
               //2通过输出流
               BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"));
               bw.write(sb.toString());
               bw.flush();
               bw.close();
          } catch (IOException e) {
               e.printStackTrace();
          } finally {
               //6.关闭流
               IOClose.closeAll(is,client,server);
          }


      }
    }

创建Request,Response,Server,WebApp(在server包下)

创建Servlet,LoginServlet(在servlet包下)

创建IOCloseUtil(在util包下)

创建web.xml(在WEB_INFO包下)

  1. <?xml version="1.0" encoding="UTF-8"?>
    <web-app >
       <servlet>
           <servlet-name>login</servlet-name>
           <servlet-class>com.feng.servlet.LoginServlet</servlet-class>
       </servlet>
       <servlet-mapping>
           <servlet-name>login</servlet-name>
           <url-pattern>/login</url-pattern>
       </servlet-mapping>
       <servlet-mapping>
           <servlet-name>login</servlet-name>
           <url-pattern>/log</url-pattern>
       </servlet-mapping>

    </web-app>

创建Entity,Mapping,ServletContext,WebDom4j,创建IOClose在util包下

补充实体类

  1. package com.feng.server;

    public class Entity {  //servlet-name或每一个servlet-name所对应得实体类
       private String name;
       private String clazz;

       public Entity() {
      }

       public Entity(String name, String clazz) {
           this.name = name;
           this.clazz = clazz;
      }

       public String getName() {
           return name;
      }

       public void setName(String name) {
           this.name = name;
      }

       public String getClazz() {
           return clazz;
      }

       public void setClazz(String clazz) {
           this.clazz = clazz;
      }
    }

补充Mapping类

  1. package com.feng.server;

    import java.util.ArrayList;
    import java.util.List;

    public class Mapping { //映射关系,多个路径可以访问资源
       private String name; //servlet-name
       private List<String> urlPattern;//url-pattern

       public String getName() {
           return name;
      }

       public void setName(String name) {
           this.name = name;
      }

       public List<String> getUrlPattern() {
           return urlPattern;
      }

       public void setUrlPattern(List<String> urlPattern) {
           this.urlPattern = urlPattern;
      }

       public Mapping() {
           this.urlPattern = new ArrayList<String>();
      }

       public Mapping(String name, List<String> urlPattern) {
           this.name = name;
           this.urlPattern = urlPattern;
      }
    }

配置dom4j

  1. package com.feng.server;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;

    import java.io.File;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    public class WebDom4j { //用于解析xml
       private List<Entity> entityList; //用于储存实体类,每一个实体类一个servlet-name对应一个servlet-class
       private List<Mapping> mappingList;//用于储存映射类,每一个servlet-name对应一个url-pattern
    public List<Entity> getEntityList() {
       return entityList;
    }

    public void setEntityList(List<Entity> entityList) {
       this.entityList = entityList;
    }

    public List<Mapping> getMappingList() {
       return mappingList;
    }

    public void setMappingList(List<Mapping> mappingList) {
       this.mappingList = mappingList;
    }

    //构造方法
    public WebDom4j() {
       entityList = new ArrayList<Entity>();
       mappingList = new ArrayList<Mapping>();
    }

    //获取Document对象的方法
    public Document getDocument(){

       try {
           //创建SAXReader对象
           SAXReader reader = new SAXReader();
           //调用read方法
           return reader.read(new File("web/WEB-INF/web.xml"));
      } catch (DocumentException e) {
           e.printStackTrace();
      }
       return null;
    }
    //获取元素
    public void parse(Document doc) {
       //1获取根元素
       Element root = doc.getRootElement(); //web-app
       //2获取servlet子元素
       for (Iterator<Element> ite = root.elementIterator("servlet"); ite.hasNext();) {
           Element subElement = ite.next(); //得到每一个servlet
           //创建一个实体类
           Entity ent = new Entity(); //用于储存servlet-name与servlet-class
           for (Iterator
版权声明:本文为zzy8080原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zzy8080/p/13875310.html