精华内容
下载资源
问答
  • public class Service2 { private ServerSocket server ; private Socket socket; private static final String crl="\r\n",bk=" "; public static void main(String[] args) throws IOException { ...
  • import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; public class HttpServer { public static void main(...

    0、先将以下代码运行起来:

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class HttpServer {
    
        public static void main(String[] args) throws Exception{
            //开启一个服务端Socket,监听12345端口
            ServerSocket server = new ServerSocket(12345);
    
            //有客户端连进来
            Socket client = server.accept();
    
            //获取到客户端输入流
            InputStream in = client.getInputStream();
    
            //准备一个缓冲数组
            byte data[]=new byte[4096];
    
            //这里有一个read(byte[] b)方法,将数据读取到字节数组中,同返回读取长度
            int len=in.read(data);
    
            //打印浏览器发来的请求头
            System.out.println(new String(data));
    
    
            //制作响应报文
            StringBuffer response = new StringBuffer();
    
            //响应状态
            response.append("HTTP/1.1 200 OK\r\n");
    
            //响应头
            response.append("Content-type:text/html\r\n\r\n");
    
            //要返回的内容(当前时间)
            response.append("CurrentTime: ").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    
    
            //获取客户端的输出流
            OutputStream out=client.getOutputStream();
    
            //将以上内容写入
            out.write(response.toString().getBytes());
    
            //关闭客户端和服务端的流和Socket
            out.close();
            in.close();
            client.close();
            server.close();
        }
    
    }
    

    1、运行起来之后,你就可以在服务器输入以下地址访问了:

    http://localhost:12345/hello?param=world
    

    2、控制台将打印如下的HTTP请求报文信息(代码第26行执行打印):

    GET /hello?param=world HTTP/1.1
    Host: localhost:12345
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-US,en;q=0.9
    

    3、由于我们在代码中返回了当前时间作为响应体(在第39行加入的返回数据),而且是text/html,程序会解析为text/html,所以在浏览器就会显示:

    CurrentTime: 2019-02-15 11:15:30
    

    4、至此,一个Java实现的HTTP服务器就完成了,只要请求localhost:12345,无论什么URL,都可以返回当前时间。

    展开全文
  • Java 手写Tomcat

    2018-06-06 16:56:00
    1). 创建Java项目Tomcat 2). 创建Servlet接口 public interface IServlet { public void service(); } 3). 创建Tomcat核心主类 public class Core { @SuppressWarnings("re...
    1). 创建Java项目Tomcat
    2). 创建Servlet接口
    public interface IServlet {
        public void service();
    }
    
    3). 创建Tomcat核心主类
    public class Core {
        @SuppressWarnings("resource")
        public static void main(String[] args) throws Exception {
            // 打印初始化
            System.out.println("Tomcat: Hello! I'm Tomcat, and I'm in the initialization...");
            // 睡眠3秒
            Thread.sleep(3000);
            // 初始化完成
            System.out.println("Tomcat: Now, I have finished the initializaion.");
            // 睡眠1秒
            Thread.sleep(1000);
            // 启动
            System.out.println("Tomcat: Now I will start the Servlet.");
            
            // 读取配置文件,获取Servlet的项目路径名及类包名路径名
            FileReader reader = new FileReader("./TomcatConf.txt");
            // 创建缓冲读取
            BufferedReader bReader = new BufferedReader(reader);
            // 读取路径
            String path = bReader.readLine();
            // 读取类名
            String className = bReader.readLine();
            // 关闭Reader
            bReader.close();        
            reader.close();
            
            // 根据已读取的Servlet项目路径名及类包路径名通过URL加载器加载文件系统中的某个.class文件
            File file = new File(path);
            // 这里读取文件系统的URL地址
            URL url = file.toURI().toURL();
            // 创建持有我们所部署的Web项目路径的URL类加载器,以使Tomcat之外的Web纳入Tomcat的classpath之中
            URLClassLoader loader = new URLClassLoader(new URL[]{url});
            // 利用反射加载类
            Class<?> clazz = loader.loadClass(className);
            // 转换为Servlet接口执行Service操作
            IServlet servlet = (IServlet) clazz.newInstance();
            // 实际的Tomcat并不在这里调用Service,仅仅是在进入事件循环,在有浏览器请求时才调用Service
            servlet.service();
        }
    }
    
    4). 将Tomcat项目导出为Jar包

    项目右键->Export...->Java->JAR file->Finish.

    5). 再创建一个Java项目,并引入tomcat.jar
    6). 创建DaoOperator
    /**
     * 模拟数据库操作
     * @author mazaiting
     */
    public class DaoOperator {
        private String name;
        public DaoOperator(String name) {
            this.name = name;
        }
        public void operate() throws InterruptedException {
            System.out.println("I will do much work...");
            Thread.sleep(3000);
            System.out.println(name + " DAOOperator exec succeed.");
        }
    }
    
    7). 创建Servlet
    public class MyServlet implements IServlet {
    
        @Override
        public void service() {
            System.out.println("Hello, I'm the Servlet.");
            System.out.println("Now let's start our web http travel.");
            try {
                Thread.sleep(3000);
                DaoOperator dao = new DaoOperator("MySql");
                dao.operate();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            System.out.println("Now I will beleave the web world..");;
            System.out.println("Bye-bye.");
        }
    
    }
    
    8). 在项目的根目录下创建TomcatConf.txt配置文件

    文件内容:

    E:\Java\test\MyWeb\bin
    com.mazaiting.MyServlet
    
    9). 运行tomcat.jar包
    10). 控制台打印
    img_a22ffa55ac129bf57c52d1a1c4461e1e.png
    效果.png
    展开全文
  • 没办法,看了网上许多博客,都是推荐JPC或者lodop的,都是要钱滴,JPC免费版只支持ie的静默打印,被逼无奈,只能手写一个,原本用C#写了一个,但是上司说不要用C#,用java写。(像控件这样的桌面程序,肯定是用C#好...

    场景:

    向数据库中添加一条记录时,调用客户端局域网中的打印机自动将数据打印出来。(当然是客户端打印,服务器端打印还要控件???)

    要求:

    1. 不弹出、不打印预览、直接自动打印。(静默打印)
    2. 需要兼容各大浏览器(火狐、ie、360、谷歌、edge)
    3. 开机自启

    没办法,看了网上许多博客,都是推荐JPC或者lodop的,都是要钱滴,JPC免费版只支持ie的静默打印,被逼无奈,只能手写一个,原本用C#写了一个,但是上司说不要用C#,用java写。(像控件这样的桌面程序,肯定是用C#好实现)。

    成果:

    就是这个二十多兆的程序,用java写的服务,里面包含一个bat文件,用于实现开机自启。

    使用方法:

    简单,鼠标右击 以管理员身份运行 即可。

    之后查看任务管理器会出现打印服务:

    打开浏览器:输入http://localhost:5777/print。

    此控件是以POST方式,接收文件的base64字符串,会调用客户端的默认打印机打印。在前台使用ajax调用即可,如下:

    $.ajax({
          url: "http://127.0.0.1:5777/print",
          type:"post",
          data: 文件的base64字符串,
          dataType : "json",
          success:function(result){
              console.log(result);//会返回打印结果
              return true;
         },
         error:function(){
               return false;
        }
    });

    源码请移步:打印控件

    展开全文
  • 由于即将学习javaweb,为了可以提前热身,手动仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,来搭建静态网页.废话不多说先上简单代码实现功能.本次主要也是复习一下多线程,io,网络编程,集合等知识点. ...

    由于即将学习javaweb,为了可以提前热身,手动仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,来搭建静态网页.废话不多说先上简单代码实现功能.本次主要也是复习一下多线程,io,网络编程,集合等知识点.

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class MyServer {
        public static void main(String[] args)throws Exception {
            ServerSocket serverSocket = new ServerSocket(8080);
    
            while(true){
    
                    Socket socket = serverSocket.accept();
    
    
                    /*1.获取浏览器要访问的资源的名字*/
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String firstLine = br.readLine();//GET /admin/login.html HTTP/1.1
    
                    String uri = firstLine.split(" ")[1].substring(1);//  admin/login.html
    
    
                    /*2.读取资源,将资源写给浏览器*/
                    InputStream is = MyServer.class.getClassLoader().getResourceAsStream(uri);
                    PrintStream out = new PrintStream(socket.getOutputStream());
                    out.println("HTTP/1.1 200 OK");
                    out.println("Content-Type:text/html;charset=utf-8");
                    out.println();
    
                    byte[] data = new byte[1024];
                    int len;
                    while((len=is.read(data)) != -1){
                        out.write(data,0,len);
                    }
    
                    out.close();
                    socket.close();
    
    
            }
    
        }
    }
    

    服务器优化方向:
    1.如果服务器发生异常,应不应该直接奔溃?如果访问的资源不存在,应该返回404页面
    2.使用线程优化服务器
    3.每次访问服务器,都需要重新读取硬盘中的数据?怎么才能把已经访问过的数据缓存到服务器中提高下次访问的速度。
    4.我们现在只能读取resources目录的资源,能不能添加配置文件读取指定目录下的资源?
    5.使用日志记录服务器启动的时间,以及每次访问了哪些文件。
    6.把我们的程序打包成一个jar包,然后上传到linux服务器中,并启动程序

    展开全文
  • 最近想学一下 tomcat 到底是怎么运行的,于是手写一个简易的 tomcat 服务器,加深一下印象。 涉及到的知识: 计算机网络 tcp/ip 协议 , 网络编程 ,socket 浏览器请求,响应报文规范 java 反射,注解 实现的...
  • 本人尚在java 学习阶段,不是技术大咖, 自认是技术宅, 有一点写东西的能力,因最近学习了java网络编程,决定手写一个web服务器,不喜勿喷,大神也请高抬贵手,不足之处还望指点一二,不胜感激! 目录结构 项目...
  •  什么的来获取系统,语言,以及什么浏览器,以及  浏览器  版本。 下面我来说明一种快速获取的方式,通过第三方包来实现。 一、依赖包引入(UserAgentUtils-1.2.4.jar) 下面采用  Maven  的方式引入...
  • 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一、前置知识 1.HTTP协议  当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏览器向服务器请求资源,服务器回应...
  • Java手写服务器(一)

    2019-09-28 15:31:42
    客户端在浏览器发送请求,服务器接收请求,并作出响应。 a.html <html> <head> <title>表单</title> </head> <body> <form method="GET" action="http://...
  • 我就想着python的nio玩过,但还没怎么用java的nio写一个项目,于是灵机一动,花了将近两天,写了个简单的web服务器。代码方面没有导入其他包,而使用jdk自带工具包。下面看成果图 目录 成果截图 项目结构 实验...
  • package 手写服务器httpserver_195_准备_Socket入门_练习; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;...客户端已经创建好即我们的浏览器 */ public class Se
  • Java手写服务器

    2020-08-17 16:07:41
    1.预备知识_Socket知识回顾 1.1编写服务器用到的知识点 ...2)B/S结构:浏览器与服务器 httpClient_1 Client.java package com.bjsxt.test; import java.io.DataInputStream; import java.io.DataOutputStream; import
  • java 手写服务器httpserver_198_准备_http工具_练习 1.HTTP协议版本,状态代码,描述 a)HTTP/1.1 200 ok HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态,HTTP应答码由3位数字构成,其中首位 数字定义了应答...
  • package 手写服务器httpserver_196_准备_html_练习; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net....客户端已经创建好即我们的浏览器 *.
  • Java 实现的简易浏览器

    千次阅读 2014-11-22 22:14:08
    Java 实现的简易浏览器(Think浏览器的实现 去年写的代码,时间过去的有点长了,具体的代码就不怎么解释了,直接贴上代码,希望对大家有帮助。 [java] view plaincopy /*   * ...
  • 那么接下来设计思路就变得十分清晰: 客户端(浏览器)与服务器建立网络连接(ServerSocket),客户端(浏览器)向服务器请求内容(包含在HTTP请求信息中),服务器读取客户端发来的请求信息动态产生内容(多线程)...
  • JAVA-手写服务器

    千次阅读 2015-03-31 14:04:33
    花了3天时间搞了这么个服务器程序,基于Socket与Thread等JAVA基本东西. 基本知识. HTTP协议,这个是浏览器与服务器交互的"暗语".一般常见的交互方式是Get/Post 下面是请求文件信息Request: GET /index....
  • 1.在桌面新建文本文档 ,重命名后缀改html 2.右键,打开方式选 3.编辑并保存 4.双击 浏览器显示 如果乱码 是因为编码集没有同一 在浏览器页面 点右键 选编码 改成一致
  • Java实战手写区块链中的Merkle树

    千次阅读 热门讨论 2020-10-22 12:34:50
    本文将用java手写Merkle树 一、Merkle树简介 Merkle树是1979 年Ralph Merkle提出并用自己名字命名的一种数据结构。什么是 Merkle 树呢?维基百科中对 Merkle 树的定义如下: 在密码学和计算机科学中,哈希树或 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,194
精华内容 4,077
热门标签
关键字:

java手写浏览器

java 订阅