分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

web到service简单原理例子

发布时间:2023-09-06 01:13责任编辑:郭大石关键词:暂无标签

这是目前的理解

附上服务端源码

package com.lsw.server;import java.io.*;import java.net.*;import java.util.HashMap;import java.util.Map;/* * 关于服务器,除了httpServer1类,还定义了一个Servlet接口,这个接口有一个init()和一个service()方法 * init()方法为初始化方法,当HTTPServer1类创建了该接口的类的一个实例后,就会立即调用该实例的init()方法 * service()方法:用户响应HTTP的请求,产生具体的HTTP响应结果。 * HTTPServer1服务器在响应HTTP请求时会调用servlet接口的特定类的service()方法 * 所谓web服务器动态执行程序代码。在这个例子中就是指httpServer1在运行时动态加载Servlet接口的实现类,创建他的实例。然后调用他的相关方法。 * HTTPServer1在其实现中利用了java语言的动态加载类的功能 *///动态执行public class HTTPServer1 { ???//存放selvlet实例的缓存 ???private static Map servletCache = new HashMap(); ???????public static void main(String[] args){ ???????int port; ???????ServerSocket serverSocket; ???????????????try{ ???????????port = Integer.parseInt(args[0]); ???????????System.out.println("默认端口是: " + port); ???????} ???????catch(Exception e){ ???????????System.out.println("默认端口8080"); ???????????port = 8080; ???????} ???????????????try{ ???????????//创建监听端口 ???????????serverSocket = new ServerSocket(port); ???????????System.out.println("服务器正在监听端口: " + serverSocket.getLocalPort()); ???????????while(true){ ???????????????try{ ???????????????????//等待客户的链接请求 ???????????????????final Socket socket = serverSocket.accept(); ???????????????????System.out.println("建立了一个与客户的新的TCP连接,该客户的地址为: " + socket.getInetAddress() ???????????????????????????+ " 端口为 : " + socket.getPort()); ???????????????????//响应客户请求 ???????????????????service(socket); ???????????????} ???????????????catch(Exception e){ ???????????????????e.printStackTrace(); ???????????????} ???????????} ??????????????????????} ???????catch(Exception e){ ???????????e.printStackTrace(); ???????} ???} ???????public static void service(Socket socket) throws Exception{ ???????//读取HTTP请求信息 ???????InputStream socketIn = socket.getInputStream(); //获得输入流 ???????//睡眠500毫秒,等待http请求 ???????Thread.sleep(500); ???????int size = socketIn.available(); ???????byte[] buffer = new byte[size]; ???????socketIn.read(buffer); ???????String request = new String(buffer); ???????//打印http请求数据 ???????System.out.println("客户端请求的数据为: " +request); ???????????????//解析http请求 ???????//获得http请求第一行 ???????String firstLineOfRequest = request.substring(0,request.indexOf("\r\n")); ???????System.out.println("firstLineOfRequest= " +firstLineOfRequest); ???????//解析http请求的第一行 ???????String[] parts = firstLineOfRequest.split(" "); ???????//解析http请求这种的uri ???????String uri = parts[1]; ???????System.out.println("解析http请求这种的uri=" + uri); ???????System.out.println("截图的值为=" + uri.substring(0, 1).toString()); ???????String flag = uri.substring(0, 1).toString(); ???????if(flag.equals("/")){ ???????????System.out.println("此请求是从浏览器发起的请求"); ???????????uri = uri.substring(1).toString(); ???????} ??????????????????System.out.println("解析http请求这种的uri=" + uri); ???????????????//如果请求调用servlet,则动态调用servlet的service方法 ???????if(uri.indexOf("HttpTest") != -1){ ???????????//获得servlet的名字 ???????????String servletName = null; ???????????if(uri.indexOf("?") != -1) ???????????????servletName = uri.substring(uri.indexOf("HttpTest/")+8, uri.indexOf("?")); ???????????else ???????????????servletName = uri.substring(uri.indexOf("HttpTest/")+8, uri.length()); ???????????flag = ""; ???????????flag = servletName.substring(0, 1).toString(); ???????????if(flag.equals("/")){ ???????????????servletName = servletName.substring(1).toString(); ???????????} ???????????//尝试从servlet缓存中回去servlet对象 ???????????Servlet servlet = (Servlet)servletCache.get(servletName); ???????????//如果servlet缓存在这种不存在servlet对象,则创建他,并把他放在servlet缓存中 ???????????if(servlet == null){ ???????????????servlet = (Servlet)Class.forName("com.lsw.server."+servletName).newInstance(); ???????????????servlet.init(); ???????????????servletCache.put(servletName, servlet); ???????????} ???????????????????????//调用servlet的service()方法 ???????????servlet.service(buffer, socket.getOutputStream()); ???????????????????????//睡眠1秒等待接收http响应结果 ???????????Thread.sleep(1000); ???????????socket.close(); ???????????return ; ???????} ???????????}}

接口源码

package com.lsw.server;import java.io.OutputStream;public interface Servlet { ???public void init() throws Exception; ???public void service(byte[] requestBuffer,OutputStream out) throws Exception;}

实现类源码

package com.lsw.server;import java.io.OutputStream;public class HelloServlet implements Servlet { ???@Override ???public void init() throws Exception { ???????System.out.println("HelloServlet is inited"); ???} ???@Override ???public void service(byte[] requestBuffer, OutputStream out) ???????????throws Exception { ???????String request = new String(requestBuffer); ???????//打印http请求数据 ???????System.out.println("客户端请求的数据为: " +request); ???????????????//解析http请求 ???????//获得http请求第一行 ???????String firstLineOfRequest = request.substring(0,request.indexOf("\r\n")); ???????System.out.println("firstLineOfRequest= " +firstLineOfRequest); ???????//解析http请求的第一行 ???????String[] parts = firstLineOfRequest.split(" "); ???????//获得http请求中的请求方式 ???????String method = parts[0]; ???????System.out.println("解析http请求方式method=" + method); ???????//解析http请求这种的uri ???????String uri = parts[1]; ???????System.out.println("解析http请求这种的uri=" + uri); ???????System.out.println("截图的值为=" + uri.substring(0, 1).toString()); ???????String flag = uri.substring(0, 1).toString(); ???????if(flag.equals("/")){ ???????????System.out.println("此请求是从浏览器发起的请求"); ???????????uri = uri.substring(1).toString(); ???????} ??????????????????System.out.println("解析http请求这种的uri=" + uri); ???????????????//获得请求参数username ???????String username = null; ???????//如果请求方式为get,则请求参数紧跟http请求的第一行的uri的后面 ???????if(method.equalsIgnoreCase("get") && uri.indexOf("username=")!=-1){ ???????????//假定uri="servlet/HelloServlet?username=Tom&password=1234" ???????????//parameters="username=Tom&password=1234" ???????????String parameters = uri.substring(uri.indexOf("?"),uri.length()); ???????????//parts={"username=Tom","password=1234"} ???????????parts = parameters.split("&"); ???????????//parts={"username","Tom"} ???????????parts = parts[0].split("="); ???????????username = parts[1]; ???????} ???????????????//如果请求方式为POST,则请求参数位于http请求的正文中 ???????if(method.equalsIgnoreCase("post")){ ???????????int locate = request.indexOf("\r\n\r\n"); ???????????//获得响应正文 ???????????String content = request.substring(locate+4,request.length()); ???????????if(content.indexOf("username=")!=-1){ ???????????????//假定content="username=Tom&password=1234" ???????????????//parts="username=Tom&password=1234" ???????????????parts = content.split("&"); ???????????????parts = parts[0].split("="); ???????????????username = parts[1]; ???????????} ???????????????????} ???????????????//创建发送响应的http响应 ???????//发送http响应第一行" ???????out.write("HTTP/1.1 200 OK\r\n".getBytes()); ???????//发送http响应头 ???????out.write("Content-Type:text/html\r\n\r\n".getBytes()); ???????//发送http响应正文 ???????out.write("<html><head><title>HelloWorld</title></head></body>".getBytes()); ???????out.write(new String("<h1>Hello:" + username + "</h1></body></head></html>").getBytes()); ???}}

web到service简单原理例子

原文地址:http://www.cnblogs.com/batman425/p/7583284.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved