增加javadoc注释

This commit is contained in:
Redkale
2017-02-27 11:19:40 +08:00
parent 9a29a11e22
commit 2979fcc33d
13 changed files with 282 additions and 37 deletions

View File

@@ -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()));
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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");

View File

@@ -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;

View File

@@ -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 "";
}

View File

@@ -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 "";
}

View File

@@ -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 ""; //备注描述, 对应&#64;WebAction.comment
/**
* 备注描述, 对应&#64;WebAction.comment
*
* @return String
*/
String comment() default "";
boolean auth() default false; //是否鉴权,默认不鉴权, 对应&#64;AuthIgnore
/**
* 是否鉴权,默认不鉴权, 对应&#64;AuthIgnore
*
* @return boolean
*/
boolean auth() default false;
int actionid() default 0; //操作ID值鉴权时用到, 对应&#64;WebAction.actionid
/**
* 操作ID值鉴权时用到, 对应&#64;WebAction.actionid
*
* @return int
*/
int actionid() default 0;
int cacheseconds() default 0; // 结果缓存的秒数, 为0表示不缓存, 对应&#64;HttpCacheable.seconds
/**
* 结果缓存的秒数, 为0表示不缓存, 对应&#64;HttpCacheable.seconds
*
* @return int
*/
int cacheseconds() default 0;
String[] methods() default {};//允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应&#64;WebAction.methods
/**
* 允许方法(不区分大小写),如:GET/POST/PUT,为空表示允许所有方法, 对应&#64;WebAction.methods
*
* @return String[]
*/
String[] methods() default {};
String jsvar() default ""; //以application/javascript输出对象是指明js的对象名该值存在时则忽略contentType()的值
/**
* 以application/javascript输出对象是指明js的对象名该值存在时则忽略contentType()的值
*
* @return String
*/
String jsvar() default "";
}

View File

@@ -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 "";
}

View File

@@ -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 "";
}

View File

@@ -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 "";
}

View File

@@ -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;
}
/**
* 删除掉字符串数组中包含指定的字符串
*