Skip to content

Beangle Web API 调用说明

模块总览

模块包名功能说明
Contextorg.beangle.web.servlet.contextServlet 容器上下文管理
Filterorg.beangle.web.servlet.filter各种过滤器实现
HTTPorg.beangle.web.servlet.httpHTTP 处理相关功能
Initorg.beangle.web.servlet.init初始化相关类
Interceptorg.beangle.web.servlet.intercept拦截器接口
IOorg.beangle.web.servlet.io网络 IO 相关功能
Multipartorg.beangle.web.servlet.multipart文件上传处理
Resourceorg.beangle.web.servlet.resource静态资源处理
Securityorg.beangle.web.servlet.security安全相关功能
Servletorg.beangle.web.servlet.servletServlet 代理
SSEorg.beangle.web.servlet.sse服务器发送事件
URLorg.beangle.web.servlet.urlURL 构建和渲染
Utilorg.beangle.web.servlet.utilWeb 工具类
Socketorg.beangle.web.socketSocket 初始化

Context 模块

org.beangle.web.servlet.context - 提供 Servlet 容器的上下文管理功能。

功能说明 提供 Servlet 容器的上下文管理功能,包括 ServletContext 持有和容器清理。

主要 API

API功能描述使用示例
ServletContextHolderServletContext 持有器val context = ServletContextHolder.getContext
ContainerCleanup容器清理工具ContainerCleanup.registerCallback(() => cleanup())

常用场景示例

scala
// 获取 ServletContext
val context = ServletContextHolder.getContext
val realPath = context.getRealPath("/WEB-INF")

// 注册容器清理回调
ContainerCleanup.registerCallback(() => {
  // 执行清理操作
  println("Container is being cleaned up")
})

Filter 模块

org.beangle.web.servlet.filter - 提供各种过滤器实现,支持请求处理和过滤链管理。

功能说明 提供各种过滤器实现,支持请求处理和过滤链管理。

主要 API

API功能描述使用示例
GenericHttpFilter通用 HTTP 过滤器class MyFilter extends GenericHttpFilter
OncePerRequestFilter每个请求只执行一次的过滤器class MyFilter extends OncePerRequestFilter
CharacterEncodingFilter字符编码过滤器new CharacterEncodingFilter("UTF-8")
CompositeFilter复合过滤器val filter = new CompositeFilter(filters)
DelegatingFilterProxy委托过滤器代理new DelegatingFilterProxy("filterBean")
RequestMatcher请求匹配器val matcher = RequestMatcher.path("/api/**")
VirtualFilterChain虚拟过滤链new VirtualFilterChain(chain, filters, 0)

常用场景示例

scala
// 创建字符编码过滤器
val encodingFilter = new CharacterEncodingFilter("UTF-8")

// 创建请求匹配器
val apiMatcher = RequestMatcher.path("/api/**")
val staticMatcher = RequestMatcher.path("/static/**")

// 创建复合过滤器
val filters = Seq(encodingFilter, authFilter, loggingFilter)
val compositeFilter = new CompositeFilter(filters)

// 实现自定义过滤器
class AuthFilter extends OncePerRequestFilter {
  def doFilterInternal(req: HttpServletRequest, res: HttpServletResponse, chain: FilterChain): Unit = {
    if (isAuthenticated(req)) {
      chain.doFilter(req, res)
    } else {
      res.sendRedirect("/login")
    }
  }
}

HTTP 模块

org.beangle.web.servlet.http - 提供 HTTP 处理相关功能,包括内容协商和用户代理识别。

功能说明 提供 HTTP 处理相关功能,包括内容协商和用户代理识别。

主要 API

API功能描述使用示例
ContentNegotiationManager内容协商管理器new ContentNegotiationManager()
ContentTypeResolver内容类型解析器new PathExtensionContentResolver()
Useragent用户代理解析器Useragent.parse(request.getHeader("User-Agent"))
Browser浏览器信息useragent.getBrowser
Os操作系统信息useragent.getOs

常用场景示例

scala
// 内容协商
val contentNegotiation = new ContentNegotiationManager()
val mediaTypes = contentNegotiation.resolveMediaTypes(request)

// 解析用户代理
val userAgent = request.getHeader("User-Agent")
val parsedUseragent = Useragent.parse(userAgent)

// 获取浏览器信息
val browser = parsedUseragent.getBrowser
val browserName = browser.name

// 获取操作系统信息
val os = parsedUseragent.getOs
val osName = os.name

// 基于浏览器类型的处理
if (browser.category == BrowserCategory.MOBILE) {
  // 移动设备处理
} else {
  // 桌面设备处理
}

Init 模块

org.beangle.web.servlet.init - 提供 Servlet 容器初始化相关功能。

功能说明 提供 Servlet 容器初始化相关功能,支持应用启动和初始化。

主要 API

API功能描述使用示例
Initializer初始化器接口class MyInitializer extends Initializer
BootstrapInitializer引导初始化器new BootstrapInitializer()
BootstrapListener引导监听器new BootstrapListener()

常用场景示例

scala
// 实现自定义初始化器
class AppInitializer extends Initializer {
  def onStartup(servletContext: ServletContext): Unit = {
    // 初始化应用
    val context = new AnnotationConfigWebApplicationContext()
    context.register(classOf[AppConfig])
    
    // 注册 DispatcherServlet
    val servlet = new DispatcherServlet(context)
    val registration = servletContext.addServlet("dispatcher", servlet)
    registration.setLoadOnStartup(1)
    registration.addMapping("/")
  }
}

// 在 META-INF/services/jakarta.servlet.ServletContainerInitializer 中注册
// org.beangle.web.servlet.init.BootstrapInitializer

IO 模块

org.beangle.web.servlet.io - 提供网络 IO 相关功能,支持文件下载和范围请求。

功能说明 提供网络 IO 相关功能,支持文件下载和范围请求。

主要 API

API功能描述使用示例
Wagon网络传输工具接口val wagon = new DefaultWagon()
DefaultWagon默认网络传输工具new DefaultWagon()
RangedWagon支持范围请求的网络传输工具new RangedWagon()

常用场景示例

scala
// 创建网络传输工具
val wagon = new DefaultWagon()

// 下载文件
val url = new URL("https://example.com/file.zip")
val outputFile = new File("/path/to/save/file.zip")
wagon.get(url, outputFile)

// 支持范围请求的传输
val rangedWagon = new RangedWagon()
val range = Range.create(0, 1024) // 下载前1KB
rangedWagon.get(url, outputFile, range)

Multipart 模块

org.beangle.web.servlet.multipart - 提供文件上传处理功能。

功能说明 提供文件上传处理功能,支持 multipart/form-data 请求。

主要 API

API功能描述使用示例
MultipartResolver文件上传解析器接口val resolver = new StandardMultipartResolver()
StandardMultipartResolver标准文件上传解析器new StandardMultipartResolver()

常用场景示例

scala
// 创建文件上传解析器
val resolver = new StandardMultipartResolver()

// 检查请求是否包含文件
if (resolver.isMultipart(request)) {
  // 解析文件上传
  val multipartRequest = resolver.resolveMultipart(request)
  
  // 获取文件
  val file = multipartRequest.getFile("file")
  if (file != null) {
    // 处理文件
    val fileName = file.getOriginalFilename
    val tempFile = File.createTempFile("upload", ".tmp")
    file.transferTo(tempFile)
  }
  
  // 清理资源
  resolver.cleanupMultipart(multipartRequest)
}

Resource 模块

org.beangle.web.servlet.resource - 提供静态资源处理功能。

功能说明 提供静态资源处理功能,支持资源路径解析、处理链和过滤器。

主要 API

API功能描述使用示例
StaticResourceServlet静态资源 Servletnew StaticResourceServlet()
PathResolver路径解析器new PathResolver()
ResourceProcessor资源处理器new ResourceProcessor()
ResourceFilter资源过滤器new HeaderFilter()

常用场景示例

scala
// 配置静态资源 Servlet
val servlet = new StaticResourceServlet()
val registration = servletContext.addServlet("static", servlet)
registration.addMapping("/static/*")

// 路径解析
val pathResolver = new PathResolver()
val resolvedPath = pathResolver.resolve("/static/js/app.js")

// 资源处理链
val filters = Seq(new HeaderFilter())
val processor = new ResourceProcessor(filters)
val processedResource = processor.process(resource, context)

SSE 模块

org.beangle.web.servlet.sse - 提供服务器发送事件(Server-Sent Events)功能。

功能说明 提供服务器发送事件(Server-Sent Events)功能,支持服务器向客户端推送数据。

主要 API

API功能描述使用示例
SseWriterSSE 写入器val writer = new SseWriter(response)
SseEventSSE 事件SseEvent(data, event, id, retry)

常用场景示例

scala
// 创建 SSE 写入器
response.setContentType("text/event-stream")
response.setCharacterEncoding("UTF-8")
response.setHeader("Cache-Control", "no-cache")
response.setHeader("Connection", "keep-alive")

val writer = new SseWriter(response.getWriter)

// 发送事件
writer.write(SseEvent("Hello, world!"))
writer.write(SseEvent("Update", "message"))
writer.write(SseEvent("100", "progress", "1"))

// 关闭写入器
writer.close()

URL 模块

org.beangle.web.servlet.url - 提供 URL 构建和渲染功能。

功能说明 提供 URL 构建和渲染功能,支持生成和处理 URL。

主要 API

API功能描述使用示例
UrlBuilderURL 构建器val builder = new UrlBuilder(request)
UrlRenderURL 渲染器val render = new UrlRender()

常用场景示例

scala
// 构建 URL
val builder = new UrlBuilder(request)
builder.setPath("/api/users")
builder.addParameter("page", "1")
builder.addParameter("size", "10")
val url = builder.build()

// 渲染 URL
val render = new UrlRender()
val renderedUrl = render.render("/api/users", Map("id" -> 1))

Util 模块

org.beangle.web.servlet.util - 提供 Web 相关的工具类。

功能说明 提供 Web 相关的工具类,包括 Cookie 处理、请求工具和重定向工具。

主要 API

API功能描述使用示例
CookieGeneratorCookie 生成器val generator = new CookieGenerator("sessionId")
CookieUtilsCookie 工具类val value = CookieUtils.getCookieValue(request, "sessionId")
RequestUtils请求工具类val contextPath = RequestUtils.getContextPath(request)
RedirectUtils重定向工具类val redirectUrl = RedirectUtils.calculateRedirectUrl(request, "/home")

常用场景示例

scala
// Cookie 处理
val generator = new CookieGenerator("sessionId")
generator.setCookieMaxAge(86400) // 24小时
generator.addCookie(response, "session123")

// 获取 Cookie 值
val sessionId = CookieUtils.getCookieValue(request, "sessionId")

// 请求工具
val contextPath = RequestUtils.getContextPath(request)
val requestUri = RequestUtils.getRequestUri(request)

// 重定向
val redirectUrl = RedirectUtils.calculateRedirectUrl(request, "/home")
response.sendRedirect(redirectUrl)

Socket 模块

org.beangle.web.socket - 提供 Socket 初始化功能。

功能说明 提供 Socket 初始化功能,支持 WebSocket 集成。

主要 API

API功能描述使用示例
SocketInitializerSocket 初始化器class MySocketInitializer extends SocketInitializer

常用场景示例

scala
// 实现 Socket 初始化器
class AppSocketInitializer extends SocketInitializer {
  def onStartup(servletContext: ServletContext): Unit = {
    // 配置 WebSocket 端点
    val serverContainer = servletContext.getAttribute("javax.websocket.server.ServerContainer").asInstanceOf[ServerContainer]
    serverContainer.addEndpoint(classOf[ChatEndpoint])
  }
}

最佳实践

过滤器配置

  • 使用 OncePerRequestFilter 确保过滤器只执行一次
  • 使用 CompositeFilter 组合多个过滤器
  • 合理使用 RequestMatcher 限制过滤器的应用范围

内容协商

  • 配置 ContentNegotiationManager 支持多种媒体类型
  • 优先使用路径扩展名和请求头进行内容协商

静态资源处理

  • 使用 StaticResourceServlet 处理静态资源
  • 配置适当的缓存策略
  • 启用 gzip 压缩

SSE 使用

  • 设置正确的响应头
  • 定期发送心跳事件保持连接
  • 处理连接关闭和异常情况

URL 构建

  • 使用 UrlBuilder 构建 URL,确保参数正确编码
  • 考虑使用相对路径,增强应用的可移植性