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

做网站 嵌入支付wordpress优化攻略

做网站 嵌入支付,wordpress优化攻略,东丽集团网站建设,网站的推广和宣传方式大纲JettyServletServlet生命周期和线程安全完整交互流程调试配置参考代码Jetty Jetty 是一个开源的轻量级 Web 服务器和Servlet 容器,专为高吞吐量和低延迟场景设计。它与 Apache Tomcat 类似,但架构更灵活,常用于嵌入式系统、微服务和需要…

大纲

  • Jetty
  • Servlet
    • Servlet生命周期和线程安全
  • 完整交互流程
  • 调试配置
  • 参考代码

Jetty

Jetty 是一个开源的轻量级 Web 服务器和Servlet 容器,专为高吞吐量和低延迟场景设计。它与 Apache Tomcat 类似,但架构更灵活,常用于嵌入式系统、微服务和需要快速启动的应用场景。

Servlet

Servlet是运行在 Web 服务器(如 Tomcat、Jetty)上的 Java 程序,负责处理客户端请求(如 HTTP 请求)并返回响应。
在这里插入图片描述
作为Servlet容器的Jetty,会根据“配置映射”,找到请求对应的Servlet。比如在本例中,webapp/WEB-INF/web.xml进行了如下配置

	<servlet><servlet-name>CarsServlet</servlet-name><servlet-class>org.apache.olingo.server.sample.CarsServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CarsServlet</servlet-name><url-pattern>/cars.svc/*</url-pattern></servlet-mapping>

这个配置告诉容器:

  • Servlet 类:org.apache.olingo.server.sample.CarsServlet
  • URL 映射:所有 /cars.svc/* 的请求都交给这个 Servlet 处理
  • 启动时机:load-on-startup=1 表示容器启动时立即初始化

当你访问 http://localhost:9080/cars.svc/Cars 时:

当Jetty 接收请求后:

  • 根据 web.xml 中的 /cars.svc/* 匹配
  • 找到对应的 CarsServlet 类
  • 调用 CarsServlet.service() 方法处理请求

Servlet生命周期和线程安全

在这里插入图片描述

完整交互流程

在这里插入图片描述

  1. 客户端发送 HTTP 请求
  • 浏览器向 Web 服务器发送请求(如访问http://localhost:8080/app/hello)。
  • 请求包含 URL、HTTP 方法(GET/POST 等)、请求头和请求体。
  1. Web 服务器接收并转发请求
  • Web 服务器(如 Tomcat、Jetty)接收到请求后,将其转发给 Servlet 容器。
  1. Servlet 容器查找匹配的 Servlet
  • 请求映射器根据 URL 路径查找对应的 Servlet:
    • 检查web.xml中的配置。
    • 或检查 Servlet 类上的@WebServlet注解。
    • 示例:/hello → 映射到HelloServlet。
  1. 创建 Request/Response 对象
  • 容器创建HttpServletRequest和HttpServletResponse对象。
  • 从线程池分配一个工作线程处理请求(Servlet 容器通常采用多线程模型)。
  1. 调用 Servlet 方法
  • 容器调用 Servlet 的service()方法,根据 HTTP 方法转发到doGet()或doPost():
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {// 处理GET请求
}
  1. 处理业务逻辑
  • Servlet 通过request获取参数,调用业务逻辑(如 Service 层):
String name = req.getParameter("name");
User user = userService.getUserByName(name);
  1. 设置响应数据
  • Servlet 通过response设置响应内容、状态码和头信息:
resp.setContentType("application/json");
resp.getWriter().write("{\"status\":\"success\"}");
  1. 返回响应到客户端
  • 容器将response对象转换为 HTTP 响应,通过 Web 服务器返回给客户端。
  1. 客户端展示响应内容
  • 浏览器解析并渲染 HTML、JSON 或其他格式的响应数据。

调试配置

在我们的案例中,Java代码会打包成war,然后被Jetty使用。所以我们没法直接调试Java代码,需要附加到Jetty上。

/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* distributed with this work for additional information* regarding copyright ownership. The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License. You may obtain a copy of the License at* * http://www.apache.org/licenses/LICENSE-2.0* * Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied. See the License for the* specific language governing permissions and limitations* under the License.*/
package org.apache.olingo.server.sample;import java.io.IOException;
import java.util.ArrayList;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;import org.apache.olingo.commons.api.edmx.EdmxReference;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.api.ServiceMetadata;
import org.apache.olingo.server.sample.data.DataProvider;
import org.apache.olingo.server.sample.edmprovider.CarsEdmProvider;
import org.apache.olingo.server.sample.processor.CarsProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class CarsServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static final Logger LOG = LoggerFactory.getLogger(CarsServlet.class);@Overrideprotected void service(final HttpServletRequest req, final HttpServletResponse resp)throws ServletException, IOException {try {HttpSession session = req.getSession(true);DataProvider dataProvider = (DataProvider) session.getAttribute(DataProvider.class.getName());if (dataProvider == null) {dataProvider = new DataProvider();session.setAttribute(DataProvider.class.getName(), dataProvider);LOG.info("Created new data provider.");}OData odata = OData.newInstance();ServiceMetadata edm = odata.createServiceMetadata(new CarsEdmProvider(), new ArrayList<EdmxReference>());ODataHttpHandler handler = odata.createHandler(edm);handler.register(new CarsProcessor(dataProvider));handler.process(req, resp);} catch (RuntimeException e) {LOG.error("Server Error", e);throw new ServletException(e);}}
}

具体步骤如下:

  1. 在Visual Studio Code中通过ctrl+shift+P唤出命令框,输入Debug:Add Configuration
    在这里插入图片描述
  2. 在打开的.vscode\launch.json中设置“附加调试”的配置。完整内容如下:
{"version": "0.2.0","configurations": [{"type": "java","name": "Debug CarsServlet","request": "attach","hostName": "localhost","port": 5005,"projectName": "odata-server-sample"}]
}

需要注意的是,我们配置的是端口号是5005。这样就是告诉IDE,调试时需要连接到该端口才能获取调试信息以及进行调试操作。

  1. 进入Servlet所在工程目录,打包代码
cd .\server\
mvn clean package
  1. 启动带调试端口的jetty
$env:MAVEN_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"; mvn  org.eclipse.jetty:jetty-maven-plugin:11.0.20:run

上述命令中关于环境变量的部分解读如下:
$env:MAVEN_OPTS: PowerShell 中设置环境变量的语法
-agentlib:jdwp: 启用 Java Debug Wire Protocol (JDWP) 调试代理
transport=dt_socket: 使用 socket 传输协议进行调试通信
server=y: JVM 作为调试服务器(等待调试器连接)
suspend=n: 应用启动时不暂停(如果是 suspend=y 则会等待调试器连接后才继续)
address=5005: 调试端口设为 5005

执行流程

  1. 设置环境变量: MAVEN_OPTS 会被 Maven 自动读取并传递给启动的 JVM
  2. 启动 Jetty: Maven 启动 Jetty 服务器,同时开启调试端口
  3. 监听连接: JVM 在 5005 端口监听调试器连接
  4. 服务运行: Jetty 在 9080 端口提供 Web 服务
    在这里插入图片描述
  5. 切到Servlet类的文件,点击F5进行调试(下断点,然后打开浏览器访问:[http://localhost:8080/cars.svc/metadata](http://localhost:8080/cars.svc/metadata](http://localhost:8080/cars.svc/metadata](http://localhost:8080/cars.svc/metadata))
    在这里插入图片描述

参考代码

  • https://github.com/f304646673/odata/tree/main/java/Olingo-OData-5.0.0
http://www.dtcms.com/a/457867.html

相关文章:

  • Chromium Embedded Framework (CEF)的构建及运行
  • 批量替换yaml文件url字段
  • “软件维护” 分 4 类?用 “奶茶店售后” 讲透更正 / 适应性 / 完善性维护
  • 恋爱ppt模板免费下载网站网站建设项目风险管理的主要内容
  • 网站主机选择98建筑人才网
  • Windows中在QTCreator中调试,提示缺少debug information files问题的解决
  • 做宠物店网站的素材seo一级域名和二级域名
  • 施工工地云监管平台,工程建设现场管理,智慧工地云平台源码,以AI、物联网、BIM技术为手段,对施工现场进行立体化、全方位、全时段管理
  • 用单调栈高效解决 “首尾均为最大值” 的子数组计数问题(Leetcode 3113)
  • 企业网站自己可以做吗wordpress 登陆 插件
  • 初学c#-c#和.NET Framework - onecopper
  • 大沥南庄网站建设网站开发建设流程
  • nvMolKit:一套基于GPU加速的RDKit核心函数集
  • LOBE-GS:分块致密化效率提升
  • 福州建设招聘信息网站pt网站怎么下载与做
  • dede免费手机网站模板象山seo的优化
  • 央视支持新消费模式:积分助力商家锁客,复购率翻倍
  • 专业政务软件开发北京移动端网站优化
  • 怎样提高网站访问速度一起做网站欧洲站
  • 公司网站建设费属于宣传费吗重庆专业的网站建设公司
  • 广西网站建设哪里好wordpress消息通知
  • 海南网站建设网站开发网站建设的流程步骤
  • 吴恩达机器学习课程(PyTorch适配)学习笔记:1.5 决策树与集成学习
  • 网站推广营销方法成都网站建设 致尚
  • 常州网站建设网站做网站必须要加v吗
  • 理想星环 OS 深度解析:开源浪潮下的智能汽车操作系统革命
  • Qt开发的应用程序编译链接Fast DDS库
  • 网站开发人员属于旅行社手机网站建设成
  • VBA经典应用69例应用9:Preserve关键字利用,保留原值
  • WebRTC 入门与实战(三)之高级篇