From d2899a1032634249490c662f9ee1adc72ec806de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Wed, 27 Sep 2023 18:34:33 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=B8=BAjakarta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 89 ++---------------- pom.xml | 63 ++++++------- servlet-core/pom.xml | 12 +-- .../smartboot/servlet/AnnotationsLoader.java | 10 +- .../smartboot/servlet/ContainerRuntime.java | 68 +++++++------- .../org/smartboot/servlet/DefaultServlet.java | 14 +-- .../org/smartboot/servlet/HandlerContext.java | 2 +- .../servlet/ServletContextRuntime.java | 26 +++--- .../servlet/SmartHttpServletRequest.java | 2 +- .../smartboot/servlet/WebXmlParseEngine.java | 4 +- .../servlet/conf/DeploymentInfo.java | 16 ++-- .../smartboot/servlet/conf/FilterInfo.java | 2 +- .../servlet/conf/FilterMappingInfo.java | 2 +- .../conf/ServletContainerInitializerInfo.java | 2 +- .../smartboot/servlet/conf/ServletInfo.java | 4 +- .../servlet/handler/FilterMatchHandler.java | 16 ++-- .../servlet/handler/ServletMatchHandler.java | 4 +- .../ServletRequestListenerHandler.java | 6 +- .../handler/ServletServiceHandler.java | 6 +- .../impl/ApplicationFilterRegistration.java | 4 +- .../impl/ApplicationServletRegistration.java | 6 +- .../servlet/impl/AsyncContextImpl.java | 16 ++-- .../servlet/impl/FilterConfigImpl.java | 4 +- .../servlet/impl/HttpServletRequestImpl.java | 30 +++--- .../servlet/impl/HttpServletResponseImpl.java | 22 ++--- .../org/smartboot/servlet/impl/PartImpl.java | 2 +- .../servlet/impl/ServletConfigImpl.java | 4 +- .../servlet/impl/ServletContextImpl.java | 36 +++---- .../servlet/impl/ServletInputStreamImpl.java | 4 +- .../servlet/impl/ServletOutputStreamImpl.java | 4 +- .../servlet/impl/SessionCookieConfigImpl.java | 2 +- .../dispatcher/DispatcherProviderImpl.java | 2 +- .../dispatcher/RequestDispatcherImpl.java | 14 +-- .../ServletRequestDispatcherWrapper.java | 6 +- .../ServletResponseDispatcherWrapper.java | 4 +- .../plugins/session/HttpSessionImpl.java | 12 +-- .../plugins/session/SessionProviderImpl.java | 12 +-- .../plugins/websocket/WebsocketPlugin.java | 2 +- .../websocket/WebsocketProviderImpl.java | 6 +- .../websocket/impl/AnnotatedEndpoint.java | 10 +- .../websocket/impl/HandlerWrapper.java | 2 +- .../impl/SmartServerEndpointConfig.java | 12 +-- .../impl/WebsocketServerContainer.java | 16 ++-- .../websocket/impl/WebsocketSession.java | 14 +-- .../websocket/impl/WsHandshakeRequest.java | 2 +- .../servlet/provider/DispatcherProvider.java | 2 +- .../servlet/provider/SessionProvider.java | 4 +- .../sandbox/MockDispatcherProvider.java | 2 +- .../servlet/sandbox/MockSessionProvider.java | 4 +- .../commons/fileupload/DiskFileUpload.java | 2 +- .../commons/fileupload/FileUploadBase.java | 2 +- .../servlet/FileCleanerCleanup.java | 6 +- .../fileupload/servlet/ServletFileUpload.java | 2 +- .../servlet/ServletRequestContext.java | 2 +- spring-boot-starter/pom.xml | 2 +- .../starter/SmartContainerInitializer.java | 6 +- testsuite/pom.xml | 6 -- .../testsuite/JettyEmbeddedContainer.java | 2 +- .../servlet/testsuite/VersionUtil.java | 93 ------------------- 59 files changed, 277 insertions(+), 454 deletions(-) delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/VersionUtil.java diff --git a/README.md b/README.md index 74b57d2..7ad014f 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,11 @@ # smart-servlet -smart-servlet 是一款实现了Servlet 3.1规范,支持多应用隔离部署的的 Web 容器。 -除此之外,smart-servlet 还是一款插件化容器,基于内置的沙箱环境确保 smart-servlet 拥有最精简的运行能力,用户还可以通过自定义插件扩展容器的服务能力。 +smart-servlet是目前 Gitee、Github 平台上首款,也是唯一款全栈核心技术自研的国产开源的Servlet容器项目。 +本项目遵循Servlet 3.1规范,支持多应用隔离部署的的 Web 容器。 - -## Part 1. 项目概述 + -smart-servlet 在 smart-http 的架构之上,通过继承 HttpHandle 实现了 Servlet 规范。这意味着任何 smart-http 服务都可以通过单独引入 smart-servlet 核心包的方式,将普通的 http 应用改造成 servlet 应用,而且这个成本是极低的。 - -![](https://foruda.gitee.com/images/1666446010203449163/fca34841_351975.png) **产品特色** - 国产血统:核心技术 100% 全栈自研。 @@ -17,81 +13,12 @@ smart-servlet 在 smart-http 的架构之上,通过继承 HttpHandle 实现了 - 安全可靠:严格遵循协议规范;支持加密传输方式。 - 简洁易用:支持 War 包、springboot、maven-plugin等多种运行模式,使用体验100%兼容 Tomcat。 -### 工程模块 - -- smart-servlet 【工程主目录】 - - servlet-core【servlet规范实现核心包】 - - plugins【容器可扩展插件】 - - dispatcher【RequestDispatcher插件,**必选**】 - - session【HttpSession插件,**可选**】 - - websocket【 JSR 356 规范插件,**可选**】 - - smart-servlet-maven-plugin【业务系统通过pom.xml集成本地开发环境】 - - spring-boot-start【springboot业务系统通过pom.xml集成本地开发环境】 - -## Part 2. 操作手册 - - -### 2.1 示例演示 - -1. 下载最新版发行包:https://gitee.com/smartboot/smart-servlet/releases - -2. 解压安装包,启动服务:`smart-servlet-bin-x.x.x/bin/start.sh` - -3. 若启动过程无任何异常,打开浏览器访问 [http://127.0.0.1:8080/](http:127.0.0.1:8080/)。 - - - -### 2.2 业务系统集成smart-servlet - -根据业务工程实际情况选择相应的集成方式。 - -- maven plugin - - 适用于传统的 Servlet 或者 Spring MVC 工程,且必须是 maven 工程。需要在 web 模块所在的 pom.xml 中加入以下配置,若存在端口冲突自行调整。完成配置后通过:`mvn smart-servlet:run` 启动服务。 - ```xml - - - - - - org.smartboot.servlet - smart-servlet-maven-plugin - 0.4 - - 8080 - - - - - - ``` +![](https://foruda.gitee.com/images/1666446010203449163/fca34841_351975.png) -- springboot starter +> 本项目可用于个人学习,未经授权不得用于商业场景。 - 对于 Springboot 提供的集成方式,替换原 spring-boot-starter-web 默认绑定的 Servlet 容器。 - ```xml - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.smartboot.servlet - smart-servlet-spring-boot-starter - 0.4 - - - - ``` +**[《使用手册》](https://smartboot.tech/smart-servlet/quickstart.html)** ### 代码贡献者 @@ -101,4 +28,6 @@ smart-servlet 在 smart-http 的架构之上,通过继承 HttpHandle 实现了 - [smart-socket](https://gitee.com/smartboot/smart-socket) 极简、易用、高性能的AIO通信框架,5G时代的通信微内核,适用于IM、RPC、IoT等诸多领域 - [smart-http](https://gitee.com/smartboot/smart-http) - 基于smart-socket实现的轻量级http服务器 \ No newline at end of file + 基于smart-socket实现的轻量级http服务器 +- [smart-mqtt](https://gitee.com/smartboot/smart-mqtt) + 基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。 \ No newline at end of file diff --git a/pom.xml b/pom.xml index ee2ce2d..dd4dd80 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ pom - 1.2.7 + 1.3.1 0.4 4.0.1 @@ -38,25 +38,22 @@ ${smartservlet.version} - - javax.servlet - javax.servlet-api - ${servlet.version} - jakarta.servlet jakarta.servlet-api 5.0.0 + - javax.annotation - javax.annotation-api - ${javax.annotation.version} + jakarta.annotation + jakarta.annotation-api + 2.0.0 + - javax.websocket - javax.websocket-api - 1.1 + jakarta.websocket + jakarta.websocket-api + 2.0.0 @@ -120,8 +117,8 @@ org.apache.maven.plugins maven-compiler-plugin - 1.8 - 1.8 + 21 + 21 UTF-8 @@ -150,24 +147,24 @@ - - org.apache.maven.plugins - maven-javadoc-plugin - - - true - public - -Xdoclint:none - - - - attach-javadocs - - jar - - - - + + + + + + + + + + + + + + + + + + org.apache.maven.plugins maven-gpg-plugin @@ -198,7 +195,7 @@ org.apache.maven.plugins maven-plugin-plugin - 3.6.4 + 3.9.0 org.apache.maven.plugins diff --git a/servlet-core/pom.xml b/servlet-core/pom.xml index d4c22ff..d23124e 100644 --- a/servlet-core/pom.xml +++ b/servlet-core/pom.xml @@ -25,25 +25,21 @@ - - javax.servlet - javax.servlet-api - jakarta.servlet jakarta.servlet-api - javax.annotation - javax.annotation-api + jakarta.annotation + jakarta.annotation-api org.smartboot.http smart-http-server - javax.websocket - javax.websocket-api + jakarta.websocket + jakarta.websocket-api diff --git a/servlet-core/src/main/java/org/smartboot/servlet/AnnotationsLoader.java b/servlet-core/src/main/java/org/smartboot/servlet/AnnotationsLoader.java index d7e6fd5..f564c0e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/AnnotationsLoader.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/AnnotationsLoader.java @@ -18,11 +18,11 @@ import org.smartboot.servlet.third.bcel.classfile.ClassParser; import org.smartboot.servlet.third.bcel.classfile.JavaClass; import org.smartboot.servlet.util.CollectionUtils; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.annotation.HandlesTypes; -import javax.servlet.annotation.WebInitParam; -import javax.servlet.annotation.WebListener; -import javax.servlet.annotation.WebServlet; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.annotation.HandlesTypes; +import jakarta.servlet.annotation.WebInitParam; +import jakarta.servlet.annotation.WebListener; +import jakarta.servlet.annotation.WebServlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java index ecfbdb1..83728c2 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java @@ -33,9 +33,9 @@ import org.smartboot.servlet.impl.HttpServletResponseImpl; import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.plugins.Plugin; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletResponse; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -83,40 +83,44 @@ public class ContainerRuntime { */ private HttpServerConfiguration configuration; - public void start(HttpServerConfiguration configuration) throws Throwable { - if (started) { - return; - } - started = true; - this.configuration = configuration; - configuration.serverName("smart-servlet"); - System.out.println(ConsoleColors.GREEN + BANNER + ConsoleColors.RESET + "\r\n :: smart-servlet :: (" + VERSION + ")"); - HandlerPipeline pipeline = new HandlerPipeline(); - pipeline.next(new ServletServiceHandler() { - final byte[] line = "欢迎使用 smart-socket!".getBytes(StandardCharsets.UTF_8); + public void start(HttpServerConfiguration configuration) { + try { - @Override - public void handleRequest(HandlerContext handlerContext) { - try { - ServletResponse response = handlerContext.getResponse(); - response.setContentLength(line.length); - response.getOutputStream().write(line); - } catch (IOException e) { - throw new RuntimeException(e); + if (started) { + return; + } + started = true; + this.configuration = configuration; + configuration.serverName("smart-servlet"); + System.out.println(ConsoleColors.GREEN + BANNER + ConsoleColors.RESET + "\r\n :: smart-servlet :: (" + VERSION + ")"); + HandlerPipeline pipeline = new HandlerPipeline(); + pipeline.next(new ServletServiceHandler() { + final byte[] line = "欢迎使用 smart-socket!".getBytes(StandardCharsets.UTF_8); + + @Override + public void handleRequest(HandlerContext handlerContext) { + try { + ServletResponse response = handlerContext.getResponse(); + response.setContentLength(line.length); + response.getOutputStream().write(line); + } catch (IOException e) { + throw new RuntimeException(e); + } } + }); + defaultRuntime.getServletContext().setPipeline(pipeline); + defaultRuntime.start(); + //扫描插件 + loadAndInstallPlugins(); + + //启动运行环境 + for (ServletContextRuntime runtime : runtimes) { + runtime.start(); } - }); - defaultRuntime.getServletContext().setPipeline(pipeline); - defaultRuntime.start(); - //扫描插件 - loadAndInstallPlugins(); - - //启动运行环境 - for (ServletContextRuntime runtime : runtimes) { - runtime.start(); + } catch (Throwable throwable) { + throw new RuntimeException(throwable); } - } /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java b/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java index e1776e5..714ff11 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java @@ -20,13 +20,13 @@ import org.smartboot.http.common.utils.Mimetypes; import org.smartboot.http.common.utils.StringUtils; import org.smartboot.servlet.exception.WrappedRuntimeException; -import javax.servlet.DispatcherType; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/HandlerContext.java b/servlet-core/src/main/java/org/smartboot/servlet/HandlerContext.java index 02cac9c..48f71f6 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/HandlerContext.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/HandlerContext.java @@ -13,7 +13,7 @@ package org.smartboot.servlet; import org.smartboot.servlet.conf.ServletInfo; import org.smartboot.servlet.impl.ServletContextImpl; -import javax.servlet.ServletResponse; +import jakarta.servlet.ServletResponse; /** * 请求处理上下文对象 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java b/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java index a275d8f..4c3ec7b 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java @@ -28,19 +28,19 @@ import org.smartboot.servlet.provider.SessionProvider; import org.smartboot.servlet.provider.WebsocketProvider; import org.smartboot.servlet.sandbox.SandBox; -import javax.servlet.Filter; -import javax.servlet.FilterConfig; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletException; -import javax.servlet.UnavailableException; -import javax.servlet.annotation.WebListener; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletException; +import jakarta.servlet.UnavailableException; +import jakarta.servlet.annotation.WebListener; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.ArrayList; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/SmartHttpServletRequest.java b/servlet-core/src/main/java/org/smartboot/servlet/SmartHttpServletRequest.java index 243bfb2..696408e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/SmartHttpServletRequest.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/SmartHttpServletRequest.java @@ -12,7 +12,7 @@ package org.smartboot.servlet; import org.smartboot.servlet.conf.ServletInfo; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/WebXmlParseEngine.java b/servlet-core/src/main/java/org/smartboot/servlet/WebXmlParseEngine.java index 127e818..e82fd9d 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/WebXmlParseEngine.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/WebXmlParseEngine.java @@ -26,8 +26,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import javax.servlet.DispatcherType; -import javax.servlet.MultipartConfigElement; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.MultipartConfigElement; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/conf/DeploymentInfo.java b/servlet-core/src/main/java/org/smartboot/servlet/conf/DeploymentInfo.java index ca2c275..f8aeffc 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/conf/DeploymentInfo.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/conf/DeploymentInfo.java @@ -12,14 +12,14 @@ package org.smartboot.servlet.conf; import org.smartboot.servlet.AnnotationsLoader; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletContextAttributeListener; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletRequestAttributeListener; -import javax.servlet.ServletRequestListener; -import javax.servlet.annotation.HandlesTypes; -import javax.servlet.http.HttpSessionAttributeListener; -import javax.servlet.http.HttpSessionListener; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletContextAttributeListener; +import jakarta.servlet.ServletContextListener; +import jakarta.servlet.ServletRequestAttributeListener; +import jakarta.servlet.ServletRequestListener; +import jakarta.servlet.annotation.HandlesTypes; +import jakarta.servlet.http.HttpSessionAttributeListener; +import jakarta.servlet.http.HttpSessionListener; import java.net.URL; import java.util.ArrayList; import java.util.Collections; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterInfo.java b/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterInfo.java index ed39e5a..90dc811 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterInfo.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterInfo.java @@ -10,7 +10,7 @@ package org.smartboot.servlet.conf; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.Collections; import java.util.HashMap; import java.util.Map; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterMappingInfo.java b/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterMappingInfo.java index 38c5e79..7fe0902 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterMappingInfo.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/conf/FilterMappingInfo.java @@ -12,7 +12,7 @@ package org.smartboot.servlet.conf; import org.smartboot.servlet.enums.FilterMappingType; -import javax.servlet.DispatcherType; +import jakarta.servlet.DispatcherType; import java.util.Set; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletContainerInitializerInfo.java b/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletContainerInitializerInfo.java index 81dc02b..6fcf930 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletContainerInitializerInfo.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletContainerInitializerInfo.java @@ -10,7 +10,7 @@ package org.smartboot.servlet.conf; -import javax.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletContainerInitializer; import java.util.Set; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletInfo.java b/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletInfo.java index 85a402d..591aeb8 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletInfo.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/conf/ServletInfo.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.conf; import org.smartboot.servlet.util.PathMatcherUtil; -import javax.servlet.MultipartConfigElement; -import javax.servlet.Servlet; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.Servlet; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java index 4599480..586c45a 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java @@ -18,14 +18,14 @@ import org.smartboot.servlet.enums.FilterMappingType; import org.smartboot.servlet.exception.WrappedRuntimeException; import org.smartboot.servlet.util.PathMatcherUtil; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java index 146b906..0288cc1 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java @@ -18,8 +18,8 @@ import org.smartboot.servlet.exception.WrappedRuntimeException; import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.util.PathMatcherUtil; -import javax.servlet.Servlet; -import javax.servlet.ServletException; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java index 0773af3..b6006b0 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java @@ -14,9 +14,9 @@ import org.smartboot.http.common.logging.Logger; import org.smartboot.http.common.logging.LoggerFactory; import org.smartboot.servlet.HandlerContext; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequestEvent; +import jakarta.servlet.ServletRequestListener; import java.util.List; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java index 5a295e7..751aa50 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java @@ -14,9 +14,9 @@ import org.smartboot.servlet.HandlerContext; import org.smartboot.servlet.conf.ServletInfo; import org.smartboot.servlet.exception.WrappedRuntimeException; -import javax.servlet.ServletException; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java index 771dc5c..6f247be 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java @@ -17,8 +17,8 @@ import org.smartboot.servlet.conf.ServletMappingInfo; import org.smartboot.servlet.enums.FilterMappingType; import org.smartboot.servlet.util.PathMatcherUtil; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.util.Collection; import java.util.EnumSet; import java.util.HashMap; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationServletRegistration.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationServletRegistration.java index e2f75c2..76fc86f 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationServletRegistration.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationServletRegistration.java @@ -16,9 +16,9 @@ import org.smartboot.servlet.conf.DeploymentInfo; import org.smartboot.servlet.conf.ServletInfo; import org.smartboot.servlet.conf.ServletMappingInfo; -import javax.servlet.MultipartConfigElement; -import javax.servlet.ServletRegistration; -import javax.servlet.ServletSecurityElement; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.ServletSecurityElement; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java index 1c94c42..396f90f 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java @@ -14,14 +14,14 @@ import org.smartboot.servlet.HandlerContext; import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.plugins.dispatcher.ServletRequestDispatcherWrapper; -import javax.servlet.AsyncContext; -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.AsyncEvent; +import jakarta.servlet.AsyncListener; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.util.LinkedList; import java.util.List; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/FilterConfigImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/FilterConfigImpl.java index 041138c..ea24e90 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/FilterConfigImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/FilterConfigImpl.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.impl; import org.smartboot.servlet.conf.FilterInfo; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; import java.util.Collections; import java.util.Enumeration; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletRequestImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletRequestImpl.java index 88d91af..af577a5 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletRequestImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletRequestImpl.java @@ -28,21 +28,21 @@ import org.smartboot.servlet.third.commons.fileupload.disk.DiskFileItemFactory; import org.smartboot.servlet.util.CollectionUtils; import org.smartboot.servlet.util.DateUtil; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.MultipartConfigElement; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletRequestAttributeEvent; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletRequestAttributeEvent; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpUpgradeHandler; +import jakarta.servlet.http.Part; import java.io.BufferedReader; import java.io.File; import java.io.IOException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java index 8bc5cbb..8a0e655 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java @@ -19,9 +19,9 @@ import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.util.DateUtil; import org.smartboot.servlet.util.PathMatcherUtil; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -210,11 +210,11 @@ public class HttpServletResponseImpl implements HttpServletResponse { @Override public String getContentType() { - if (contentType != null && charsetSet) { - return contentType + ";charset=" + getCharacterEncoding(); - } else { - return contentType; + if (contentType == null) { + return null; } + return contentType + ";charset=" + getCharacterEncoding(); + } @Override @@ -227,14 +227,10 @@ public class HttpServletResponseImpl implements HttpServletResponse { int split = type.indexOf(";charset="); if (split == -1) { contentType = type; - response.setContentType(type); + response.setContentType(getContentType()); } else { contentType = type.substring(0, split); - if (charsetSet) { - response.setContentType(getContentType()); - } else { - setCharacterEncoding(type.substring(split + 9)); - } + setCharacterEncoding(type.substring(split + 9)); } } diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/PartImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/PartImpl.java index 5243d59..464a104 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/PartImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/PartImpl.java @@ -14,7 +14,7 @@ import org.smartboot.servlet.third.commons.fileupload.FileItem; import org.smartboot.servlet.third.commons.fileupload.ParameterParser; import org.smartboot.servlet.third.commons.fileupload.disk.DiskFileItem; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletConfigImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletConfigImpl.java index 30f8687..f331a16 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletConfigImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletConfigImpl.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.impl; import org.smartboot.servlet.conf.ServletInfo; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; import java.util.Collections; import java.util.Enumeration; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java index 6827246..a0be4a4 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java @@ -22,24 +22,24 @@ import org.smartboot.servlet.enums.ServletContextPathType; import org.smartboot.servlet.exception.WrappedRuntimeException; import org.smartboot.servlet.handler.HandlerPipeline; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextAttributeEvent; -import javax.servlet.ServletContextAttributeListener; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.ServletRequestAttributeListener; -import javax.servlet.ServletRequestListener; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; -import javax.servlet.descriptor.JspConfigDescriptor; -import javax.servlet.http.HttpSessionAttributeListener; -import javax.servlet.http.HttpSessionListener; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextAttributeEvent; +import jakarta.servlet.ServletContextAttributeListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.ServletRequestAttributeListener; +import jakarta.servlet.ServletRequestListener; +import jakarta.servlet.SessionCookieConfig; +import jakarta.servlet.SessionTrackingMode; +import jakarta.servlet.descriptor.JspConfigDescriptor; +import jakarta.servlet.http.HttpSessionAttributeListener; +import jakarta.servlet.http.HttpSessionListener; import java.io.File; import java.io.InputStream; import java.net.MalformedURLException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletInputStreamImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletInputStreamImpl.java index eba58fa..3ce7010 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletInputStreamImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletInputStreamImpl.java @@ -10,8 +10,8 @@ package org.smartboot.servlet.impl; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletOutputStreamImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletOutputStreamImpl.java index 9e2e451..5b51953 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletOutputStreamImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletOutputStreamImpl.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.impl; import org.smartboot.http.common.BufferOutputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; import java.io.IOException; /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/SessionCookieConfigImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/SessionCookieConfigImpl.java index 1a02411..bbf00a2 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/SessionCookieConfigImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/SessionCookieConfigImpl.java @@ -10,7 +10,7 @@ package org.smartboot.servlet.impl; -import javax.servlet.SessionCookieConfig; +import jakarta.servlet.SessionCookieConfig; import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.provider.SessionProvider; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/DispatcherProviderImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/DispatcherProviderImpl.java index ccbafee..a714267 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/DispatcherProviderImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/DispatcherProviderImpl.java @@ -16,7 +16,7 @@ import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.provider.DispatcherProvider; -import javax.servlet.RequestDispatcher; +import jakarta.servlet.RequestDispatcher; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java index 636c983..708d774 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java @@ -18,13 +18,13 @@ import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.impl.HttpServletResponseImpl; import org.smartboot.servlet.impl.ServletContextImpl; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletRequestWrapper; -import javax.servlet.ServletResponse; -import javax.servlet.ServletResponseWrapper; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletRequestWrapper; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.ServletResponseWrapper; import java.io.IOException; import java.util.HashMap; import java.util.Map; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletRequestDispatcherWrapper.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletRequestDispatcherWrapper.java index 552a5dc..285d5b8 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletRequestDispatcherWrapper.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletRequestDispatcherWrapper.java @@ -16,9 +16,9 @@ import org.smartboot.servlet.conf.ServletInfo; import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.impl.HttpServletResponseImpl; -import javax.servlet.DispatcherType; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpSession; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpSession; import java.util.Collections; import java.util.Enumeration; import java.util.Map; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletResponseDispatcherWrapper.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletResponseDispatcherWrapper.java index 6713e20..29a21de 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletResponseDispatcherWrapper.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/ServletResponseDispatcherWrapper.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.plugins.dispatcher; import org.smartboot.servlet.impl.HttpServletResponseImpl; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.util.Locale; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/HttpSessionImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/HttpSessionImpl.java index d02441c..6ac9e6c 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/HttpSessionImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/HttpSessionImpl.java @@ -13,12 +13,12 @@ package org.smartboot.servlet.plugins.session; import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.util.CollectionUtils; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionBindingEvent; -import javax.servlet.http.HttpSessionContext; -import javax.servlet.http.HttpSessionEvent; -import javax.servlet.http.HttpSessionListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionBindingEvent; +import jakarta.servlet.http.HttpSessionContext; +import jakarta.servlet.http.HttpSessionEvent; +import jakarta.servlet.http.HttpSessionListener; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/SessionProviderImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/SessionProviderImpl.java index ea95b8a..21cd35f 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/SessionProviderImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/session/SessionProviderImpl.java @@ -10,12 +10,12 @@ package org.smartboot.servlet.plugins.session; -import javax.servlet.SessionCookieConfig; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionContext; +import jakarta.servlet.SessionCookieConfig; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionContext; import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.provider.SessionProvider; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketPlugin.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketPlugin.java index 532a99c..0f6c556 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketPlugin.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketPlugin.java @@ -14,7 +14,7 @@ import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.plugins.Plugin; import org.smartboot.servlet.plugins.websocket.impl.WebsocketServerContainer; -import javax.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerContainer; /** * @author 三刀(zhengjunweimail@163.com) diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketProviderImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketProviderImpl.java index f192d7e..0e245fa 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketProviderImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/WebsocketProviderImpl.java @@ -25,9 +25,9 @@ import org.smartboot.servlet.provider.WebsocketProvider; import org.smartboot.socket.util.AttachKey; import org.smartboot.socket.util.Attachment; -import javax.websocket.PongMessage; -import javax.websocket.Session; -import javax.websocket.server.PathParam; +import jakarta.websocket.PongMessage; +import jakarta.websocket.Session; +import jakarta.websocket.server.PathParam; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/AnnotatedEndpoint.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/AnnotatedEndpoint.java index 5eea808..bb41978 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/AnnotatedEndpoint.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/AnnotatedEndpoint.java @@ -10,11 +10,11 @@ package org.smartboot.servlet.plugins.websocket.impl; -import javax.websocket.CloseReason; -import javax.websocket.Endpoint; -import javax.websocket.EndpointConfig; -import javax.websocket.Session; -import javax.websocket.server.PathParam; +import jakarta.websocket.CloseReason; +import jakarta.websocket.Endpoint; +import jakarta.websocket.EndpointConfig; +import jakarta.websocket.Session; +import jakarta.websocket.server.PathParam; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/HandlerWrapper.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/HandlerWrapper.java index e2bb99a..3d94483 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/HandlerWrapper.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/HandlerWrapper.java @@ -10,7 +10,7 @@ package org.smartboot.servlet.plugins.websocket.impl; -import javax.websocket.MessageHandler; +import jakarta.websocket.MessageHandler; /** * @author 三刀(zhengjunweimail@163.com) diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/SmartServerEndpointConfig.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/SmartServerEndpointConfig.java index 44d85d8..69bad2c 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/SmartServerEndpointConfig.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/SmartServerEndpointConfig.java @@ -10,12 +10,12 @@ package org.smartboot.servlet.plugins.websocket.impl; -import javax.websocket.OnClose; -import javax.websocket.OnError; -import javax.websocket.OnMessage; -import javax.websocket.OnOpen; -import javax.websocket.PongMessage; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.OnClose; +import jakarta.websocket.OnError; +import jakarta.websocket.OnMessage; +import jakarta.websocket.OnOpen; +import jakarta.websocket.PongMessage; +import jakarta.websocket.server.ServerEndpointConfig; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.util.ArrayList; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketServerContainer.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketServerContainer.java index 95cbcff..9d8e366 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketServerContainer.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketServerContainer.java @@ -10,14 +10,14 @@ package org.smartboot.servlet.plugins.websocket.impl; -import javax.websocket.ClientEndpointConfig; -import javax.websocket.DeploymentException; -import javax.websocket.Endpoint; -import javax.websocket.Extension; -import javax.websocket.Session; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpoint; -import javax.websocket.server.ServerEndpointConfig; +import jakarta.websocket.ClientEndpointConfig; +import jakarta.websocket.DeploymentException; +import jakarta.websocket.Endpoint; +import jakarta.websocket.Extension; +import jakarta.websocket.Session; +import jakarta.websocket.server.ServerContainer; +import jakarta.websocket.server.ServerEndpoint; +import jakarta.websocket.server.ServerEndpointConfig; import java.io.IOException; import java.net.URI; import java.util.ArrayList; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketSession.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketSession.java index e088aa3..590e526 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketSession.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WebsocketSession.java @@ -10,13 +10,13 @@ package org.smartboot.servlet.plugins.websocket.impl; -import javax.websocket.CloseReason; -import javax.websocket.Extension; -import javax.websocket.MessageHandler; -import javax.websocket.PongMessage; -import javax.websocket.RemoteEndpoint; -import javax.websocket.Session; -import javax.websocket.WebSocketContainer; +import jakarta.websocket.CloseReason; +import jakarta.websocket.Extension; +import jakarta.websocket.MessageHandler; +import jakarta.websocket.PongMessage; +import jakarta.websocket.RemoteEndpoint; +import jakarta.websocket.Session; +import jakarta.websocket.WebSocketContainer; import java.io.IOException; import java.net.URI; import java.security.Principal; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WsHandshakeRequest.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WsHandshakeRequest.java index 27ccdc9..737b98e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WsHandshakeRequest.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/websocket/impl/WsHandshakeRequest.java @@ -12,7 +12,7 @@ package org.smartboot.servlet.plugins.websocket.impl; import org.smartboot.http.server.WebSocketRequest; -import javax.websocket.server.HandshakeRequest; +import jakarta.websocket.server.HandshakeRequest; import java.net.URI; import java.security.Principal; import java.util.Arrays; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/provider/DispatcherProvider.java b/servlet-core/src/main/java/org/smartboot/servlet/provider/DispatcherProvider.java index ae65990..42ee42e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/provider/DispatcherProvider.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/provider/DispatcherProvider.java @@ -13,7 +13,7 @@ package org.smartboot.servlet.provider; import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.impl.ServletContextImpl; -import javax.servlet.RequestDispatcher; +import jakarta.servlet.RequestDispatcher; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/provider/SessionProvider.java b/servlet-core/src/main/java/org/smartboot/servlet/provider/SessionProvider.java index 07f94de..d34577d 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/provider/SessionProvider.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/provider/SessionProvider.java @@ -12,8 +12,8 @@ package org.smartboot.servlet.provider; import org.smartboot.servlet.impl.HttpServletRequestImpl; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockDispatcherProvider.java b/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockDispatcherProvider.java index d79b0e6..a45bae2 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockDispatcherProvider.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockDispatcherProvider.java @@ -15,7 +15,7 @@ import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.plugins.PluginException; import org.smartboot.servlet.provider.DispatcherProvider; -import javax.servlet.RequestDispatcher; +import jakarta.servlet.RequestDispatcher; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockSessionProvider.java b/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockSessionProvider.java index 295fa4b..8b187df 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockSessionProvider.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/sandbox/MockSessionProvider.java @@ -14,8 +14,8 @@ import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.plugins.PluginException; import org.smartboot.servlet.provider.SessionProvider; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; /** * @author 三刀 diff --git a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/DiskFileUpload.java b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/DiskFileUpload.java index 0ae15fc..28f78ae 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/DiskFileUpload.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/DiskFileUpload.java @@ -16,7 +16,7 @@ */ package org.smartboot.servlet.third.commons.fileupload; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.util.List; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/FileUploadBase.java b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/FileUploadBase.java index 86c6071..5c1e89b 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/FileUploadBase.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/FileUploadBase.java @@ -25,7 +25,7 @@ import org.smartboot.servlet.third.commons.fileupload.util.FileItemHeadersImpl; import org.smartboot.servlet.third.commons.fileupload.util.LimitedInputStream; import org.smartboot.servlet.third.commons.fileupload.util.Streams; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/FileCleanerCleanup.java b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/FileCleanerCleanup.java index 6c82019..2ad477c 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/FileCleanerCleanup.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/FileCleanerCleanup.java @@ -18,9 +18,9 @@ package org.smartboot.servlet.third.commons.fileupload.servlet; import org.smartboot.servlet.third.commons.io.FileCleaningTracker; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; /** * A servlet context listener, which ensures that the diff --git a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletFileUpload.java b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletFileUpload.java index e5124f7..5a85c04 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletFileUpload.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletFileUpload.java @@ -23,7 +23,7 @@ import org.smartboot.servlet.third.commons.fileupload.FileUpload; import org.smartboot.servlet.third.commons.fileupload.FileUploadBase; import org.smartboot.servlet.third.commons.fileupload.FileUploadException; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.List; import java.util.Map; diff --git a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletRequestContext.java b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletRequestContext.java index d260376..bb3dbe7 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletRequestContext.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/third/commons/fileupload/servlet/ServletRequestContext.java @@ -19,7 +19,7 @@ package org.smartboot.servlet.third.commons.fileupload.servlet; import org.smartboot.servlet.third.commons.fileupload.FileUploadBase; import org.smartboot.servlet.third.commons.fileupload.UploadContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; diff --git a/spring-boot-starter/pom.xml b/spring-boot-starter/pom.xml index cd62a3b..e886084 100644 --- a/spring-boot-starter/pom.xml +++ b/spring-boot-starter/pom.xml @@ -28,7 +28,7 @@ org.springframework.boot spring-boot - 2.7.11 + 3.0.6 true diff --git a/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartContainerInitializer.java b/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartContainerInitializer.java index 14934cb..52695ba 100644 --- a/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartContainerInitializer.java +++ b/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartContainerInitializer.java @@ -12,9 +12,9 @@ package org.smartboot.springboot.starter; import org.springframework.boot.web.servlet.ServletContextInitializer; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import java.util.Set; /** diff --git a/testsuite/pom.xml b/testsuite/pom.xml index 651528e..79a8d21 100644 --- a/testsuite/pom.xml +++ b/testsuite/pom.xml @@ -111,12 +111,6 @@ ${version.jsp-api} test - - javax.servlet - javax.servlet-api - ${version.servlet-api} - provided - com.h2database h2 diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java index 9a5ceb1..3a8aa92 100644 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java +++ b/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java @@ -36,7 +36,7 @@ import org.smartboot.servlet.ContainerRuntime; import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.conf.ServletInfo; -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; import java.io.File; import java.util.Map; import java.util.Set; diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/VersionUtil.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/VersionUtil.java deleted file mode 100644 index d841971..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/VersionUtil.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2011 Red Hat Inc. and/or its affiliates and other contributors - * as indicated by the @authors tag. All rights reserved. - * See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * Licensed 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.smartboot.servlet.testsuite; - -/** - * VersionUtil - * - * @author Aslak Knutsen - - */ -public class VersionUtil { - private VersionUtil() { - } - - public static class Version implements Comparable { - private final Integer major; - private final Integer minor; - - public Version(int major, int minor) { - this.major = major; - this.minor = minor; - } - - /** - * @return the major - */ - public int getMajor() { - return major; - } - - /** - * @return the minor - */ - public int getMinor() { - return minor; - } - - /* (non-Javadoc) - * @see java.lang.Comparable#compareTo(java.lang.Object) - */ - @Override - public int compareTo(Version o) { - int majorCompare = major.compareTo(o.major); - if (majorCompare == 0) { - return minor.compareTo(o.minor); - } - return majorCompare; - } - } - - private static final String expression = "([0-9]{1,5})\\.([0-9]{1,5}).*"; - - public static Version extract(String version) { - if (version == null || !version.matches(expression)) { - return new Version(0, 0); - } - - return new Version( - Integer.parseInt(version.replaceAll(expression, "$1")), - Integer.parseInt(version.replaceAll(expression, "$2"))); - } - - public static boolean isGreaterThenOrEqual(String greater, String then) { - return isGreaterThenOrEqual(extract(greater), extract(then)); - } - - public static boolean isGreaterThenOrEqual(Version greater, Version then) { - return greater.compareTo(then) >= 0; - } - - public static boolean isLessThenOrEqual(String less, String then) { - return isLessThenOrEqual(extract(less), extract(then)); - } - - public static boolean isLessThenOrEqual(Version less, Version then) { - return less.compareTo(then) <= 0; - } -} -- Gitee From 06be5c096c6c3ebcb8c159fc275123f2ee829f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Wed, 27 Sep 2023 19:44:20 +0800 Subject: [PATCH 2/6] ApplicationFilterRegistration#getServletNameMappings --- .../impl/ApplicationFilterRegistration.java | 9 ++-- .../servlet/impl/ServletContextImpl.java | 44 +++++++++++-------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java index 6f247be..0f1bdc1 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ApplicationFilterRegistration.java @@ -10,15 +10,14 @@ package org.smartboot.servlet.impl; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import org.smartboot.servlet.conf.DeploymentInfo; import org.smartboot.servlet.conf.FilterInfo; import org.smartboot.servlet.conf.FilterMappingInfo; -import org.smartboot.servlet.conf.ServletMappingInfo; import org.smartboot.servlet.enums.FilterMappingType; import org.smartboot.servlet.util.PathMatcherUtil; -import jakarta.servlet.DispatcherType; -import jakarta.servlet.FilterRegistration; import java.util.Collection; import java.util.EnumSet; import java.util.HashMap; @@ -66,8 +65,8 @@ public class ApplicationFilterRegistration @Override public Collection getServletNameMappings() { return context.getFilterMappings().stream() - .filter(filterMappingInfo -> filterMappingInfo.getMappingType() == FilterMappingType.URL) - .map(FilterMappingInfo::getServletUrlMapping).map(ServletMappingInfo::getMapping).collect(Collectors.toList()); + .filter(filterMappingInfo -> filterMappingInfo.getMappingType() == FilterMappingType.SERVLET) + .map(FilterMappingInfo::getServletNameMapping).collect(Collectors.toList()); } @Override diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java index a0be4a4..7a6bf71 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java @@ -10,18 +10,6 @@ package org.smartboot.servlet.impl; -import org.smartboot.http.common.logging.Logger; -import org.smartboot.http.common.logging.LoggerFactory; -import org.smartboot.http.common.utils.Mimetypes; -import org.smartboot.http.common.utils.StringUtils; -import org.smartboot.servlet.ServletContextRuntime; -import org.smartboot.servlet.conf.DeploymentInfo; -import org.smartboot.servlet.conf.FilterInfo; -import org.smartboot.servlet.conf.ServletInfo; -import org.smartboot.servlet.enums.ServletContextPathType; -import org.smartboot.servlet.exception.WrappedRuntimeException; -import org.smartboot.servlet.handler.HandlerPipeline; - import jakarta.servlet.Filter; import jakarta.servlet.FilterRegistration; import jakarta.servlet.RequestDispatcher; @@ -40,6 +28,18 @@ import jakarta.servlet.SessionTrackingMode; import jakarta.servlet.descriptor.JspConfigDescriptor; import jakarta.servlet.http.HttpSessionAttributeListener; import jakarta.servlet.http.HttpSessionListener; +import org.smartboot.http.common.logging.Logger; +import org.smartboot.http.common.logging.LoggerFactory; +import org.smartboot.http.common.utils.Mimetypes; +import org.smartboot.http.common.utils.StringUtils; +import org.smartboot.servlet.ServletContextRuntime; +import org.smartboot.servlet.conf.DeploymentInfo; +import org.smartboot.servlet.conf.FilterInfo; +import org.smartboot.servlet.conf.ServletInfo; +import org.smartboot.servlet.enums.ServletContextPathType; +import org.smartboot.servlet.exception.WrappedRuntimeException; +import org.smartboot.servlet.handler.HandlerPipeline; + import java.io.File; import java.io.InputStream; import java.net.MalformedURLException; @@ -329,7 +329,11 @@ public class ServletContextImpl implements ServletContext { @Override public ServletRegistration.Dynamic addServlet(String servletName, Class servletClass) { - return addServlet(servletName, createServlet(servletClass)); + try { + return addServlet(servletName, createServlet(servletClass)); + } catch (ServletException e) { + throw new RuntimeException(e); + } } @Override @@ -338,7 +342,7 @@ public class ServletContextImpl implements ServletContext { } @Override - public T createServlet(Class clazz) { + public T createServlet(Class clazz) throws ServletException { return newInstance(clazz); } @@ -388,11 +392,15 @@ public class ServletContextImpl implements ServletContext { @Override public FilterRegistration.Dynamic addFilter(String filterName, Class filterClass) { - return addFilter(filterName, createFilter(filterClass)); + try { + return addFilter(filterName, createFilter(filterClass)); + } catch (ServletException e) { + throw new RuntimeException(e); + } } @Override - public T createFilter(Class clazz) { + public T createFilter(Class clazz) throws ServletException { return newInstance(clazz); } @@ -470,11 +478,11 @@ public class ServletContextImpl implements ServletContext { return newInstance(clazz); } - private T newInstance(Class clazz) { + private T newInstance(Class clazz) throws ServletException { try { return clazz.newInstance(); } catch (InstantiationException | IllegalAccessException e) { - throw new WrappedRuntimeException(e); + throw new ServletException(e); } } -- Gitee From 530392e3318f202323bc502bfa34bab7d1229ed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Thu, 28 Sep 2023 08:47:42 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E8=BF=81=E7=A7=BBtestsuite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 +- testsuite/pom.xml | 307 -------------- .../AbstractJettyEmbeddedConfiguration.java | 286 ------------- .../testsuite/ArquillianAppProvider.java | 128 ------ .../testsuite/JettyEmbeddedConfiguration.java | 124 ------ .../testsuite/JettyEmbeddedContainer.java | 196 --------- .../testsuite/SmartServletExtension.java | 25 -- ...boss.arquillian.core.spi.LoadableExtension | 1 - .../testsuite/test/AsynccontextTest.java | 32 -- .../servlet/testsuite/test/DispatchTest.java | 16 - .../testsuite/test/DispatcherTypeTest.java | 16 - .../servlet/testsuite/test/DoFilterTest.java | 16 - .../testsuite/test/FilterChainTest.java | 16 - .../testsuite/test/FilterConfigTest.java | 16 - .../test/FilterRequestDispatcherTest.java | 16 - .../servlet/testsuite/test/FilterTest.java | 16 - .../testsuite/test/GenericFilterTest.java | 16 - .../testsuite/test/GenericServletTest.java | 30 -- .../testsuite/test/RegistrationTest.java | 16 - .../testsuite/test/RequestDispatcherTest.java | 16 - .../servlet/testsuite/test/ScEventTest.java | 16 - .../testsuite/test/ScattributeEventTest.java | 16 - .../test/ScattributeListener40Test.java | 16 - .../test/ScattributeListenerTest.java | 16 - .../test/ServletResponseWrapperTest.java | 32 -- .../test/SessionCookieConfigTest.java | 33 -- testsuite/src/test/resources/arquillian.xml | 48 --- .../src/test/resources/default.properties | 27 -- .../servlet_spec_fragment_web/webdefault.xml | 399 ------------------ .../test/resources/simplelogger.properties | 8 - 30 files changed, 10 insertions(+), 1905 deletions(-) delete mode 100644 testsuite/pom.xml delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/AbstractJettyEmbeddedConfiguration.java delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/ArquillianAppProvider.java delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedConfiguration.java delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java delete mode 100644 testsuite/src/main/java/org/smartboot/servlet/testsuite/SmartServletExtension.java delete mode 100644 testsuite/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/AsynccontextTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatchTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatcherTypeTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DoFilterTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterChainTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterConfigTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterRequestDispatcherTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericFilterTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericServletTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RegistrationTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RequestDispatcherTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScEventTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeEventTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListener40Test.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListenerTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ServletResponseWrapperTest.java delete mode 100644 testsuite/src/test/java/org/smartboot/servlet/testsuite/test/SessionCookieConfigTest.java delete mode 100644 testsuite/src/test/resources/arquillian.xml delete mode 100644 testsuite/src/test/resources/default.properties delete mode 100644 testsuite/src/test/resources/servlet_spec_fragment_web/webdefault.xml delete mode 100644 testsuite/src/test/resources/simplelogger.properties diff --git a/pom.xml b/pom.xml index dd4dd80..6339bf9 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,11 @@ jakarta.websocket-api 2.0.0 + + org.mortbay.jasper + apache-jsp + 10.1.7 + http://git.oschina.net/smartboot/smart-servlet @@ -231,11 +236,11 @@ - - - - - + + alimaven + aliyun maven + http://mirrors.cloud.tencent.com/nexus/repository/maven-public + sonatype-nexus-snapshots Sonatype Nexus Snapshots diff --git a/testsuite/pom.xml b/testsuite/pom.xml deleted file mode 100644 index 79a8d21..0000000 --- a/testsuite/pom.xml +++ /dev/null @@ -1,307 +0,0 @@ - - - - - org.smartboot.servlet.test - 1.0-SNAPSHOT - 4.0.0 - - testsuite - war - - 10.0.0-SNAPSHOT - 1.7.0.Alpha14 - 5.9.2 - 3.1.4 - 3.0.0-M7 - 3.1.8.Final - 2.0 - 2.2 - 2.2 - 4.0.1 - 2.1.214 - 2.0.0 - 2.0.6 - 11 - 11 - - -Xmx8g -Xms4g - - - - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - org.smartboot.servlet - servlet-core - 0.4 - - - org.junit - junit-bom - 5.9.3 - pom - import - - - org.jboss.shrinkwrap.resolver - shrinkwrap-resolver-bom - ${version.shrinkwrap} - test - pom - - - org.jboss.shrinkwrap.resolver - shrinkwrap-resolver-depchain - ${version.shrinkwrap} - pom - test - - - org.jboss.arquillian.container - arquillian-container-spi - ${version.arquillian_core} - - - org.jboss.arquillian.container - arquillian-container-test-spi - ${version.arquillian_core} - - - org.jboss.arquillian.junit5 - arquillian-junit5-container - ${version.arquillian_core} - test - - - - org.jboss.weld.servlet - weld-servlet-core - ${version.weld} - test - - - javax.enterprise - cdi-api - ${version.cdi-api} - test - - - org.glassfish.web - el-impl - ${version.glassfish.el} - test - - - javax.servlet.jsp - jsp-api - ${version.jsp-api} - test - - - com.h2database - h2 - ${version.h2} - test - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - org.slf4j - jul-to-slf4j - ${slf4j.version} - - - org.slf4j - slf4j-simple - ${slf4j.version} - - - org.hamcrest - hamcrest - 2.2 - - - jakarta.annotation - jakarta.annotation-api - 2.1.1 - - - - org.junit.jupiter - junit-jupiter - ${junit.version} - test - - - org.junit.vintage - junit-vintage-engine - ${junit.version} - test - - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - - - jakartatck - servlet - ${jakarta.tck.version} - - - commons-logging - * - - - org.glassfish.metro - * - - - - - jakartatck - libutil - ${jakarta.tck.version} - - - org.glassfish.metro - * - - - - - - - - - - - org.apache.maven.plugins - maven-clean-plugin - 3.2.0 - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.0 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.10.1 - - - org.apache.maven.plugins - maven-surefire-plugin - ${surefire.version} - - - ${fork.argLine} -Duser.language=en -Duser.country=US - -Djava.locale.providers=COMPAT,CLDR - -Djava.protocol.handler.pkgs=javax.net.ssl - -Djavax.net.ssl.keyStore=${project.build.testOutputDirectory}/certificates/clientcert.jks - -Djavax.net.ssl.keyStorePassword=changeit - -Djavax.net.ssl.trustStore=${project.build.directory}/cacerts.jks - - 15000 - - jakartatck:servlet - - - ${http2.timeout} - - - **/URLClient* - **/Client* - - - false - - - - org.basepom.maven - duplicate-finder-maven-plugin - 1.5.1 - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.3.0 - - - unpack - generate-test-resources - - unpack - - - - - jakartatck - libutil - jar - false - ${project.build.testOutputDirectory}/ - **/**cts_cert,**/**clientcert.jks,**/**clientcert.p12 - - - - - - - - org.codehaus.mojo - keytool-maven-plugin - 1.6 - - - - importCertificate - - process-test-resources - - - - - true - cts - CN=CTS, OU=Java Software, O=Sun Microsystems Inc., L=Burlington, ST=MA, C=US - ${project.build.testOutputDirectory}/certificates/cts_cert - JKS - ${project.build.directory}/cacerts.jks - changeit - changeit - true - - - - - \ No newline at end of file diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/AbstractJettyEmbeddedConfiguration.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/AbstractJettyEmbeddedConfiguration.java deleted file mode 100644 index 780bb6f..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/AbstractJettyEmbeddedConfiguration.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2010, Red Hat Middleware LLC, and individual contributors - * by the @authors tag. See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * Licensed 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.smartboot.servlet.testsuite; - -import org.jboss.arquillian.container.spi.ConfigurationException; -import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -/** - * A {@link ContainerConfiguration} common base for the Jetty Embedded - * containers - * - * @author Dan Allen - * @author Ales Justin - * @author Alex Soto - */ -public abstract class AbstractJettyEmbeddedConfiguration implements ContainerConfiguration { - private String bindAddress = "localhost"; - - private int bindHttpPort = 9090; - - private Map mimeTypes; - - private Map inferredEncodings; - - private int headerBufferSize = 0; - - private File realmProperties; - - /** - * List of server configuration classes that can be used for - * establishing the configuration tasks for the WebApp being deployed. - */ - private String configurationClasses; - - private String requestCookieCompliance; - - private String responseCookieCompliance; - - private boolean useArchiveNameAsContext; - - private boolean ssl; - - private boolean h2cEnabled; - - /** - * Path to keystore file - */ - private String keystorePath; - - private String keystorePassword; - - private String trustStorePath; - - private String trustStorePassword; - - private boolean sniRequired; - - private boolean sniHostCheck; - - private boolean needClientAuth; - - /* - * (non-Javadoc) - * - * @see org.jboss.arquillian.spi.client.container.ContainerConfiguration#validate() - */ - public void validate() throws ConfigurationException { - if (this.realmProperties != null) { - if (!this.realmProperties.exists()) { - throw new ConfigurationException( - String.format("Realm properties file %s must exists.", this.realmProperties.getAbsolutePath())); - } - if (this.realmProperties.isDirectory()) { - throw new ConfigurationException("Realm Properties should be a file and not a directory"); - } - } - } - - public int getBindHttpPort() { - return bindHttpPort; - } - - public void setBindHttpPort(int bindHttpPort) { - this.bindHttpPort = bindHttpPort; - } - - public String getBindAddress() { - return bindAddress; - } - - public void setBindAddress(String bindAddress) { - this.bindAddress = bindAddress; - } - - public String getConfigurationClasses() { - return configurationClasses; - } - - /** - * @param configurationClasses A comma separated list of fully qualified configuration classes - */ - public void setConfigurationClasses(String configurationClasses) { - this.configurationClasses = configurationClasses; - } - - public int getHeaderBufferSize() { - return this.headerBufferSize; - } - - public boolean isHeaderBufferSizeSet() { - return this.headerBufferSize > 0; - } - - public void setHeaderBufferSize(int headerBufferSize) { - this.headerBufferSize = headerBufferSize; - } - - public void setRealmProperties(String realmProperties) { - this.realmProperties = new File(realmProperties); - } - - public boolean isRealmPropertiesFileSet() { - return this.realmProperties != null; - } - - public File getRealmProperties() { - return realmProperties; - } - - public void setMimeTypes(String mimeTypes) { - this.mimeTypes = new HashMap<>(); - String[] splittedLines = mimeTypes.split(" "); - for (int i = 0; i < splittedLines.length; i += 2) { - if (i + 1 >= splittedLines.length) { - throw new ConfigurationException(String.format( - "Mime Type definition should follow the format [ ]*, for example js application/javascript but %s definition has been found.", - mimeTypes)); - } - this.mimeTypes.put(splittedLines[i], splittedLines[i + 1]); - } - } - - public boolean areMimeTypesSet() { - return this.mimeTypes != null; - } - - public Map getMimeTypes() { - return mimeTypes; - } - - public String getRequestCookieCompliance() { - return requestCookieCompliance; - } - - public void setRequestCookieCompliance(String requestCookieCompliance) { - this.requestCookieCompliance = requestCookieCompliance; - } - - public String getResponseCookieCompliance() { - return responseCookieCompliance; - } - - public void setResponseCookieCompliance(String responseCookieCompliance) { - this.responseCookieCompliance = responseCookieCompliance; - } - - public boolean isUseArchiveNameAsContext() { - return useArchiveNameAsContext; - } - - public void setUseArchiveNameAsContext(boolean useArchiveNameAsContext) { - this.useArchiveNameAsContext = useArchiveNameAsContext; - } - - public void setInferredEncodings(String inferredEncodings) { - this.inferredEncodings = new HashMap<>(); - String[] splittedLines = inferredEncodings.split(" "); - for (int i = 0; i < splittedLines.length; i += 2) { - if (i + 1 >= splittedLines.length) { - throw new ConfigurationException(String.format( - "Mime Type definition should follow the format [ ]*, for example js application/javascript but %s definition has been found.", - inferredEncodings)); - } - this.inferredEncodings.put(splittedLines[i], splittedLines[i + 1]); - } - } - - public boolean areInferredEncodings() { - return this.inferredEncodings != null; - } - - public Map getInferredEncodings() { - return inferredEncodings; - } - - public boolean isSsl() { - return ssl; - } - - public void setSsl(boolean ssl) { - this.ssl = ssl; - } - - public String getKeystorePath() { - return keystorePath; - } - - public void setKeystorePath(String keystorePath) { - this.keystorePath = keystorePath; - } - - public String getKeystorePassword() { - return keystorePassword; - } - - public void setKeystorePassword(String keystorePassword) { - this.keystorePassword = keystorePassword; - } - - public String getTrustStorePath() { - return trustStorePath; - } - - public void setTrustStorePath(String trustStorePath) { - this.trustStorePath = trustStorePath; - } - - public String getTrustStorePassword() { - return trustStorePassword; - } - - public void setTrustStorePassword(String trustStorePassword) { - this.trustStorePassword = trustStorePassword; - } - - public boolean isSniRequired() { - return sniRequired; - } - - public void setSniRequired(boolean sniRequired) { - this.sniRequired = sniRequired; - } - - public boolean isSniHostCheck() { - return sniHostCheck; - } - - public void setSniHostCheck(boolean sniHostCheck) { - this.sniHostCheck = sniHostCheck; - } - - public boolean isNeedClientAuth() { - return needClientAuth; - } - - public void setNeedClientAuth(boolean needClientAuth) { - this.needClientAuth = needClientAuth; - } - - public boolean isH2cEnabled() { - return h2cEnabled; - } - - public void setH2cEnabled(boolean h2cEnabled) { - this.h2cEnabled = h2cEnabled; - } -} - diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/ArquillianAppProvider.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/ArquillianAppProvider.java deleted file mode 100644 index ba7f64b..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/ArquillianAppProvider.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite; - -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.exporter.ZipExporter; -import org.smartboot.servlet.ContainerRuntime; -import org.smartboot.servlet.ServletContextRuntime; -import org.smartboot.servlet.util.WarUtil; - -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.logging.Logger; - -public class ArquillianAppProvider { - private static final Logger LOG = Logger.getLogger(ArquillianAppProvider.class.getName()); - - /** - * The prefix assigned to the temporary file where the archive is exported - */ - private static final String EXPORT_FILE_PREFIX = "export"; - - /** - * Directory into which we'll extract export the war files - */ - private static final File EXPORT_DIR; - - static { - /* - * Use of java.io.tmpdir Should be a last-resort fallback for temp directory. - * - * Use of java.io.tmpdir on CI systems is dangerous (overwrite possibility is extremely high) - * - * Use of java.io.tmpdir on Unix systems is unreliable (due to common /tmp dir cleanup processes) - */ - File systemDefaultTmpDir = new File(System.getProperty("java.io.tmpdir")); - - // If running under maven + surefire, use information provided by surefire. - String baseDirVal = System.getProperty("basedir"); - - File mavenTmpDir = null; - if (baseDirVal != null) { - File baseDir = new File(baseDirVal); - if (baseDir.exists() && baseDir.isDirectory()) { - File targetDir = new File(baseDir, "target"); - if (targetDir.exists() && targetDir.isDirectory()) { - mavenTmpDir = new File(targetDir, "arquillian-jetty-temp"); - mavenTmpDir.mkdirs(); - } - } - } - - if ((mavenTmpDir != null) && mavenTmpDir.exists() && mavenTmpDir.isDirectory()) { - EXPORT_DIR = mavenTmpDir; - } else { - EXPORT_DIR = systemDefaultTmpDir; - } - - // If the temp location doesn't exist or isn't a directory - if (!EXPORT_DIR.exists() || !EXPORT_DIR.isDirectory()) { - throw new IllegalStateException("Could not obtain export directory \"" + EXPORT_DIR.getAbsolutePath() + "\""); - } - } - - private final JettyEmbeddedConfiguration config; - private ContainerRuntime deploymentManager; - - public ArquillianAppProvider(JettyEmbeddedConfiguration config) { - this.config = config; - } - - protected ServletContextRuntime createApp(ContainerRuntime containerRuntime, final Archive archive) throws Exception { - String name = archive.getName(); - int extOff = name.lastIndexOf('.'); - if (extOff <= 0) { - throw new RuntimeException("Not a valid Web Archive filename: " + name); - } - String ext = name.substring(extOff).toLowerCase(); - if (!ext.equals(".war")) { - throw new RuntimeException("Not a recognized Web Archive: " + name); - } - name = name.substring(0, extOff); - - final File exported; - try { - if (this.config.isUseArchiveNameAsContext()) { - Path tmpDirectory = Files.createTempDirectory("arquillian-jetty"); - Path archivePath = tmpDirectory.resolveSibling(archive.getName()); - Files.deleteIfExists(archivePath); - exported = Files.createFile(archivePath).toFile(); - exported.deleteOnExit(); - } else { - // If this method returns successfully then it is guaranteed that: - // 1. The file denoted by the returned abstract pathname did not exist before this method was invoked, and - // 2. Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine. - exported = File.createTempFile(EXPORT_FILE_PREFIX, archive.getName(), EXPORT_DIR); - } - } catch (IOException e) { - throw new RuntimeException("Could not create temporary File in " + EXPORT_DIR + " to write exported archive", - e); - } - // We are overwriting the temporary file placeholder reserved by File#createTemplateFile() - archive.as(ZipExporter.class).exportTo(exported, true); - - // Mark to delete when we come down - // exported.deleteOnExit(); - - // Add the context - URI uri = exported.toURI(); - LOG.info("Webapp archive location: " + uri.toASCIIString()); - File dirFile = new File(exported.getParentFile(), name); - System.out.println("开始解压[" + name + "]..."); - WarUtil.unZip(exported, dirFile); - return containerRuntime.addRuntime(dirFile.getAbsolutePath(), "/" + name); - } - -} diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedConfiguration.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedConfiguration.java deleted file mode 100644 index 09aa9ab..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedConfiguration.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ -package org.smartboot.servlet.testsuite; - - -import org.smartboot.http.server.HttpServerConfiguration; - -import java.io.File; -import java.net.URI; - -/** - * A {@link org.jboss.arquillian.container.spi.client.container.ContainerConfiguration} implementation for the Jetty Embedded - * containers. - * - * @author Dan Allen - * @author Ales Justin - */ -public class JettyEmbeddedConfiguration extends AbstractJettyEmbeddedConfiguration { - public enum ClassLoaderBehavior { - /** - * Default behavior for Java Spec (server classloader, then webapp). - *

- * Also the default for Arquillian. - */ - JAVA_SPEC, - /** - * Default behavior for Servlet Spec (webapp classloader, then server) - */ - SERVLET_SPEC - } - - /** - * Classloader Search Order behavior. - *

- */ - private ClassLoaderBehavior classloaderBehavior = ClassLoaderBehavior.JAVA_SPEC; - - /** - * Optional override for the default servlet spec descriptor - */ - private URI defaultsDescriptor; - - /** - * Dump, to System.err, the server state tree after the server has successfully started up. - */ - private boolean dumpServerAfterStart = false; - - /** - * Optional HttpConfiguration for the ServerConnector that Arquillian - * creates. - */ - private HttpServerConfiguration httpConfiguration; - - /** - * Idle Timeout (in milliseconds) for active connections. - *

- * Default: 30,000ms - */ - private long idleTimeoutMillis = 30000; - - /** - * Base directory for all temp files that Jetty will manage. - */ - private File tempDirectory; - - public ClassLoaderBehavior getClassloaderBehavior() { - return classloaderBehavior; - } - - public URI getDefaultsDescriptor() { - return defaultsDescriptor; - } - - public HttpServerConfiguration getHttpConfiguration() { - return httpConfiguration; - } - - public long getIdleTimeoutMillis() { - return idleTimeoutMillis; - } - - public File getTempDirectory() { - return tempDirectory; - } - - public boolean hasDefaultsDescriptor() { - return (defaultsDescriptor != null); - } - - public boolean isDumpServerAfterStart() { - return dumpServerAfterStart; - } - - public void setClassloaderBehavior(ClassLoaderBehavior classloaderBehavior) { - this.classloaderBehavior = classloaderBehavior; - } - - public void setDefaultsDescriptor(URI defaultsDescriptor) { - this.defaultsDescriptor = defaultsDescriptor; - } - - public void setDumpServerAfterStart(boolean serverDumpAfterStart) { - this.dumpServerAfterStart = serverDumpAfterStart; - } - - public void setHttpConfiguration(HttpServerConfiguration httpConfiguration) { - this.httpConfiguration = httpConfiguration; - } - - public void setIdleTimeoutMillis(long milliseconds) { - this.idleTimeoutMillis = milliseconds; - } - - public void setTempDirectory(File tempDirectory) { - this.tempDirectory = tempDirectory; - } -} diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java deleted file mode 100644 index 3a8aa92..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/JettyEmbeddedContainer.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ -package org.smartboot.servlet.testsuite; - -import org.jboss.arquillian.container.spi.client.container.DeployableContainer; -import org.jboss.arquillian.container.spi.client.container.DeploymentException; -import org.jboss.arquillian.container.spi.client.container.LifecycleException; -import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription; -import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext; -import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData; -import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet; -import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped; -import org.jboss.arquillian.core.api.InstanceProducer; -import org.jboss.arquillian.core.api.annotation.ApplicationScoped; -import org.jboss.arquillian.core.api.annotation.Inject; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.descriptor.api.Descriptor; -import org.smartboot.http.common.utils.Mimetypes; -import org.smartboot.http.server.HttpBootstrap; -import org.smartboot.http.server.HttpRequest; -import org.smartboot.http.server.HttpResponse; -import org.smartboot.http.server.HttpServerHandler; -import org.smartboot.http.server.WebSocketHandler; -import org.smartboot.http.server.WebSocketRequest; -import org.smartboot.http.server.WebSocketResponse; -import org.smartboot.http.server.impl.WebSocketRequestImpl; -import org.smartboot.http.server.impl.WebSocketResponseImpl; -import org.smartboot.servlet.ContainerRuntime; -import org.smartboot.servlet.ServletContextRuntime; -import org.smartboot.servlet.conf.ServletInfo; - -import jakarta.servlet.ServletContext; -import java.io.File; -import java.util.Map; -import java.util.Set; -import java.util.logging.Logger; - -public class JettyEmbeddedContainer implements DeployableContainer { - private static final Logger log = Logger.getLogger(JettyEmbeddedContainer.class.getName()); - - private HttpBootstrap bootstrap; - private ContainerRuntime containerRuntime; - private ArquillianAppProvider appProvider; - - private JettyEmbeddedConfiguration containerConfig; - - private String listeningHost; - private int listeningPort; - - @Inject - @DeploymentScoped - private InstanceProducer webAppContextProducer; - - @Inject - @ApplicationScoped - private InstanceProducer servletContextInstanceProducer; - - /* - * (non-Javadoc) - * - * @see org.jboss.arquillian.spi.client.container.DeployableContainer#getConfigurationClass() - */ - public Class getConfigurationClass() { - return JettyEmbeddedConfiguration.class; - } - - /* - * (non-Javadoc) - * - * @see org.jboss.arquillian.spi.client.container.DeployableContainer#getDefaultProtocol() - */ - public ProtocolDescription getDefaultProtocol() { - // Jetty 9 is a Servlet 3.1 container. - // However, Arquillian "Protocol" actuall means "Packaging" - // TODO: Fix to servlet 3.1 (when available in arquillian) - return new ProtocolDescription("Servlet 3.0"); - } - - public void setup(JettyEmbeddedConfiguration containerConfig) { - this.containerConfig = containerConfig; - } - - public void start() throws LifecycleException { - appProvider = new ArquillianAppProvider(containerConfig); - this.bootstrap = new HttpBootstrap(); - containerRuntime = new ContainerRuntime(); - bootstrap.httpHandler(new HttpServerHandler() { - @Override - public void handle(HttpRequest request, HttpResponse response) { - containerRuntime.doHandle(request, response); - } - }).webSocketHandler(new WebSocketHandler() { - @Override - public void whenHeaderComplete(WebSocketRequestImpl request, WebSocketResponseImpl response) { - containerRuntime.onHeaderComplete(request.getRequest()); - } - - @Override - public void handle(WebSocketRequest request, WebSocketResponse response) { - containerRuntime.doHandle(request, response); - } - }); - bootstrap.configuration().bannerEnabled(false).readBufferSize(1024 * 1024).debug(true); - - try { - containerRuntime.start(this.bootstrap.configuration()); - } catch (Throwable e) { - throw new LifecycleException(e.getMessage(), e); - } - bootstrap.setPort(containerConfig.getBindHttpPort()).start(); - listeningHost = "127.0.0.1"; -// listeningHost = containerConfig.getBindAddress(); - listeningPort = containerConfig.getBindHttpPort(); - System.out.println("host: " + listeningHost + " port:" + listeningPort); - } - - private String getRealmName() { - File realmProperties = containerConfig.getRealmProperties(); - String fileName = realmProperties.getName(); - int index; - if ((index = fileName.indexOf('.')) > -1) { - fileName = fileName.substring(0, index); - } - return fileName; - } - - public void stop() throws LifecycleException { - try { - System.out.println("stop....."); - containerRuntime.stop(); - bootstrap.shutdown(); - } catch (Exception e) { - throw new LifecycleException("Could not stop container", e); - } - } - - /* - * (non-Javadoc) - * - * @see org.jboss.arquillian.spi.client.container.DeployableContainer#deploy(org.jboss.shrinkwrap.descriptor.api.Descriptor) - */ - public void deploy(Descriptor descriptor) throws DeploymentException { - throw new UnsupportedOperationException("Not implemented"); - } - - /* - * (non-Javadoc) - * - * @see org.jboss.arquillian.spi.client.container.DeployableContainer#undeploy(org.jboss.shrinkwrap.descriptor.api.Descriptor) - */ - public void undeploy(Descriptor descriptor) throws DeploymentException { - throw new UnsupportedOperationException("Not implemented"); - } - - public ProtocolMetaData deploy(final Archive archive) throws DeploymentException { - try { - ServletContextRuntime app = appProvider.createApp(containerRuntime, archive); - - app.start(); - - webAppContextProducer.set(app); - servletContextInstanceProducer.set(app.getServletContext()); - - HTTPContext httpContext = new HTTPContext(listeningHost, listeningPort); - for (ServletInfo servlet : app.getDeploymentInfo().getServlets().values()) { - httpContext.add(new Servlet(servlet.getServletName(), app.getContextPath())); - } - return new ProtocolMetaData().addContext(httpContext); - } catch (Throwable e) { - throw new DeploymentException("Could not deploy " + archive.getName(), e); - } - } - - private Mimetypes getMimeTypes() { - Map configuredMimeTypes = containerConfig.getMimeTypes(); - Set> entries = configuredMimeTypes.entrySet(); -// MimeTypes mimeTypes = new MimeTypes(); -// entries.forEach(stringStringEntry -> -// mimeTypes.addMimeMapping(stringStringEntry.getKey(), stringStringEntry.getValue())); - return Mimetypes.getInstance(); - } - - public void undeploy(Archive archive) throws DeploymentException { - ServletContextRuntime app = webAppContextProducer.get(); - if (app != null) { - app.stop(); - } - } -} diff --git a/testsuite/src/main/java/org/smartboot/servlet/testsuite/SmartServletExtension.java b/testsuite/src/main/java/org/smartboot/servlet/testsuite/SmartServletExtension.java deleted file mode 100644 index dcb1896..0000000 --- a/testsuite/src/main/java/org/smartboot/servlet/testsuite/SmartServletExtension.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ -package org.smartboot.servlet.testsuite; - -import org.jboss.arquillian.container.spi.client.container.DeployableContainer; -import org.jboss.arquillian.core.spi.LoadableExtension; - -/** - * Jetty Embedded 10.x extension. - * - * @author Aslak Knutsen - */ -public class SmartServletExtension implements LoadableExtension { - @Override - public void register(ExtensionBuilder builder) { - builder.service(DeployableContainer.class, JettyEmbeddedContainer.class); - } -} diff --git a/testsuite/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/testsuite/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension deleted file mode 100644 index 1b3da30..0000000 --- a/testsuite/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension +++ /dev/null @@ -1 +0,0 @@ -org.smartboot.servlet.testsuite.SmartServletExtension \ No newline at end of file diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/AsynccontextTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/AsynccontextTest.java deleted file mode 100644 index d48ace1..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/AsynccontextTest.java +++ /dev/null @@ -1,32 +0,0 @@ -///* -// * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] -// * -// * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 -// * -// * Enterprise users are required to use this project reasonably -// * and legally in accordance with the AGPL-3.0 open source agreement -// * without special permission from the smartboot organization. -// */ -// -//package org.smartboot.servlet.testsuite.test; -// -//import com.sun.ts.tests.servlet.api.jakarta_servlet.asynccontext.URLClient; -//import org.junit.jupiter.api.Test; -//import org.slf4j.LoggerFactory; -// -///** -// * Unit test for simple App. -// */ -//public class AsynccontextTest extends URLClient { -// -// @Test -// public void foo() throws Exception { -// // -// } -// -// @Test -// public void bar() throws Exception { -// LoggerFactory loggerFactory; -// } -// -//} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatchTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatchTest.java deleted file mode 100644 index ea361f7..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatchTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.dispatchtest.URLClient; - -public class DispatchTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatcherTypeTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatcherTypeTest.java deleted file mode 100644 index 0c242d2..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DispatcherTypeTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.dispatchertype.URLClient; - -public class DispatcherTypeTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DoFilterTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DoFilterTest.java deleted file mode 100644 index ebd6581..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/DoFilterTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.dofilter.URLClient; - -public class DoFilterTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterChainTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterChainTest.java deleted file mode 100644 index 964cd52..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterChainTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.filterchain.URLClient; - -public class FilterChainTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterConfigTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterConfigTest.java deleted file mode 100644 index 93340f0..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterConfigTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.filterconfig.URLClient; - -public class FilterConfigTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterRequestDispatcherTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterRequestDispatcherTest.java deleted file mode 100644 index d339007..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterRequestDispatcherTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.filterrequestdispatcher.URLClient; - -public class FilterRequestDispatcherTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterTest.java deleted file mode 100644 index c3dd5b9..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/FilterTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.filter.URLClient; - -public class FilterTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericFilterTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericFilterTest.java deleted file mode 100644 index 76e525f..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericFilterTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.genericfilter.URLClient; - -public class GenericFilterTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericServletTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericServletTest.java deleted file mode 100644 index 797d71a..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/GenericServletTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.genericservlet.URLClient; -import org.junit.jupiter.api.Test; - -import java.util.Properties; - -public class GenericServletTest extends URLClient { - @Test - public void init_ServletConfigServletExceptionTest() throws Exception { - String testName = "init_ServletConfigServletExceptionTest"; - TEST_PROPS.setProperty("testname", testName); - TEST_PROPS.setProperty("status-code", "500"); - Properties var10000 = TEST_PROPS; - String var10002 = this.getContextRoot(); - var10000.setProperty("request", "GET " + var10002 + "/" + testName + " HTTP/1.1"); - TEST_PROPS.setProperty("search_string", "Status Code: 500|Exception: javax.servlet.ServletException: in init of Init_ServletConfigServletExceptionTestServlet"); - this.invoke(); - } -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RegistrationTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RegistrationTest.java deleted file mode 100644 index 67f1829..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RegistrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.registration.URLClient; - -public class RegistrationTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RequestDispatcherTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RequestDispatcherTest.java deleted file mode 100644 index d45c937..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/RequestDispatcherTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.requestdispatcher.URLClient; - -public class RequestDispatcherTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScEventTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScEventTest.java deleted file mode 100644 index 9560f25..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScEventTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.scevent.URLClient; - -public class ScEventTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeEventTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeEventTest.java deleted file mode 100644 index 6bac256..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeEventTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.scattributeevent.URLClient; - -public class ScattributeEventTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListener40Test.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListener40Test.java deleted file mode 100644 index 4cad678..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListener40Test.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.scattributelistener40.URLClient; - -public class ScattributeListener40Test extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListenerTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListenerTest.java deleted file mode 100644 index 1230ac6..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ScattributeListenerTest.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.scattributelistener.URLClient; - -public class ScattributeListenerTest extends URLClient { -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ServletResponseWrapperTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ServletResponseWrapperTest.java deleted file mode 100644 index 2ba01db..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/ServletResponseWrapperTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet.servletresponsewrapper.URLClient; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -/** - * Unit test for simple App. - */ -public class ServletResponseWrapperTest extends URLClient { - - @Test - public void foo() throws Exception { - // - } - - @Test - public void bar() throws Exception { - LoggerFactory loggerFactory; - } - -} diff --git a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/SessionCookieConfigTest.java b/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/SessionCookieConfigTest.java deleted file mode 100644 index 744cc55..0000000 --- a/testsuite/src/test/java/org/smartboot/servlet/testsuite/test/SessionCookieConfigTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] - * - * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 - * - * Enterprise users are required to use this project reasonably - * and legally in accordance with the AGPL-3.0 open source agreement - * without special permission from the smartboot organization. - */ - -package org.smartboot.servlet.testsuite.test; - -import com.sun.ts.tests.servlet.api.jakarta_servlet_http.sessioncookieconfig.URLClient; -import org.junit.jupiter.api.Test; -import org.slf4j.LoggerFactory; - -/** - * Unit test for simple App. - */ -public class SessionCookieConfigTest extends URLClient // com.sun.ts.tests.servlet.api.jakarta_servlet_http.sessioncookieconfig.URLClient // com.sun.ts.tests.servlet.spec.security.annotations.Client -{ - - @Test - public void foo() throws Exception { - // - } - - @Test - public void bar() throws Exception { - LoggerFactory loggerFactory; - } - -} diff --git a/testsuite/src/test/resources/arquillian.xml b/testsuite/src/test/resources/arquillian.xml deleted file mode 100644 index 0514924..0000000 --- a/testsuite/src/test/resources/arquillian.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - 8080 - RFC2965 - RFC2965 - src/test/resources/default.properties - true - - text/html iso-8859-1 - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/testsuite/src/test/resources/default.properties b/testsuite/src/test/resources/default.properties deleted file mode 100644 index 1a44116..0000000 --- a/testsuite/src/test/resources/default.properties +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file defines users passwords and roles for a HashUserRealm -# -# The format is -# : [, ...] -# -# Passwords may be clear text, obfuscated or checksummed. The class -# org.eclipse.util.Password should be used to generate obfuscated -# passwords or password checksums -# -# If DIGEST Authentication is used, the password must be in a recoverable -# format, either plain text or OBF:. -# -jetty: MD5:164c88b302622e17050af52c89945d44,user -admin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,admin,user -other: OBF:1xmk1w261u9r1w1c1xmq,user -plain: plain,user -user: password,user - -# This entry is for digest auth. The credential is a MD5 hash of username:realmname:password -digest: MD5:6e120743ad67abfbc385bc2bb754e297,user - -j2ee: j2ee,Administrator,Employee -javajoe: javajoe,VP,Manager - -# CN=CTS, OU=Java Software, O=Sun Microsystems Inc., L=Burlington, ST=MA, C=US -CN\=CTS,\ OU\=Java\ Software,\ O\=Sun\ Microsystems\ Inc.,\ L\=Burlington,\ ST\=MA,\ C\=US=,,Administrator diff --git a/testsuite/src/test/resources/servlet_spec_fragment_web/webdefault.xml b/testsuite/src/test/resources/servlet_spec_fragment_web/webdefault.xml deleted file mode 100644 index e653db5..0000000 --- a/testsuite/src/test/resources/servlet_spec_fragment_web/webdefault.xml +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - Default web.xml file. - This file is applied to a Web application before its own WEB_INF/web.xml file - - - - - - - - org.eclipse.jetty.servlet.listener.ELContextCleaner - - - - - - - - org.eclipse.jetty.servlet.listener.IntrospectorCleaner - - - - - - - - - - - - default - org.eclipse.jetty.servlet.DefaultServlet - - acceptRanges - true - - - dirAllowed - true - - - welcomeServlets - exact - - - redirectWelcome - false - - - maxCacheSize - 256000000 - - - maxCachedFileSize - 200000000 - - - maxCachedFiles - 2048 - - - etags - false - - - useFileMappedBuffer - true - - 0 - - - - default - / - - - - - - - - - - - - - - - jsp - org.eclipse.jetty.jsp.JettyJspServlet - - xpoweredBy - false - - - compilerTargetVM - 1.8 - - - compilerSourceVM - 1.8 - - 0 - - - - jsp - *.jsp - *.jspf - *.jspx - *.xsp - *.JSP - *.JSPF - *.JSPX - *.XSP - - - - - - - - 30 - - - - - - - - index.html - index.htm - index.jsp - - - - - - - - ar - ISO-8859-6 - - - be - ISO-8859-5 - - - bg - ISO-8859-5 - - - ca - ISO-8859-1 - - - cs - ISO-8859-2 - - - da - ISO-8859-1 - - - de - ISO-8859-1 - - - el - ISO-8859-7 - - - en - ISO-8859-1 - - - es - ISO-8859-1 - - - et - ISO-8859-1 - - - fi - ISO-8859-1 - - - fr - ISO-8859-1 - - - hr - ISO-8859-2 - - - hu - ISO-8859-2 - - - is - ISO-8859-1 - - - it - ISO-8859-1 - - - iw - ISO-8859-8 - - - ja - Shift_JIS - - - ko - EUC-KR - - - lt - ISO-8859-2 - - - lv - ISO-8859-2 - - - mk - ISO-8859-5 - - - nl - ISO-8859-1 - - - no - ISO-8859-1 - - - pl - ISO-8859-2 - - - pt - ISO-8859-1 - - - ro - ISO-8859-2 - - - ru - ISO-8859-5 - - - sh - ISO-8859-5 - - - sk - ISO-8859-2 - - - sl - ISO-8859-2 - - - sq - ISO-8859-2 - - - sr - ISO-8859-5 - - - sv - ISO-8859-1 - - - tr - ISO-8859-9 - - - uk - ISO-8859-5 - - - zh - GB2312 - - - zh_TW - Big5 - - - - - - - - - Disable TRACE - / - TRACE - - - - - - Enable everything but TRACE - / - TRACE - - - - - diff --git a/testsuite/src/test/resources/simplelogger.properties b/testsuite/src/test/resources/simplelogger.properties deleted file mode 100644 index c42caf0..0000000 --- a/testsuite/src/test/resources/simplelogger.properties +++ /dev/null @@ -1,8 +0,0 @@ -org.slf4j.simpleLogger.defaultLogLevel=info -#org.slf4j.simpleLogger.log.org.eclipse.jetty=debug -#org.slf4j.simpleLogger.log.org.eclipse.jetty.security=info -#org.slf4j.simpleLogger.log.org.eclipse.jetty.annotations=debug -org.slf4j.simpleLogger.log.org.eclipse.jetty.io=info -org.slf4j.simpleLogger.log.org.eclipse.jetty.server=info -org.slf4j.simpleLogger.log.org.eclipse.jetty.util=info - -- Gitee From d51d5746e7d5fcff19f2748f8dd1279c566804cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Thu, 28 Sep 2023 17:09:33 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 -- servlet-core/pom.xml | 6 ++ .../smartboot/servlet/ContainerRuntime.java | 9 +-- .../org/smartboot/servlet/DefaultServlet.java | 75 +++++++++---------- .../servlet/ServletContextRuntime.java | 42 +++++++---- .../servlet/handler/FilterMatchHandler.java | 19 ++--- .../smartboot/servlet/handler/Handler.java | 7 +- .../servlet/handler/HandlerPipeline.java | 5 +- .../servlet/handler/ServletMatchHandler.java | 4 +- .../ServletRequestListenerHandler.java | 10 ++- .../handler/ServletServiceHandler.java | 27 +++---- .../servlet/impl/AsyncContextImpl.java | 15 ++-- .../servlet/impl/HttpServletResponseImpl.java | 19 ++++- .../servlet/impl/JspConfigDescriptorImpl.java | 34 +++++++++ .../servlet/impl/ServletContextImpl.java | 34 +++++++-- .../dispatcher/RequestDispatcherImpl.java | 14 ++-- ...akarta.servlet.ServletContainerInitializer | 1 + .../maven/plugin/servlet/Starter.java | 2 +- .../starter/SmartServletServer.java | 2 +- 19 files changed, 203 insertions(+), 127 deletions(-) create mode 100644 servlet-core/src/main/java/org/smartboot/servlet/impl/JspConfigDescriptorImpl.java create mode 100644 servlet-core/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer diff --git a/pom.xml b/pom.xml index 6339bf9..138a2ee 100644 --- a/pom.xml +++ b/pom.xml @@ -55,11 +55,6 @@ jakarta.websocket-api 2.0.0 - - org.mortbay.jasper - apache-jsp - 10.1.7 - http://git.oschina.net/smartboot/smart-servlet diff --git a/servlet-core/pom.xml b/servlet-core/pom.xml index d23124e..dd09a1b 100644 --- a/servlet-core/pom.xml +++ b/servlet-core/pom.xml @@ -41,6 +41,12 @@ jakarta.websocket jakarta.websocket-api + + + org.mortbay.jasper + apache-jsp + 10.1.5 + \ No newline at end of file diff --git a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java index 83728c2..2753bdb 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java @@ -10,6 +10,9 @@ package org.smartboot.servlet; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletResponse; import org.smartboot.http.common.logging.Logger; import org.smartboot.http.common.logging.LoggerFactory; import org.smartboot.http.common.utils.StringUtils; @@ -33,9 +36,6 @@ import org.smartboot.servlet.impl.HttpServletResponseImpl; import org.smartboot.servlet.impl.ServletContextImpl; import org.smartboot.servlet.plugins.Plugin; -import jakarta.servlet.DispatcherType; -import jakarta.servlet.ServletContainerInitializer; -import jakarta.servlet.ServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -225,12 +225,9 @@ public class ContainerRuntime { ServletContextImpl servletContext = runtime.getServletContext(); Thread.currentThread().setContextClassLoader(servletContext.getClassLoader()); runtime.getWebsocketProvider().doHandle(runtime, request, response); - } catch (Exception e) { - throw new WrappedRuntimeException(e); } finally { Thread.currentThread().setContextClassLoader(classLoader); } - } /** diff --git a/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java b/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java index 714ff11..2db171f 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/DefaultServlet.java @@ -11,6 +11,13 @@ package org.smartboot.servlet; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.smartboot.http.common.enums.HeaderNameEnum; import org.smartboot.http.common.enums.HttpMethodEnum; import org.smartboot.http.common.enums.HttpStatus; @@ -18,15 +25,9 @@ import org.smartboot.http.common.logging.Logger; import org.smartboot.http.common.logging.LoggerFactory; import org.smartboot.http.common.utils.Mimetypes; import org.smartboot.http.common.utils.StringUtils; +import org.smartboot.servlet.conf.DeploymentInfo; import org.smartboot.servlet.exception.WrappedRuntimeException; -import jakarta.servlet.DispatcherType; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -38,10 +39,8 @@ import java.net.URL; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.text.SimpleDateFormat; -import java.util.Collections; import java.util.Date; import java.util.Enumeration; -import java.util.List; import java.util.Locale; /** @@ -69,15 +68,11 @@ class DefaultServlet extends HttpServlet { /** * 默认页面 */ - private final List welcomeFiles; private long faviconModifyTime; + private DeploymentInfo deploymentInfo; - public DefaultServlet() { - this.welcomeFiles = Collections.emptyList(); - } - - public DefaultServlet(List welcomeFiles) { - this.welcomeFiles = welcomeFiles; + public DefaultServlet(DeploymentInfo deploymentInfo) { + this.deploymentInfo = deploymentInfo; } @Override @@ -187,33 +182,33 @@ class DefaultServlet extends HttpServlet { */ private void forwardWelcome(HttpServletRequest request, HttpServletResponse response, String method) throws URISyntaxException, IOException, ServletException { String welcome = matchForwardWelcome(request); + if (StringUtils.isNotBlank(welcome)) { + //找到有效welcome file,执行服务端跳转 + LOGGER.info("执行 welcome 服务端跳转..."); + request.getRequestDispatcher(welcome).forward(request, response); + return; + } // 404 - if (welcome == null) { - LOGGER.info("file:" + request.getRequestURI() + " not found!"); - //《Servlet3.1规范中文版》9.3 include 方法 - //如果默认的 servlet 是 RequestDispatch.include()的目标 servlet, - // 而且请求的资源不存在,那么默认的 servlet 必须抛出 FileNotFoundException 异常。 - // 如果这个异常没有被捕获和处理,以及响应还未􏰀交,则响应状态 码必须被设置为 500。 - if (request.getDispatcherType() == DispatcherType.INCLUDE) { - response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase()); - throw new FileNotFoundException(); - } - response.sendError(HttpStatus.NOT_FOUND.value(), HttpStatus.NOT_FOUND.getReasonPhrase()); - response.setHeader(HeaderNameEnum.CONTENT_TYPE.getName(), "text/html; charset=utf-8"); + LOGGER.info("file:" + request.getRequestURI() + " not found!"); + //《Servlet3.1规范中文版》9.3 include 方法 + //如果默认的 servlet 是 RequestDispatch.include()的目标 servlet, + // 而且请求的资源不存在,那么默认的 servlet 必须抛出 FileNotFoundException 异常。 + // 如果这个异常没有被捕获和处理,以及响应还未􏰀交,则响应状态 码必须被设置为 500。 + if (request.getDispatcherType() == DispatcherType.INCLUDE) { + response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase()); + throw new FileNotFoundException(); + } - if (!HttpMethodEnum.HEAD.getMethod().equals(method)) { - response.getOutputStream().write(URL_404.getBytes()); - } + response.sendError(HttpStatus.NOT_FOUND.value(), HttpStatus.NOT_FOUND.getReasonPhrase()); + String location = deploymentInfo.getErrorPageLocation(HttpStatus.NOT_FOUND.value()); + if (StringUtils.isNotBlank(location)) { + request.getRequestDispatcher(location).forward(request, response); return; } - if (welcome.endsWith("/")) { - // 以"/"通过302跳转触发 welcome file逻辑 - LOGGER.info("执行 welcome 302跳转..."); - response.sendRedirect(welcome); - } else { - //找到有效welcome file,执行服务端跳转 - LOGGER.info("执行 welcome 服务端跳转..."); - request.getRequestDispatcher(welcome).forward(request, response); + response.setHeader(HeaderNameEnum.CONTENT_TYPE.getName(), "text/html; charset=utf-8"); + + if (!HttpMethodEnum.HEAD.getMethod().equals(method)) { + response.getOutputStream().write(URL_404.getBytes()); } } @@ -221,7 +216,7 @@ class DefaultServlet extends HttpServlet { String requestUri = request.getRequestURI(); ServletContext servletContext = request.getServletContext(); if (requestUri.endsWith("/")) { - for (String file : welcomeFiles) { + for (String file : deploymentInfo.getWelcomeFiles()) { String uri = requestUri.substring(request.getContextPath().length()); URL welcomeUrl = servletContext.getResource(uri + file); if (welcomeUrl != null) { diff --git a/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java b/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java index 4c3ec7b..bbe636e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/ServletContextRuntime.java @@ -10,6 +10,21 @@ package org.smartboot.servlet; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletException; +import jakarta.servlet.UnavailableException; +import jakarta.servlet.annotation.WebListener; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.jsp.JspFactory; +import org.apache.jasper.servlet.JspServlet; import org.smartboot.http.common.enums.HttpStatus; import org.smartboot.http.common.logging.Logger; import org.smartboot.http.common.logging.LoggerFactory; @@ -28,19 +43,6 @@ import org.smartboot.servlet.provider.SessionProvider; import org.smartboot.servlet.provider.WebsocketProvider; import org.smartboot.servlet.sandbox.SandBox; -import jakarta.servlet.Filter; -import jakarta.servlet.FilterConfig; -import jakarta.servlet.RequestDispatcher; -import jakarta.servlet.Servlet; -import jakarta.servlet.ServletConfig; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletContextEvent; -import jakarta.servlet.ServletException; -import jakarta.servlet.UnavailableException; -import jakarta.servlet.annotation.WebListener; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -173,7 +175,10 @@ public class ServletContextRuntime { for (ServletInfo servletInfo : deploymentInfo.getServlets().values()) { if (!servletInfo.isDynamic()) { if (servletInfo.getJspFile() != null) { - throw new UnsupportedOperationException(); + LOGGER.error("unSupport jsp"); + servletInfo.setServlet(new JspServlet()); + servletInfo.addInitParam("jspFile", servletInfo.getJspFile()); + continue; } Servlet servlet = (Servlet) deploymentInfo.getClassLoader().loadClass(servletInfo.getServletClass()).newInstance(); servletInfo.setServlet(servlet); @@ -183,7 +188,7 @@ public class ServletContextRuntime { if (!deploymentInfo.getServlets().containsKey(ServletInfo.DEFAULT_SERVLET_NAME)) { ServletInfo servletInfo = new ServletInfo(); servletInfo.setServletName(ServletInfo.DEFAULT_SERVLET_NAME); - servletInfo.setServlet(new DefaultServlet(deploymentInfo.getWelcomeFiles())); + servletInfo.setServlet(new DefaultServlet(deploymentInfo)); deploymentInfo.addServlet(servletInfo); } } @@ -221,6 +226,11 @@ public class ServletContextRuntime { deploymentInfo.setHandlesTypesLoader(null); System.out.println("scanHandleTypes use :" + (System.currentTimeMillis() - start)); } + ServletInfo jspServletInfo = new ServletInfo(); + jspServletInfo.setServletClass(JspServlet.class.getName()); + jspServletInfo.setServletName("jsp"); + jspServletInfo.addMapping("*.jsp"); + deploymentInfo.addServlet(jspServletInfo); for (ServletContainerInitializerInfo servletContainerInitializer : deploymentInfo.getServletContainerInitializers()) { servletContainerInitializer.getServletContainerInitializer().onStartup(servletContainerInitializer.getHandlesTypes(), servletContext); } @@ -249,7 +259,7 @@ public class ServletContextRuntime { } }); } catch (ServletException e) { -// e.printStackTrace(); + e.printStackTrace(); String location = deploymentInfo.getErrorPageLocation(e); if (location == null) { location = deploymentInfo.getErrorPageLocation(HttpStatus.INTERNAL_SERVER_ERROR.value()); diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java index 586c45a..5d5e45d 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/FilterMatchHandler.java @@ -10,14 +10,6 @@ package org.smartboot.servlet.handler; -import org.smartboot.http.common.utils.StringUtils; -import org.smartboot.servlet.HandlerContext; -import org.smartboot.servlet.conf.FilterInfo; -import org.smartboot.servlet.conf.FilterMappingInfo; -import org.smartboot.servlet.enums.FilterMappingType; -import org.smartboot.servlet.exception.WrappedRuntimeException; -import org.smartboot.servlet.util.PathMatcherUtil; - import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.Servlet; @@ -26,6 +18,13 @@ import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; +import org.smartboot.http.common.utils.StringUtils; +import org.smartboot.servlet.HandlerContext; +import org.smartboot.servlet.conf.FilterInfo; +import org.smartboot.servlet.conf.FilterMappingInfo; +import org.smartboot.servlet.enums.FilterMappingType; +import org.smartboot.servlet.util.PathMatcherUtil; + import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -56,7 +55,7 @@ public class FilterMatchHandler extends Handler { private final ThreadLocal filterChainThreadLocal = ThreadLocal.withInitial(FilterChainImpl::new); @Override - public void handleRequest(HandlerContext handlerContext) { + public void handleRequest(HandlerContext handlerContext) throws ServletException, IOException { //查找缓存中的 Filter 集合 List filters = filterCacheFilterList(handlerContext); if (filters == null) { @@ -70,8 +69,6 @@ public class FilterMatchHandler extends Handler { filterChain.init(filters, handlerContext); try { filterChain.doFilter(handlerContext.getRequest(), handlerContext.getResponse()); - } catch (IOException | ServletException e) { - throw new WrappedRuntimeException(e); } finally { filterChain.init(null, null); } diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/Handler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/Handler.java index 1ab547d..7d16d2a 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/Handler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/Handler.java @@ -10,8 +10,11 @@ package org.smartboot.servlet.handler; +import jakarta.servlet.ServletException; import org.smartboot.servlet.HandlerContext; +import java.io.IOException; + /** * 请求处理器 * @@ -30,7 +33,7 @@ abstract class Handler { * @param handlerContext * @throws Exception */ - public abstract void handleRequest(HandlerContext handlerContext); + public abstract void handleRequest(HandlerContext handlerContext) throws ServletException, IOException; /** * 执行下一层处理器 @@ -38,7 +41,7 @@ abstract class Handler { * @param handlerContext * @throws Exception */ - protected final void doNext(HandlerContext handlerContext) { + protected final void doNext(HandlerContext handlerContext) throws ServletException, IOException { if (nextHandler != null) { nextHandler.handleRequest(handlerContext); } diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/HandlerPipeline.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/HandlerPipeline.java index 1d24089..408a72e 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/HandlerPipeline.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/HandlerPipeline.java @@ -10,8 +10,11 @@ package org.smartboot.servlet.handler; +import jakarta.servlet.ServletException; import org.smartboot.servlet.HandlerContext; +import java.io.IOException; + /** * @author 三刀 * @version V1.0 , 2019/11/3 @@ -42,7 +45,7 @@ public final class HandlerPipeline extends Handler { } @Override - public void handleRequest(HandlerContext handlerContext) { + public void handleRequest(HandlerContext handlerContext) throws ServletException, IOException { nextHandler.handleRequest(handlerContext); } } diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java index 0288cc1..a534ec8 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletMatchHandler.java @@ -20,6 +20,8 @@ import org.smartboot.servlet.util.PathMatcherUtil; import jakarta.servlet.Servlet; import jakarta.servlet.ServletException; + +import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -36,7 +38,7 @@ public class ServletMatchHandler extends Handler { private final Map cacheServletMap = new ConcurrentHashMap<>(); @Override - public void handleRequest(HandlerContext handlerContext) { + public void handleRequest(HandlerContext handlerContext) throws ServletException, IOException { ServletContextImpl servletContext = handlerContext.getServletContext(); String contextPath = servletContext.getContextPath(); Map servletInfoMap = handlerContext.getServletContext().getDeploymentInfo().getServlets(); diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java index b6006b0..9802bf6 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletRequestListenerHandler.java @@ -10,13 +10,15 @@ package org.smartboot.servlet.handler; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequestEvent; +import jakarta.servlet.ServletRequestListener; import org.smartboot.http.common.logging.Logger; import org.smartboot.http.common.logging.LoggerFactory; import org.smartboot.servlet.HandlerContext; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletRequestEvent; -import jakarta.servlet.ServletRequestListener; +import java.io.IOException; import java.util.List; /** @@ -27,7 +29,7 @@ public class ServletRequestListenerHandler extends Handler { private static final Logger LOGGER = LoggerFactory.getLogger(ServletRequestListenerHandler.class); @Override - public void handleRequest(HandlerContext handlerContext) { + public void handleRequest(HandlerContext handlerContext) throws ServletException, IOException { ServletContext servletContext = handlerContext.getServletContext(); List servletRequestListeners = handlerContext.getServletContext().getDeploymentInfo().getServletRequestListeners(); ServletRequestEvent servletRequestEvent = servletRequestListeners.isEmpty() ? null : new ServletRequestEvent(servletContext, handlerContext.getRequest()); diff --git a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java index 751aa50..11e4274 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/handler/ServletServiceHandler.java @@ -10,13 +10,12 @@ package org.smartboot.servlet.handler; -import org.smartboot.servlet.HandlerContext; -import org.smartboot.servlet.conf.ServletInfo; -import org.smartboot.servlet.exception.WrappedRuntimeException; - import jakarta.servlet.ServletException; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; +import org.smartboot.servlet.HandlerContext; +import org.smartboot.servlet.conf.ServletInfo; + import java.io.IOException; /** @@ -28,18 +27,14 @@ import java.io.IOException; public class ServletServiceHandler extends Handler { @Override - public void handleRequest(HandlerContext handlerContext) { - try { - HttpServletRequest request = handlerContext.getRequest(); - ServletResponse response = handlerContext.getResponse(); - //成功匹配到Servlet,直接执行 - if (handlerContext.getServletInfo() != null) { - handlerContext.getServletInfo().getServlet().service(request, response); - } else { - handlerContext.getServletContext().getServlet(ServletInfo.DEFAULT_SERVLET_NAME).service(request, response); - } - } catch (ServletException | IOException e) { - throw new WrappedRuntimeException(e); + public void handleRequest(HandlerContext handlerContext) throws ServletException, IOException { + HttpServletRequest request = handlerContext.getRequest(); + ServletResponse response = handlerContext.getResponse(); + //成功匹配到Servlet,直接执行 + if (handlerContext.getServletInfo() != null) { + handlerContext.getServletInfo().getServlet().service(request, response); + } else { + handlerContext.getServletContext().getServlet(ServletInfo.DEFAULT_SERVLET_NAME).service(request, response); } } } diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java index 396f90f..f8012bd 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/AsyncContextImpl.java @@ -10,10 +10,6 @@ package org.smartboot.servlet.impl; -import org.smartboot.servlet.HandlerContext; -import org.smartboot.servlet.ServletContextRuntime; -import org.smartboot.servlet.plugins.dispatcher.ServletRequestDispatcherWrapper; - import jakarta.servlet.AsyncContext; import jakarta.servlet.AsyncEvent; import jakarta.servlet.AsyncListener; @@ -22,6 +18,11 @@ import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; +import org.smartboot.servlet.HandlerContext; +import org.smartboot.servlet.ServletContextRuntime; +import org.smartboot.servlet.exception.WrappedRuntimeException; +import org.smartboot.servlet.plugins.dispatcher.ServletRequestDispatcherWrapper; + import java.io.IOException; import java.util.LinkedList; import java.util.List; @@ -94,7 +95,11 @@ public class AsyncContextImpl implements AsyncContext { public void run() { ServletRequestDispatcherWrapper wrapper = new ServletRequestDispatcherWrapper(originalRequest, DispatcherType.ASYNC, false); HandlerContext handlerContext = new HandlerContext(wrapper, response, originalRequest.getServletContext(), false); - servletContextRuntime.getServletContext().getPipeline().handleRequest(handlerContext); + try { + servletContextRuntime.getServletContext().getPipeline().handleRequest(handlerContext); + } catch (Throwable e) { + throw new WrappedRuntimeException(e); + } } }); diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java index 8a0e655..50db2da 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java @@ -10,6 +10,9 @@ package org.smartboot.servlet.impl; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.smartboot.http.common.enums.HeaderNameEnum; import org.smartboot.http.common.enums.HttpStatus; import org.smartboot.http.common.logging.Logger; @@ -19,9 +22,6 @@ import org.smartboot.servlet.ServletContextRuntime; import org.smartboot.servlet.util.DateUtil; import org.smartboot.servlet.util.PathMatcherUtil; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -236,6 +236,13 @@ public class HttpServletResponseImpl implements HttpServletResponse { @Override public ServletOutputStreamImpl getOutputStream() { + if (servletOutputStream != null) { + + } + if (writer != null) { + reset(); + throw new IllegalStateException("getWriter has already been called."); + } if (servletOutputStream == null) { byte[] buffer = null; if (bufferSize == -1) { @@ -294,7 +301,11 @@ public class HttpServletResponseImpl implements HttpServletResponse { } public void flushServletBuffer() throws IOException { - getOutputStream().flushServletBuffer(); + if (writer != null) { + writer.flush(); + } else { + getOutputStream().flushServletBuffer(); + } } @Override diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/JspConfigDescriptorImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/JspConfigDescriptorImpl.java new file mode 100644 index 0000000..dfb53e0 --- /dev/null +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/JspConfigDescriptorImpl.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) [2022] smartboot [zhengjunweimail@163.com] + * + * 企业用户未经smartboot组织特别许可,需遵循AGPL-3.0开源协议合理合法使用本项目。 + * + * Enterprise users are required to use this project reasonably + * and legally in accordance with the AGPL-3.0 open source agreement + * without special permission from the smartboot organization. + */ + +package org.smartboot.servlet.impl; + +import jakarta.servlet.descriptor.JspConfigDescriptor; +import jakarta.servlet.descriptor.JspPropertyGroupDescriptor; +import jakarta.servlet.descriptor.TaglibDescriptor; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class JspConfigDescriptorImpl implements JspConfigDescriptor { + private final List tagLibs = new ArrayList<>(); + private final List jspGroups = new ArrayList<>(); + + @Override + public Collection getTaglibs() { + return tagLibs; + } + + @Override + public Collection getJspPropertyGroups() { + return jspGroups; + } +} diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java index 7a6bf71..92c85a4 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/ServletContextImpl.java @@ -49,8 +49,10 @@ import java.util.Collections; import java.util.Enumeration; import java.util.EventListener; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -67,11 +69,17 @@ public class ServletContextImpl implements ServletContext { private final DeploymentInfo deploymentInfo; private final SessionCookieConfig sessionCookieConfig; private ServletContextPathType pathType = ServletContextPathType.PATH; + + private JspConfigDescriptor jspConfigDescriptor = new JspConfigDescriptorImpl(); /** * 请求执行管道 */ private HandlerPipeline pipeline; + private String responseCharacterEncoding; + + private String requestCharacterEncoding; + public ServletContextImpl(ServletContextRuntime containerRuntime) { this.containerRuntime = containerRuntime; this.deploymentInfo = containerRuntime.getDeploymentInfo(); @@ -121,8 +129,20 @@ public class ServletContextImpl implements ServletContext { @Override public Set getResourcePaths(String path) { - //todo 暂时 返回 null 使org.apache.jasper.servlet.JasperInitializer#onStartup 可以执行 - return null; + try { + URL url = getResource(path); + File file = new File(url.toURI()); + if (file.isDirectory()) { + Set set = new HashSet<>(); + for (String fileName : Objects.requireNonNull(file.list())) { + set.add(path + fileName); + } + return set; + } + } catch (Exception e) { + LOGGER.error("getResourcePaths exception", e); + } + return Collections.emptySet(); } @Override @@ -489,7 +509,7 @@ public class ServletContextImpl implements ServletContext { @Override public JspConfigDescriptor getJspConfigDescriptor() { //todo 暂时 返回 null 使org.apache.jasper.servlet.JasperInitializer#onStartup 可以执行 - return null; + return jspConfigDescriptor; } @Override @@ -519,22 +539,22 @@ public class ServletContextImpl implements ServletContext { @Override public String getRequestCharacterEncoding() { - return null; + return requestCharacterEncoding; } @Override public void setRequestCharacterEncoding(String encoding) { - + this.requestCharacterEncoding = encoding; } @Override public String getResponseCharacterEncoding() { - return null; + return responseCharacterEncoding; } @Override public void setResponseCharacterEncoding(String encoding) { - + this.responseCharacterEncoding = encoding; } public DeploymentInfo getDeploymentInfo() { diff --git a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java index 708d774..e620eeb 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/plugins/dispatcher/RequestDispatcherImpl.java @@ -10,6 +10,13 @@ package org.smartboot.servlet.plugins.dispatcher; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletRequestWrapper; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.ServletResponseWrapper; import org.smartboot.http.common.utils.HttpUtils; import org.smartboot.http.common.utils.StringUtils; import org.smartboot.servlet.HandlerContext; @@ -18,13 +25,6 @@ import org.smartboot.servlet.impl.HttpServletRequestImpl; import org.smartboot.servlet.impl.HttpServletResponseImpl; import org.smartboot.servlet.impl.ServletContextImpl; -import jakarta.servlet.DispatcherType; -import jakarta.servlet.RequestDispatcher; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletRequestWrapper; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.ServletResponseWrapper; import java.io.IOException; import java.util.HashMap; import java.util.Map; diff --git a/servlet-core/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer b/servlet-core/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer new file mode 100644 index 0000000..33a59da --- /dev/null +++ b/servlet-core/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer @@ -0,0 +1 @@ +org.apache.jasper.servlet.JasperInitializer \ No newline at end of file diff --git a/smart-servlet-maven-plugin/src/main/java/org/smartboot/maven/plugin/servlet/Starter.java b/smart-servlet-maven-plugin/src/main/java/org/smartboot/maven/plugin/servlet/Starter.java index 2086bbf..10e5b3e 100644 --- a/smart-servlet-maven-plugin/src/main/java/org/smartboot/maven/plugin/servlet/Starter.java +++ b/smart-servlet-maven-plugin/src/main/java/org/smartboot/maven/plugin/servlet/Starter.java @@ -41,7 +41,7 @@ public class Starter { } }).webSocketHandler(new WebSocketHandler() { @Override - public void handle(WebSocketRequest request, WebSocketResponse response) throws IOException { + public void handle(WebSocketRequest request, WebSocketResponse response) throws Throwable { containerRuntime.doHandle(request, response); } }); diff --git a/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartServletServer.java b/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartServletServer.java index 0ca2860..50d2813 100644 --- a/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartServletServer.java +++ b/spring-boot-starter/src/main/java/org/smartboot/springboot/starter/SmartServletServer.java @@ -53,7 +53,7 @@ public class SmartServletServer implements WebServer { } @Override - public void handle(WebSocketRequest request, WebSocketResponse response) { + public void handle(WebSocketRequest request, WebSocketResponse response) throws Throwable { containerRuntime.doHandle(request, response); } }); -- Gitee From 2af3a08c59e409393feff9d7889bc4b7eed12e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Thu, 28 Sep 2023 17:27:36 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/smartboot/servlet/impl/HttpServletResponseImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java index 50db2da..7a3a685 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/impl/HttpServletResponseImpl.java @@ -198,7 +198,7 @@ public class HttpServletResponseImpl implements HttpServletResponse { @Override public void setCharacterEncoding(String charset) { - if (isCommitted()) { + if (isCommitted() || writer != null) { return; } charsetSet = charset != null; @@ -227,11 +227,11 @@ public class HttpServletResponseImpl implements HttpServletResponse { int split = type.indexOf(";charset="); if (split == -1) { contentType = type; - response.setContentType(getContentType()); } else { contentType = type.substring(0, split); setCharacterEncoding(type.substring(split + 9)); } + response.setContentType(getContentType()); } @Override -- Gitee From b3c9dce465563f01e68b099e51ed01b14f499a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=88=80?= Date: Thu, 28 Sep 2023 17:37:14 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../smartboot/servlet/ContainerRuntime.java | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java index 2753bdb..c37b8b8 100644 --- a/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java +++ b/servlet-core/src/main/java/org/smartboot/servlet/ContainerRuntime.java @@ -83,44 +83,38 @@ public class ContainerRuntime { */ private HttpServerConfiguration configuration; - public void start(HttpServerConfiguration configuration) { - try { + public void start(HttpServerConfiguration configuration) throws Throwable { + if (started) { + return; + } + started = true; + this.configuration = configuration; + configuration.serverName("smart-servlet"); + System.out.println(ConsoleColors.GREEN + BANNER + ConsoleColors.RESET + "\r\n :: smart-servlet :: (" + VERSION + ")"); + HandlerPipeline pipeline = new HandlerPipeline(); + pipeline.next(new ServletServiceHandler() { + final byte[] line = "欢迎使用 smart-socket!".getBytes(StandardCharsets.UTF_8); - if (started) { - return; - } - started = true; - this.configuration = configuration; - configuration.serverName("smart-servlet"); - System.out.println(ConsoleColors.GREEN + BANNER + ConsoleColors.RESET + "\r\n :: smart-servlet :: (" + VERSION + ")"); - HandlerPipeline pipeline = new HandlerPipeline(); - pipeline.next(new ServletServiceHandler() { - final byte[] line = "欢迎使用 smart-socket!".getBytes(StandardCharsets.UTF_8); - - @Override - public void handleRequest(HandlerContext handlerContext) { - try { - ServletResponse response = handlerContext.getResponse(); - response.setContentLength(line.length); - response.getOutputStream().write(line); - } catch (IOException e) { - throw new RuntimeException(e); - } + @Override + public void handleRequest(HandlerContext handlerContext) { + try { + ServletResponse response = handlerContext.getResponse(); + response.setContentLength(line.length); + response.getOutputStream().write(line); + } catch (IOException e) { + throw new RuntimeException(e); } - }); - defaultRuntime.getServletContext().setPipeline(pipeline); - defaultRuntime.start(); - //扫描插件 - loadAndInstallPlugins(); - - //启动运行环境 - for (ServletContextRuntime runtime : runtimes) { - runtime.start(); } - } catch (Throwable throwable) { - throw new RuntimeException(throwable); + }); + defaultRuntime.getServletContext().setPipeline(pipeline); + defaultRuntime.start(); + //扫描插件 + loadAndInstallPlugins(); + + //启动运行环境 + for (ServletContextRuntime runtime : runtimes) { + runtime.start(); } - } /** -- Gitee