从此
上网
📄文章 #️⃣专题 🌐上网 📺 🛒 📱

Java Web应用技术


综合

SpringBoot内嵌Web Server容器 - Tomcat,Jetty,Undertow,Netty

Nginx集成Java模块 - nginx-clojure


Servlet+Gradle实例:

  Java Servlet 技术入门


                    plugins {
                        id 'war'
                        id "org.gretty" version "4.0.0"
                    }
                    repositories { mavenCentral() }
                    dependencies {
                        providedCompile 'jakarta.servlet:jakarta.servlet-api:5.0.0'
                    }
                
                    //  首页位置 - src/main/webapp/index.html
                    //  http://localhost:8080/gradle-servlet-template/ss/any
                    @WebServlet(urlPatterns = {"/s", "/ss/*"})
                    public class NewServlet extends HttpServlet {
                      @Override
                      protected void doGet(HttpServletRequest request, HttpServletResponse response)
                            throws ServletException, IOException {
                        try ( var out = response.getWriter()) {
                            out.println(request.getServletPath());
                        }
                      }
                    }

 

Servlet异步非阻塞:


                    //  http://localhost:8080/gradle-servlet-template/aa/any
                    @WebServlet(asyncSupported = true, urlPatterns = {"/a", "/a/*"})
                    public class NewServlet extends HttpServlet {
                      private static final ExecutorService ES = Executors.newFixedThreadPool(9);
                      @Override
                      protected void doGet(HttpServletRequest request, HttpServletResponse response)
                            throws ServletException, IOException {
                
                        var ac = request.startAsync(request, response);
                        ac.setTimeout(10 * 1000);
                        //ac.addListener(new AsyncListener() {});
                        // 异步非阻塞方式读取或响应HTTP Body大尺寸内容
                        //var is = request.getInputStream();
                        //is.setReadListener(new MyRL(is, asyncContext));
                        //var os = response.getOutputStream();
                        //os.setWriteListener(new MyWL(os, asyncContext));
                        // 若业务线程需要Body参数可在MyRL的onAllDataRead()回调中拿取
                        // 或 new Thread(() -> {...}).start(); // 依然属于Servlet接待线程
                        ES.execute(() -> { // 或 ac.start(() -> {...});
                            try {
                                TimeUnit.SECONDS.sleep(2); // 模拟业务耗时
                                ac.getResponse().getWriter().write("ok");
                                ac.complete(); // 通知异步上下文请求处理完成
                            } catch (IOException | InterruptedException e) {
                                System.err.println(e);
                            }
                        });
                
                      }
                    }

 

    启动 - gradle appRun