博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Azkaban的Web Server源码探究系列10 : /对应的servlet解析
阅读量:6942 次
发布时间:2019-06-27

本文共 3090 字,大约阅读时间需要 10 分钟。

hot3.png

如果请求的URI是"/",对应的servlet如何响应?

===================================================================

ServletHolder indexRedirect = new ServletHolder(new IndexRedirectServlet(defaultServletPath));

root.addServlet(indexRedirect, "/");

===================================================================

所以需要分析IndexRedirectServlet

  1)servlet的init方法

这里涉及到了3个类,分别是:

IndexRedirectServlet   LoginAbstractAzkabanServlet   AbstractAzkabanServlet

首先找这3个类的init方法---第一个init方法在LoginAbstractAzkabanServlet  

所以需要从这个类的init方法开始看

AbstractAzkabanServlet.init

@Override

  public void init(ServletConfig config) throws ServletException {

  //看到这里了

    application =//获取之前的server实例

        (AzkabanServer) config.getServletContext().getAttribute(

            AzkabanServletContextListener.AZKABAN_SERVLET_CONTEXT_KEY);

 

    if (application == null) {

      throw new IllegalStateException(

          "No batch application is defined in the servlet context!");

    }

  //看到这里了

    Props props = application.getServerProps();

  //看到这里了

    name = props.getString("azkaban.name", "");//获取名字

    label = props.getString("azkaban.label", "");//label

    color = props.getString("azkaban.color", "#FF0000");//颜色

 

    if (application instanceof AzkabanWebServer) {

//

      AzkabanWebServer server = (AzkabanWebServer) application;//转化

      //

      viewerPlugins = PluginRegistry.getRegistry().getViewerPlugins();//内容为空

      //

      triggerPlugins =

          new ArrayList<TriggerPlugin>(server.getTriggerPlugins().values());

    }

  }

---然后是

LoginAbstractAzkabanServlet.init

 

@Override

  public void init(ServletConfig config) throws ServletException {

    super.init(config);

    //继续

    multipartParser = new MultipartParser(DEFAULT_UPLOAD_DISK_SPOOL_SIZE);

    //上面是通过commons-upload来获取

    shouldLogRawUserAgent =

        getApplication().getServerProps().getBoolean("accesslog.raw.useragent",

            false);

  }

 

 -------------------

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// Set session id

// 入口在这

//获取session

Session session = getSessionFromRequest(req);

//记录本次访问行为

logRequest(req, session);

//第1次不执行

if (hasParam(req, "logout")) {

resp.sendRedirect(req.getContextPath());

if (session != null) {

getApplication().getSessionCache().removeSession(session.getSessionId());

}

return;

}

//不执行

if (session != null) {

if (logger.isDebugEnabled()) {

logger.debug("Found session " + session.getUser());

}

if (handleFileGet(req, resp)) {

return;

}

 

handleGet(req, resp, session);

} else {

if (hasParam(req, "ajax")) {

HashMap<String, String> retVal = new HashMap<String, String>();

retVal.put("error", "session");

this.writeJSON(resp, retVal);

} else {

//真正处理逻辑

handleLogin(req, resp);

}

}

}

所以,需要继续查看handleLogin的代码

private void handleLogin(HttpServletRequest req, HttpServletResponse resp, String errorMsg)

throws ServletException, IOException {

//1)生成数据

Page page = newPage(req, resp, "azkaban/webapp/servlet/velocity/login.vm");

if (errorMsg != null) {

page.add("errorMsg", errorMsg);

}

//渲染

page.render();

}

这部分跟springMVC就类似了,就不细说了!

主要看下azkaban/webapp/servlet/velocity/login.vm的内容

210539_15WF_1382024.png

好,所以,,我们就能看到了

211709_phyB_1382024.png

怎么样,是不是很酷

 

---

通过学习azkaban,可以了解以下知识

Jetty  DBUtils  Velocity(渲染)。

 

 

 

转载于:https://my.oschina.net/qiangzigege/blog/655095

你可能感兴趣的文章
Python的OO思想
查看>>
苹果定律
查看>>
java核心基础 --- String.intern
查看>>
Python破解zip密码
查看>>
Linux 网络服务之SMB垮平台 文件传输
查看>>
服务器扫描发现漏洞-可通过HTTP获取远端WWW服务信息
查看>>
我的友情链接
查看>>
装SQL Server2000时,单击安装文件,无反应,任务管理器中有安装进程的解决办法...
查看>>
从构建分布式秒杀系统聊聊验证码
查看>>
lua和c语言的交互详解(真的是非常详细)
查看>>
基础篇--ip地址与子网掩码的认识
查看>>
Mongodb 读写分离
查看>>
跨平台的.NET邮件协议MailKit组件解析
查看>>
MySQL隔离级别实验
查看>>
我的友情链接
查看>>
用Java实现AES/CBC/PKCS7Padding加解密
查看>>
Nginx upstream 的几种分配方式
查看>>
Oracle ora-01555解决方法
查看>>
如何从100万个数中找出最大的前100个数
查看>>
Python:编写HTTP Server处理GET请求
查看>>