1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  package psiprobe.controllers.servlets;
12  
13  import jakarta.servlet.http.HttpServletRequest;
14  import jakarta.servlet.http.HttpServletResponse;
15  
16  import java.util.ArrayList;
17  import java.util.Collections;
18  import java.util.List;
19  
20  import org.apache.catalina.Context;
21  import org.springframework.beans.factory.annotation.Value;
22  import org.springframework.stereotype.Controller;
23  import org.springframework.web.bind.annotation.RequestMapping;
24  import org.springframework.web.servlet.ModelAndView;
25  
26  import psiprobe.controllers.AbstractContextHandlerController;
27  import psiprobe.model.ServletInfo;
28  import psiprobe.tools.ApplicationUtils;
29  
30  
31  
32  
33  
34  @Controller
35  public class ListServletsController extends AbstractContextHandlerController {
36  
37    @RequestMapping(path = "/servlets.ajax")
38    @Override
39    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
40        throws Exception {
41      return super.handleRequest(request, response);
42    }
43  
44    @Override
45    protected ModelAndView handleContext(String contextName, Context context,
46        HttpServletRequest request, HttpServletResponse response) throws Exception {
47  
48      List<Context> ctxs;
49      if (context == null) {
50        ctxs = getContainerWrapper().getTomcatContainer().findContexts();
51      } else {
52        ctxs = new ArrayList<>();
53        ctxs.add(context);
54      }
55  
56      List<ServletInfo> servlets = new ArrayList<>();
57      for (Context ctx : ctxs) {
58        if (ctx != null) {
59          List<ServletInfo> appServlets = ApplicationUtils.getApplicationServlets(ctx);
60          for (ServletInfo svlt : appServlets) {
61            Collections.sort(svlt.getMappings());
62          }
63          servlets.addAll(appServlets);
64        }
65      }
66  
67      return new ModelAndView(getViewName(), "servlets", servlets);
68    }
69  
70    @Override
71    protected boolean isContextOptional() {
72      return true;
73    }
74  
75    @Value("ajax/servlets")
76    @Override
77    public void setViewName(String viewName) {
78      super.setViewName(viewName);
79    }
80  
81  }