diff --git a/net.html b/net.html index 7ce7f0e67..982eb8703 100644 --- a/net.html +++ b/net.html @@ -74,19 +74,18 @@ if (!request.getHeader("User-Agent", "").contains("RedKale-Agent")) { //只用移动APP的接口可以判断User-Agent是否正确 response.addHeader("retcode", "10001"); response.addHeader("retmessage", "User-Agent error"); - response.setStatus(201); - response.finish("{'success':false, 'message':'User-Agent error, must be RedKale-Agent'}"); + response.finish(201, "{'success':false, 'message':'User-Agent error, must be RedKale-Agent'}"); return false; } //可以加上一些统计操作 if (fine) response.setRecycleListener((req, resp) -> { //记录处理时间太长的请求操作 long e = System.currentTimeMillis() - request.getCreatetime(); - if (e > 500) logger.fine("耗时居然用了 " + e + " 毫秒. 请求为: " + request); + if (e > 500) logger.fine("耗时居然用了 " + e + " 毫秒. 请求为: " + req); }); return true; } - //方法标记为@AuthIgnore 的将不会调用authenticate方法 + //标记为@AuthIgnore 的方法将不会调用authenticate方法 //一般用于判断用户的登录态, 返回false表示鉴权失败 //moduleid值来自 @WebServlet.moduleid() 用于定义模块ID; actionid值自来@WebAction.actionid() 用于定义操作ID; 需要系统化的鉴权需要定义这两个值 @Override @@ -100,8 +99,8 @@ return user != null; //存在用户表示登录态正常 } } -

        继承BasedHttpServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作用户的HttpServlet: -

+ +

        继承BasedHttpServlet的子类可以使用其自带的鉴权、请求分支、缓存等功能, 一个典型的操作用户HttpServlet:

@WebServlet({"/user/*"}) //拦截所有 /user/ 开头的请求
 public class UserServlet extends BaseSerlvet {
 
@@ -131,7 +130,8 @@
     //获取指定用户ID的用户信息, 请求如: /user/username/43565443
     @AuthIgnore
     // 默认缓存时间是15秒,BasedHttpServlet会将每个进入该方法的请求的响应结果缓存15秒,缓存命中时不会再进入该方法,过期会清空。
-    // @HttpCacheable 必须配合  @AuthIgnore 使用, 因为跟当前用户有关的请求一般不适合所有用户请求。
+    // @HttpCacheable 必须配合  @AuthIgnore 使用, 因为跟当前用户有关的请求一般不适合所有用户请求。 
+    // 翻页查询想缓存就需要将翻页信息带进url: /user/query/page:2/size:50 。
     @HttpCacheable(timeout = 30)  //有效期30秒
     @WebAction(url = "/user/userinfo/")
     public void userinfo(HttpRequest req, HttpResponse resp) throws IOException {
@@ -139,6 +139,12 @@
         resp.finishJson(user);  //输出用户信息
     }
 }
+

        如上,所有/user/前缀的请求都会进入UserServlet,若没匹配的则返回505错误,为了方便以后编写前方静动分离服务器转发规则,比较好的习惯是将项目中所有动态Servlet加一个固定前缀,在 application.xml 里设置path即可。

+
<server protocol="HTTP" port="6060" root="root"> 
+    <services autoload="true" />  
+    <servlets path="/pipes" autoload="true"/>
+</server>
+

        如上, 配置了/pipes 前缀后,客户端发送Servlet请求需带上前缀,请求当前用户信息的url就变成:/pipes/user/myinfo 。

  . HttpRequest 对象

public class HttpRequest {