增加javadoc注释
This commit is contained in:
@@ -16,6 +16,7 @@ import org.redkale.util.*;
|
||||
import org.redkale.watch.*;
|
||||
|
||||
/**
|
||||
* HTTP服务的上下文对象
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -27,10 +28,10 @@ public class HttpContext extends Context {
|
||||
protected final SecureRandom random = new SecureRandom();
|
||||
|
||||
public HttpContext(long serverStartTime, Logger logger, ExecutorService executor, int bufferCapacity, ObjectPool<ByteBuffer> bufferPool,
|
||||
ObjectPool<Response> responsePool, int maxbody, Charset charset, InetSocketAddress address, PrepareServlet prepare,
|
||||
WatchFactory watch, int readTimeoutSecond, int writeTimeoutSecond) {
|
||||
ObjectPool<Response> responsePool, int maxbody, Charset charset, InetSocketAddress address, PrepareServlet prepare,
|
||||
WatchFactory watch, int readTimeoutSecond, int writeTimeoutSecond) {
|
||||
super(serverStartTime, logger, executor, bufferCapacity, bufferPool, responsePool, maxbody, charset,
|
||||
address, prepare, watch, readTimeoutSecond, writeTimeoutSecond);
|
||||
address, prepare, watch, readTimeoutSecond, writeTimeoutSecond);
|
||||
|
||||
random.setSeed(Math.abs(System.nanoTime()));
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@ import org.redkale.util.*;
|
||||
import org.redkale.watch.*;
|
||||
|
||||
/**
|
||||
* HTTP Servlet的总入口,请求在HttpPrepareServlet中进行分流。
|
||||
* 一个HttpServer只有一个HttpPrepareServlet, 用于管理所有HttpServlet。
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -89,6 +91,7 @@ public class HttpPrepareServlet extends PrepareServlet<String, HttpContext, Http
|
||||
}
|
||||
}
|
||||
}
|
||||
//找不到匹配的HttpServlet则使用静态资源HttpResourceServlet
|
||||
if (servlet == null) servlet = this.resourceHttpServlet;
|
||||
servlet.execute(request, response);
|
||||
} catch (Exception e) {
|
||||
@@ -97,6 +100,14 @@ public class HttpPrepareServlet extends PrepareServlet<String, HttpContext, Http
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加HttpServlet
|
||||
*
|
||||
* @param servlet HttpServlet
|
||||
* @param prefix url前缀
|
||||
* @param conf 配置信息
|
||||
* @param mappings 匹配规则
|
||||
*/
|
||||
@Override
|
||||
public void addServlet(HttpServlet servlet, Object prefix, AnyValue conf, String... mappings) {
|
||||
if (prefix == null) prefix = "";
|
||||
@@ -107,12 +118,12 @@ public class HttpPrepareServlet extends PrepareServlet<String, HttpContext, Http
|
||||
if (!ws.repair()) prefix = "";//被设置为不自动追加前缀则清空prefix
|
||||
}
|
||||
}
|
||||
synchronized (allMapStrings) {
|
||||
synchronized (allMapStrings) { //需要整段锁住
|
||||
for (String mapping : mappings) {
|
||||
if (mapping == null) continue;
|
||||
if (!prefix.toString().isEmpty()) mapping = prefix + mapping;
|
||||
|
||||
if (contains(mapping, '.', '*', '{', '[', '(', '|', '^', '$', '+', '?', '\\')) { //是否是正则表达式))
|
||||
if (Utility.contains(mapping, '.', '*', '{', '[', '(', '|', '^', '$', '+', '?', '\\')) { //是否是正则表达式))
|
||||
if (mapping.charAt(0) != '^') mapping = '^' + mapping;
|
||||
if (mapping.endsWith("/*")) {
|
||||
mapping = mapping.substring(0, mapping.length() - 1) + ".*";
|
||||
@@ -141,22 +152,22 @@ public class HttpPrepareServlet extends PrepareServlet<String, HttpContext, Http
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean contains(String string, char... values) {
|
||||
if (string == null) return false;
|
||||
for (char ch : Utility.charArray(string)) {
|
||||
for (char ch2 : values) {
|
||||
if (ch == ch2) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置静态资源HttpServlet
|
||||
*
|
||||
* @param servlet
|
||||
*/
|
||||
public void setResourceServlet(HttpServlet servlet) {
|
||||
if (servlet != null) {
|
||||
this.resourceHttpServlet = servlet;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取静态资源HttpServlet
|
||||
*
|
||||
* @return HttpServlet
|
||||
*/
|
||||
public HttpServlet getResourceServlet() {
|
||||
return this.resourceHttpServlet;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.regex.*;
|
||||
import org.redkale.util.AnyValue;
|
||||
|
||||
/**
|
||||
* 静态资源HttpServlet
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -268,7 +269,7 @@ public class HttpResourceServlet extends HttpServlet {
|
||||
|
||||
public void update() {
|
||||
if (this.file == null) return;
|
||||
if (this.content != null) {
|
||||
if (this.content != null) {
|
||||
this.servlet.cachedLength.add(0L - this.content.remaining());
|
||||
this.content = null;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.redkale.util.*;
|
||||
import org.redkale.watch.WatchFactory;
|
||||
|
||||
/**
|
||||
* Http服务器
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -37,24 +38,88 @@ public final class HttpServer extends Server<String, HttpContext, HttpRequest, H
|
||||
super.init(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取静态资源HttpServlet
|
||||
*
|
||||
* @return HttpServlet
|
||||
*/
|
||||
public HttpServlet getResourceServlet() {
|
||||
return ((HttpPrepareServlet) this.prepare).resourceHttpServlet;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加HttpServlet
|
||||
*
|
||||
* @param prefix url前缀
|
||||
* @param servlet HttpServlet
|
||||
* @param mappings 匹配规则
|
||||
*
|
||||
* @return HttpServer
|
||||
*/
|
||||
public HttpServer addHttpServlet(String prefix, HttpServlet servlet, String... mappings) {
|
||||
this.prepare.addServlet(servlet, prefix, null, mappings);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加HttpServlet
|
||||
*
|
||||
* @param servlet HttpServlet
|
||||
* @param mappings 匹配规则
|
||||
*
|
||||
* @return HttpServer
|
||||
*/
|
||||
public HttpServer addHttpServlet(HttpServlet servlet, String... mappings) {
|
||||
this.prepare.addServlet(servlet, null, null, mappings);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void addHttpServlet(HttpServlet servlet, final String prefix, AnyValue conf, String... mappings) {
|
||||
/**
|
||||
* 添加HttpServlet
|
||||
*
|
||||
* @param prefix url前缀
|
||||
* @param servlet HttpServlet
|
||||
* @param conf 配置信息
|
||||
* @param mappings 匹配规则
|
||||
*
|
||||
* @return HttpServer
|
||||
*/
|
||||
public HttpServer addHttpServlet(HttpServlet servlet, final String prefix, AnyValue conf, String... mappings) {
|
||||
this.prepare.addServlet(servlet, prefix, conf, mappings);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加RestHttpServlet
|
||||
*
|
||||
* @param <S> Service
|
||||
* @param <T> RestHttpServlet
|
||||
* @param name Service的资源名
|
||||
* @param serviceType Service的类型
|
||||
* @param service Service对象
|
||||
* @param baseServletClass RestHttpServlet基类
|
||||
* @param prefix url前缀
|
||||
*
|
||||
* @return RestHttpServlet
|
||||
*/
|
||||
public <S extends Service, T extends RestHttpServlet> RestHttpServlet addRestServlet(String name, Class<S> serviceType, S service, Class<T> baseServletClass, String prefix) {
|
||||
return addRestServlet(name, serviceType, service, baseServletClass, prefix, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加RestHttpServlet
|
||||
*
|
||||
* @param <S> Service
|
||||
* @param <T> RestHttpServlet
|
||||
* @param name Service的资源名
|
||||
* @param serviceType Service的类型
|
||||
* @param service Service对象
|
||||
* @param baseServletClass RestHttpServlet基类
|
||||
* @param prefix url前缀
|
||||
* @param conf 配置信息
|
||||
*
|
||||
* @return RestHttpServlet
|
||||
*/
|
||||
public <S extends Service, T extends RestHttpServlet> RestHttpServlet addRestServlet(
|
||||
final String name, Class<S> serviceType, final S service, final Class<T> baseServletClass, final String prefix, AnyValue conf) {
|
||||
RestHttpServlet servlet = null;
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.redkale.net.http;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* MimeType
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -100,6 +101,7 @@ public class MimeType {
|
||||
contentTypes.put("oda", "application/oda");
|
||||
contentTypes.put("ogg", "application/ogg");
|
||||
contentTypes.put("out", "text/plain");
|
||||
contentTypes.put("pac", "application/x-javascript-config");
|
||||
contentTypes.put("pbm", "image/x-portable-bitmap");
|
||||
contentTypes.put("pct", "image/pict");
|
||||
contentTypes.put("pdf", "application/pdf");
|
||||
|
||||
@@ -15,6 +15,7 @@ import java.util.regex.*;
|
||||
import org.redkale.util.AnyValue.DefaultAnyValue;
|
||||
|
||||
/**
|
||||
* HTTP的文件上传请求的上下文对象
|
||||
*
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
@@ -77,10 +78,21 @@ public final class MultiContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断请求是否包含上传文件
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isMultipart() {
|
||||
return this.boundary != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上传文件信息列表
|
||||
*
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public Iterable<MultiPart> parts() throws IOException {
|
||||
if (!isMultipart()) return emptyIterable;
|
||||
final String boundarystr = "--" + this.boundary;
|
||||
|
||||
@@ -22,9 +22,24 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
@Retention(RUNTIME)
|
||||
public @interface RestCookie {
|
||||
|
||||
String name(); //cookie名
|
||||
/**
|
||||
* cookie名
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String name();
|
||||
|
||||
int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
/**
|
||||
* 转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int radix() default 10;
|
||||
|
||||
String comment() default ""; //备注描述
|
||||
/**
|
||||
* 备注描述
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String comment() default "";
|
||||
}
|
||||
|
||||
@@ -22,9 +22,24 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
@Retention(RUNTIME)
|
||||
public @interface RestHeader {
|
||||
|
||||
String name(); //参数名
|
||||
/**
|
||||
* Header参数名
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
String name();
|
||||
|
||||
int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
/**
|
||||
* 转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int radix() default 10;
|
||||
|
||||
String comment() default ""; //备注描述
|
||||
/**
|
||||
* 备注描述
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String comment() default "";
|
||||
}
|
||||
|
||||
@@ -24,25 +24,60 @@ import static java.lang.annotation.RetentionPolicy.*;
|
||||
@Repeatable(RestMappings.class)
|
||||
public @interface RestMapping {
|
||||
|
||||
boolean ignore() default false; //是否屏蔽该方法的转换
|
||||
/**
|
||||
* 是否屏蔽该方法的转换
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
boolean ignore() default false;
|
||||
|
||||
/**
|
||||
* 请求的方法名, 不能含特殊字符
|
||||
* 默认为方法名的小写(若方法名以createXXX、updateXXX、deleteXXX、queryXXX、findXXX、existsXXX且XXXService为Service的类名将只截取XXX之前)
|
||||
*
|
||||
* @return name
|
||||
* @return String
|
||||
*/
|
||||
String name() default "";
|
||||
|
||||
String comment() default ""; //备注描述, 对应@WebAction.comment
|
||||
/**
|
||||
* 备注描述, 对应@WebAction.comment
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String comment() default "";
|
||||
|
||||
boolean auth() default false; //是否鉴权,默认不鉴权, 对应@AuthIgnore
|
||||
/**
|
||||
* 是否鉴权,默认不鉴权, 对应@AuthIgnore
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
boolean auth() default false;
|
||||
|
||||
int actionid() default 0; //操作ID值,鉴权时用到, 对应@WebAction.actionid
|
||||
/**
|
||||
* 操作ID值,鉴权时用到, 对应@WebAction.actionid
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int actionid() default 0;
|
||||
|
||||
int cacheseconds() default 0; // 结果缓存的秒数, 为0表示不缓存, 对应@HttpCacheable.seconds
|
||||
/**
|
||||
* 结果缓存的秒数, 为0表示不缓存, 对应@HttpCacheable.seconds
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int cacheseconds() default 0;
|
||||
|
||||
String[] methods() default {};//允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应@WebAction.methods
|
||||
/**
|
||||
* 允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应@WebAction.methods
|
||||
*
|
||||
* @return String[]
|
||||
*/
|
||||
String[] methods() default {};
|
||||
|
||||
String jsvar() default ""; //以application/javascript输出对象是指明js的对象名,该值存在时则忽略contentType()的值
|
||||
/**
|
||||
* 以application/javascript输出对象是指明js的对象名,该值存在时则忽略contentType()的值
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String jsvar() default "";
|
||||
}
|
||||
|
||||
@@ -26,11 +26,34 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
@Retention(RUNTIME)
|
||||
public @interface RestParam {
|
||||
|
||||
String name(); //参数名 name='&'表示当前用户; name='#'表示截取uri最后一段; name='#xxx:'表示从uri中/pipes/xxx:v/截取xxx:的值
|
||||
/**
|
||||
* 参数名 n
|
||||
* ame='&'表示当前用户;
|
||||
* name='#'表示截取uri最后一段;
|
||||
* name='#xxx:'表示从uri中/pipes/xxx:v/截取xxx:的值
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String name();
|
||||
|
||||
int radix() default 10; //转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
/**
|
||||
* 转换数字byte/short/int/long时所用的进制数, 默认10进制
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int radix() default 10;
|
||||
|
||||
boolean required() default true; //参数是否必传
|
||||
/**
|
||||
* 参数是否必传
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
boolean required() default true;
|
||||
|
||||
String comment() default ""; //备注描述
|
||||
/**
|
||||
* 备注描述
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String comment() default "";
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@ import java.lang.annotation.*;
|
||||
/**
|
||||
* 功能同JSR 315 (java-servlet 3.0) 规范中的 @WebInitParam
|
||||
*
|
||||
* <p> 详情见: https://redkale.org
|
||||
* <p>
|
||||
* 详情见: https://redkale.org
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@@ -18,9 +20,24 @@ import java.lang.annotation.*;
|
||||
@Documented
|
||||
public @interface WebInitParam {
|
||||
|
||||
/**
|
||||
* 参数名
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* 参数值
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String value();
|
||||
|
||||
/**
|
||||
* 参数描述
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
String description() default "";
|
||||
}
|
||||
|
||||
@@ -21,15 +21,45 @@ import java.lang.annotation.*;
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface WebServlet {
|
||||
|
||||
/**
|
||||
* HttpServlet资源名
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String name() default "";
|
||||
|
||||
/**
|
||||
* 是否自动添加url前缀
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
boolean repair() default true;
|
||||
|
||||
/**
|
||||
* url匹配规则
|
||||
*
|
||||
* @return String[]
|
||||
*/
|
||||
String[] value() default {};
|
||||
|
||||
/**
|
||||
* 模块ID,一个HttpServlet尽量只有提供一个模块的服务
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
int moduleid() default 0;
|
||||
|
||||
/**
|
||||
* 参数
|
||||
*
|
||||
* @return WebInitParam[]
|
||||
*/
|
||||
WebInitParam[] initParams() default {};
|
||||
|
||||
String comment() default ""; //备注描述
|
||||
/**
|
||||
* 备注描述
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String comment() default "";
|
||||
}
|
||||
|
||||
@@ -175,6 +175,24 @@ public final class Utility {
|
||||
return news;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断字符串是否包含指定的字符,包含返回true
|
||||
*
|
||||
* @param string 字符串
|
||||
* @param values 字符集合
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean contains(String string, char... values) {
|
||||
if (string == null) return false;
|
||||
for (char ch : Utility.charArray(string)) {
|
||||
for (char ch2 : values) {
|
||||
if (ch == ch2) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除掉字符串数组中包含指定的字符串
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user