专业深圳网站建设公司云南人参果

张小明 2026/1/1 17:12:40
专业深圳网站建设公司,云南人参果,网站的字体做多大合适,wordpress文章添加回目录一、配置Maven环境新建项目需要加载#xff0c;等右下方的进度条满就行。在D盘根目录上解压apache-maven-3.6.2-zip 同时在D盘根目录新建文件夹Maven二、手写Tomcat1、ServletConfigMappingpackage com.qcby.config;import com.qcby.lib.HttpServlet; import com.qcby.lib.Web…一、配置Maven环境新建项目需要加载等右下方的进度条满就行。在D盘根目录上解压apache-maven-3.6.2-zip同时在D盘根目录新建文件夹Maven二、手写Tomcat1、ServletConfigMappingpackage com.qcby.config; import com.qcby.lib.HttpServlet; import com.qcby.lib.WebServlet; import com.qcby.utils.SearchClassUtil; import java.util.HashMap; import java.util.List; import java.util.Map; /** * servlet容器配置类 */ public class ServletConfigMapping { /** * String, HttpServlet * String:路径作为key值 * HttpServlet:servlet对象作为value值 (多态向上转型-----父类引用指向子类对象) * */ public static MapString, HttpServlet classMapping new HashMap(); //servlet容器 //特点在main方法执行之前执行,以修饰main方法 static { ListString paths SearchClassUtil.searchClass( com.qcby.webapps.myweb); for (String path: paths) { // 获取类的注解信息,并将path作为key值,将对象作为value值 存放如classMapping当中 try{ Class clazz Class.forName(path); //获取类对象 //获取类的注解信息 WebServlet webServlet (WebServlet) clazz.getDeclaredAnnotation(WebServlet.class); //System.out.println(webServlet.value()); HttpServlet servlet (HttpServlet) clazz.getDeclaredConstructor().newInstance(); classMapping.put(webServlet.value(),servlet); }catch (Exception e){ e.printStackTrace(); } } } public static void main(String[] args) { } }2、GenericServletpackage com.qcby.lib; import java.io.IOException; public abstract class GenericServlet implements Servlet{ Override public void init() { } public abstract void service(ServletRequest request, ServletResponse response) throws IOException; Override public void destroy() { } }3、HttpServletpackage com.qcby.lib; import java.io.IOException; public abstract class HttpServlet extends GenericServlet{ public abstract void doGet(ServletRequest request, ServletResponse response) throws IOException; public abstract void doPost(ServletRequest request, ServletResponse response); Override public void service(ServletRequest request, ServletResponse response) throws IOException { if(request.getMethod().equals(GET)){ doGet(request,response); }else if(request.getMethod().equals(POST)){ doPost(request,response); } } }4、HttpServletRequestpackage com.qcby.lib; public class HttpServletRequest implements ServletRequest{ private String method; private String path; Override public String getMethod() { return method; } Override public String getPath() { return path; } Override public String setMethod(String method) { return this.method method ; } Override public String setPath(String path) { return this.path path; } }5、HttpServletResponsepackage com.qcby.lib; import com.qcby.utils.FileUtil; import java.io.File; import java.io.IOException; import java.io.OutputStream; public class HttpServletResponse implements ServletResponse{ //获取输出流 private OutputStream outputStream; public OutputStream getOutputStream() { return outputStream; } public void setOutputStream(OutputStream outputStream) { this.outputStream outputStream; } /** * 动态资源数据写回 * param context * throws IOException */ public void append(String context) throws IOException { outputStream.write(context.getBytes()); } /** * 返回静态资源 * param path 静态资源文件的相对路径 * throws Exception */ public void returnStatic(String path) throws Exception { String resource FileUtil.getResourcePath(path); // 获取静态资源真实路径 File file new File(resource); // 静态文件 if(file.exists()){ //静态文件存在 FileUtil.writeFile(file,outputStream); }else { System.out.println(404静态资源文本不存在......); } } }6、Servletpackage com.qcby.lib; import java.io.IOException; public interface Servlet { public void init(); public void service(ServletRequest request,ServletResponse response) throws IOException; public void destroy(); }7、ServletRequestpackage com.qcby.lib; public interface ServletRequest { String getMethod(); String getPath(); String setMethod(String method); String setPath(String path); }8、ServletResponsepackage com.qcby.lib; import java.io.IOException; public interface ServletResponse { public void append(String context)throws IOException; }9、WebServletpackage com.qcby.lib; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Retention(RetentionPolicy.RUNTIME) //生命周期 Target(ElementType.TYPE) //作用范围 public interface WebServlet { String value(); }10、MyFirstServletpackage com.qcby.webapps.myweb; import com.qcby.lib.HttpServlet; import com.qcby.lib.ServletRequest; import com.qcby.lib.ServletResponse; import com.qcby.lib.WebServlet; import com.qcby.utils.ResponseUtil; import java.io.IOException; WebServlet(/first) public class MyFirstServlet extends HttpServlet { Override public void doGet(ServletRequest request, ServletResponse response) throws IOException { System.out.println(MyFirstServlet doGet 这里的地址); response.append(ResponseUtil.getResponseHeader200(h1这是第一个Servlet/h1)); } Override public void doPost(ServletRequest request,ServletResponse response){ } }11、MySecondServletpackage com.qcby.webapps.myweb; import com.qcby.lib.HttpServlet; import com.qcby.lib.ServletRequest; import com.qcby.lib.ServletResponse; import com.qcby.lib.WebServlet; import com.qcby.utils.ResponseUtil; import java.io.IOException; /** * 1.继承HttpServlet * 2.重写doGet()和doPost()方法 省略 * 3.WebServlet(/MySecondServlet) 配置访问路径 */ WebServlet(/second) public class MySecondServlet extends HttpServlet { Override public void doGet(ServletRequest request, ServletResponse response) throws IOException { System.out.println(MySecondServlet doGet 这里的地址); response.append(ResponseUtil.getResponseHeader200( h1SecondServlet/h1)); } Override public void doPost(ServletRequest request, ServletResponse response) { } }12、MyTomcatpackage com.qcby; import com.qcby.config.ServletConfigMapping; import com.qcby.lib.*; import com.qcby.utils.ResponseUtil; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class MyTomcat { private static HttpServletRequest httpServletRequest new HttpServletRequest(); private static HttpServletResponse httpServletResponse new HttpServletResponse(); private static final Integer PORT 7788; //监听的端口号 public static void start() throws Exception { ServerSocket serverSocket new ServerSocket(PORT); while (true) { Socket socket serverSocket.accept(); //阻塞监听 InputStream stream socket.getInputStream();//打开输出流 httpServletResponse.setOutputStream(socket.getOutputStream()); //获取输入流 handler(stream); } } /** * 处理客户端的请求数据并进行保持 * * param stream * throws IOException */ public static void handler(InputStream stream) throws Exception { int count 0; while (count 0) { count stream.available(); } byte[] bytes new byte[count]; int read stream.read(bytes); String request new String(bytes, 0, read); if (request.equals()) { System.out.println(请求为null); } else { String firstLine request.split(\n)[0]; String method firstLine.split(\\s)[0]; // 请求方式原代码存在变量名大小写错误firstline → firstLine String path firstLine.split(\\s)[1]; // 请求路径同变量名错误 System.out.println(请求方式 method 请求路径 path); httpServletRequest.setMethod(method); httpServletRequest.setPath(path); if (path.equals()) { System.out.println(请求路径为空); httpServletResponse.append(ResponseUtil.responseHeader404); } else if (ServletConfigMapping.classMapping.get(path) ! null) { // 虽然是用HttpServlet对象进行接受但是实际上我们返回的是MyFirstServlet/MySecondServlet/...... // HttpServlet 实际上是向上转型的产物 HttpServlet servlet ServletConfigMapping.classMapping.get(path); servlet.service(httpServletRequest, httpServletResponse); } else { httpServletResponse.returnStatic(path); } } } //tomcat启动器 public static void main(String[] args) throws Exception { start(); } }13、index.html!DOCTYPE html html langen head meta charsetUTF-8 titleTitle/title /head body h1hello world/h1 h1中文测试/h1 /body /html
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

凡科建站弊端网站建设比较好的律所

基于鸿蒙Electron的技术拓展与场景深化,本次聚焦“鸿蒙Electron与区块链融合”这一创新方向——区块链的去中心化、不可篡改特性,与鸿蒙Electron的跨端协同、端侧安全能力结合,可解决数据可信共享、设备身份认证、操作溯源等核心痛点。本文将…

张小明 2025/12/27 5:19:08 网站建设

建站语言wordpress说说墙

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 python-flask-djangoweb_sq4r3pe 的旅游服务管理系统基于 项目技术简介 Python版本&#xf…

张小明 2025/12/26 6:44:13 网站建设

营销型网站的特征深圳最好seo

深入了解Linux网络配置与故障诊断 1. 使用PPP连接DSL网络 对于宽带用户,尤其是使用数字用户线路(DSL)连接的用户,有时需要使用点对点协议(PPP)的变体来建立连接。PPP是一种基于登录的互联网访问方式,使用PPP工具发起与远程计算机的连接,过程中需要交换用户名和密码。…

张小明 2025/12/27 5:19:10 网站建设

浏览器怎么打开网站服务器连接网站营销的定义

🚀 Flutter OpenHarmony 发布与运维指南:从上架 AppGallery 到线上监控的全生命周期管理 作者:晚霞的不甘 日期:2025年12月5日 标签:Flutter OpenHarmony 应用发布 AppGallery 热更新 崩溃监控 鸿蒙生态 运维 …

张小明 2025/12/27 5:19:10 网站建设

镇江市扬中市做网站爱站网功能

数据结构:Socket_Study_Model Socket_Study_Model 数据结构层,定义了客户端与服务端之间交互的所有消息模型、枚举类型和通用消息格式,基于 JSON 序列化实现跨端数据传输,所有消息均通过统一的 MessageStyle 格式封装。 后期拓展就添加 [XXX…

张小明 2025/12/27 5:19:11 网站建设

宁波专业网站建设怎么做清徐北京网站建设

你是否曾好奇,如何用人工智能技术解密生命最基本的语言?evo2作为一款革命性的DNA语言模型,正在重新定义我们对基因组建模的认知。这款基于StripedHyena 2架构的先进工具,能够处理长达100万碱基对的DNA序列,为生命科学研…

张小明 2025/12/27 5:19:12 网站建设