# server **Repository Path**: tao-wenbo/server ## Basic Information - **Project Name**: server - **Description**: 用java来实现服务器功能 - **Primary Language**: Java - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-02 - **Last Updated**: 2021-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # server #### 介绍 用java来实现服务器功能 #### 项目设计概要 使用esclips运行WebServer运行 首先设计一个HttpRequest类,用这个类实例化表示客户端发送过来的一个 具体请求内容。然后ClientHandler的三步操作中第一步解析请求就可以通过实例化一个 HttpRequest来完成。 webapp下新建一个子目录root,在root目录下新建一个404页面 当没有找到路径的时候返回404页面 在Tomcat中的conf文件夹下有个web.xml里面有1000多种的资源类型 实现: 1:在项目目录下新建conf目录 2:将web.xml拷贝到该目录下 3:在HttpContext的初始化initMimeMapping法法中解析web.xml文件来初始 mimeMapping这个Map支持1000多种不同的资源类型。 空请求问题 HTTP协议允许客户端发送空请求:客户端连接服务端后没有发送任何内容就直接 断开连接。 解决办法:在解析请求行的时候如果发现读取的是空字符串就抛出一个异常使 ClientHandle忽略后续操作 自定义一个异常:EmptyRequestException,空请求异常 注:当在try中抛出异常时会被当前的异常捕获机制(catch)给捕获,不会抛出到外面了,如果想抛出到外面,必须在catch中在抛出一次该异常 然后类方法上也要表明要抛出的异常类型 1.解析用户提交来的数据 2.处理请求是做注册业务操作 3.响应客户端请求 实现: 1.创建reg.html当注册界面 2.当表单提交数据后,需要解析请求的同时拆分抽象路径中的请求部分和参数部分 3.用String requestURI:用于保存uri中的请求部分 String queryString:用于保存uri的参数部分 Map parameters:用于保存每个参数 4.先对uri进行判断是否是服务,然后如果是服务,创建RegServlet来服务, 在HttpResponse中引用服务。 其中RegServlet中需要请求过来的参数列表以及对客户端响应,所以需要传递 HttpRequest和HttpResponse进去。 5.修改了HttpResponse的构造方法参数列表,然后把HttpRequest对象传递 进去,HttpResponse可以使用this来获取当前对象(注意:this的作用域)。 6.获取到参数列表后,用RandomAccessFile将其写入文件user.dat中,最后 修改response中的参数,重新调用flush()方法。 解决form表单传递中文 ISO8859-1是欧洲的字符集不支持中文 为了解决这个问题,采取的方法是: 1.浏览器会将中文按照utf-8编码转换为一组字节 2.将每个字节以2位16进制表示 3.用%开始,并且拼接这2位16进制表示这个 字节的数据 4.再将中文转换的所有自己以若干的%XX形式拼接到URL中传递 由于16进制出现的字符是0-9,a-f,这些是ISO8859-1支持的编码 因此采取这样的方式进行传递 实现登录页面