当前位置: 首页 > news >正文

如何建立一个个人网站广州网站服务

如何建立一个个人网站,广州网站服务,wordpress 问卷插件,网站网站开发需要多少钱访问html页面 如果我们想访问html页面其实就是将本地的html文件以流的方式响应给前端即可#xff0c;下面我们对HttpResponseServlet这个类做一些改造 package com.tomcatServer.domain;import com.tomcatServer.utils.ScanUtil;import java.io.IOException; import java.io…访问html页面 如果我们想访问html页面其实就是将本地的html文件以流的方式响应给前端即可下面我们对HttpResponseServlet这个类做一些改造 package com.tomcatServer.domain;import com.tomcatServer.utils.ScanUtil;import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;/*** http servlet响应** author ez4sterben* date 2023/08/15*/ public class HttpServletResponse {private final PrintWriter out;private static final String response;private static final String htmlResponse;public HttpServletResponse(PrintWriter out) {this.out out;}static {response HTTP/1.1 200 OK\r\n Content-Type: text/plain\r\n \r\n;htmlResponse HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n \r\n;}/*** 写** param content 内容*/public void write(String content) {out.println(response content);}/*** 编写html** param htmlFileName html文件名字* throws IOException ioexception*/public void writeHtml(String htmlFileName) throws IOException {Path path Paths.get(ScanUtil.WEB_APP_PATH \\ htmlFileName);byte[] bytes Files.readAllBytes(path);out.println(htmlResponse new String(bytes, StandardCharsets.UTF_8));} } writeHtml这个方法将会读取webApp下面的html文件注意只读取下面一级文件中的html文件然后将这个文件以二进制流的形式转换成字符串拼接到上面定义的html格式的响应头。 处理静态资源请求 当我们有了解析html文件的方法后下面要做的就是处理静态资源也就是判断一下请求路径中是否有.html这个字符串有的话就把这次请求当做静态资源请求处理没有的话再交给GET或者POST请求。这个逻辑将添加在SocketStore中下面展示更改玩的SocketStore代码 package com.tomcatServer.socket;import com.tomcatServer.domain.HttpServletRequest; import com.tomcatServer.domain.HttpServletResponse; import com.tomcatServer.utils.ScanUtil; import com.tomcatServer.utils.ServletUtil;import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Map;/*** 套接字存储** author ez4sterben* date 2023/08/15*/ public class SocketStore {private static ServerSocket socket;public static void connect(Integer port) throws IOException {socket new ServerSocket(port);}public static void close() throws IOException {socket.close();}public static ServerSocket getSocket() {return socket;}/*** 处理请求** throws IOException ioexception*/public static void handleRequest(Socket accept) throws IOException {// 获取输入输出流BufferedReader in new BufferedReader(new InputStreamReader(accept.getInputStream()));PrintWriter out new PrintWriter(accept.getOutputStream(), true);// 定义字符串接收Http协议内容String inputLine;StringBuilder requestData new StringBuilder();// 读取数据while ((inputLine in.readLine()) ! null !inputLine.isEmpty()) {requestData.append(inputLine).append(\r\n);}// 解析request paramString url requestData.toString().split( )[1];// 处理静态资源if(url.contains(.html)){String staticSourceName (url.split(.html)[0] .html).substring(1);HttpServletResponse response new HttpServletResponse(out);response.writeHtml(staticSourceName);}else {// 处理GET与POST请求if (!requestData.toString().trim().equals()){handleGetAndPostReuqest(in, out, String.valueOf(requestData));}}// 关闭资源accept.close();}/*** 处理post请求** param in 在* param requestData 请求数据* throws IOException ioexception*/private static void handleGetAndPostReuqest(BufferedReader in,PrintWriter out, String requestData) throws IOException {// 解析request paramString url requestData.split( )[1];String[] urlContent url.split(\\?);String requestPath urlContent[0];String params urlContent[1];String[] paramsKeyValue params.split();// 设置请求参数HttpServletRequest request new HttpServletRequest();MapString, String paramsMap request.getParams();for (int i 0; i paramsKeyValue.length; i 2) {paramsMap.put(paramsKeyValue[i],paramsKeyValue[i1]);}if (requestData.contains(POST)) {// 解析request bodyint contentLength Integer.parseInt(requestData.split(Content-Length: )[1].split(\r\n)[0]);StringBuilder requestBody new StringBuilder();for (int i 0; i contentLength; i) {requestBody.append((char) in.read());}// 设置request bodyrequest.setRequestBody(String.valueOf(requestBody));// 设置响应内容HttpServletResponse response new HttpServletResponse(out);ServletUtil.invokePost(requestPath,request,response);}if (requestData.contains(GET)){// 设置响应内容HttpServletResponse response new HttpServletResponse(out);ServletUtil.invokeGet(requestPath,request,response);}}} 访问测试 接下来我们在index.html里面写点东西并访问一下试试 http://localhost:8080/index.html 路由支持 其实刚才完成这个功能的时候就会发现如何访问子目录里面的html呢 这里其实就要写一个小方法来支持路由重定向了下面编写一个HttpUtil package com.tomcatServer.utils;import com.tomcatServer.domain.HttpServletRequest; import com.tomcatServer.domain.HttpServletResponse;import java.io.IOException;public class HttpUtil {private final String redirectPath;public HttpUtil(String redirectPath) {this.redirectPath redirectPath;}public void forward(HttpServletRequest request, HttpServletResponse response) throws IOException {response.writeHtml(redirectPath);} } 对HttpServletRequest做一些改进提供一个加载静态资源的方法。 public HttpUtil getStaticSource(String path){return new HttpUtil(path);}其实这样我们的功能就完成了写一个servlet以及html来测试一下 package tomcatProject.com.ez4sterben.servlet;import com.tomcatServer.annotation.WebServlet; import com.tomcatServer.domain.HttpServlet; import com.tomcatServer.domain.HttpServletRequest; import com.tomcatServer.domain.HttpServletResponse;import java.io.IOException;WebServlet(/router) public class RouterServlet extends HttpServlet {Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {request.getStaticSource(WEB-INF/page/request.getParam(path).html).forward(request, response);}Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {doGet(request, response);} } 多线程改进 为什么要在这里谈多线程改进呢其实是因为我们最近本的接收请求响应请求响应页面以及完成了接下来要考虑的就是如何支持并发处理请求如何配置并发数如何配置端口等优化问题。 如果想实现并发处理请求的话实际上只需要预先定义一个线程池即可把处理请求的方法交给一个任务类并且实现Runnable接口当然我们后面会再优化这种方案。 package com.tomcatServer.task;import com.tomcatServer.socket.SocketStore;import java.io.IOException; import java.net.Socket;public class RequestTask implements Runnable{private final Socket accept;public RequestTask(Socket accept) {this.accept accept;}Overridepublic void run() {try {SocketStore.handleRequest(accept);} catch (IOException e) {throw new RuntimeException(e);}} } ...public static ExecutorService threadPool;...// 5.初始化线程池threadPool Executors.newFixedThreadPool(10);// 6.处理http请求try {SocketStore.connect(PORT);while (true){Socket accept SocketStore.getSocket().accept();if (accept ! null){threadPool.submit(new RequestTask(accept));}}} catch (IOException e) {throw new RuntimeException(e);}finally {SocketStore.close();}【仿写tomcat】六、解析xml文件配置端口、线程池核心参数
http://www.zqtcl.cn/news/740980/

相关文章:

  • 手机网站后台源码枣庄市建设局网站
  • 网站建设傲鸿wordpress 获取分类下的文章
  • 网站运行速度优化wordpress国内优化
  • wordpress全站网易云音乐播放网站建设案例公司
  • 湘潭网站建设多少钱 报价表湘潭磐石网络北京百度seo点击器
  • 什么做的网站电子商务网站的建设的原理
  • 河北建站科技网络公司媒体平台
  • 做同城信息类网站如何赚钱石景山网站建设多少钱
  • 用ip的网站要备案吗网站的建设维护及管理制度
  • dedecms 百度网站地图南宁比优建站
  • 沈阳大熊网站建设制作怎么增加网站的权重
  • 网站建设 价格低建设网站大约多少钱
  • 好看简单易做的网站北京网站建设华网天下定制
  • 黑群晖做网站云主机搭建网站
  • 网站首页默认的文件名一般为微信app网站建设
  • 珠海网站建设方案优化一个企业是如何做网站建设的
  • 重庆网站建设重庆最加科技潜江人才网官网
  • 网站建设规划书百度文库陕西做网站找谁
  • 昆明网站的优化网站访问跳出率
  • 四川省建设厅官方网站三内人员沈阳医大男科怎么样
  • 个性个人网站模板公司电子版简介模板
  • 网站建设百度做棋牌网站多少钱
  • 百度免费网站申请北京网站开发招聘58
  • 网站关键词排名如何提升小餐馆简易装修
  • 苏州手机网站建设多少钱牛商网上市了吗
  • 网站制作技术建设部网站监理工程师查询
  • 自助做网站嘉兴做网站优化
  • 淘宝客网站开发视频新手 网站建设 书籍
  • 在哪个网站做旅游攻略好做推广便宜的网站
  • 濮阳做网站推广做网站为什么要建站点