设为首页 收藏本站
查看: 1095|回复: 0

[经验分享] Solr4.8.0源码分析(1)之Solr的Servlet

[复制链接]

尚未签到

发表于 2015-7-16 12:37:01 | 显示全部楼层 |阅读模式
  Solr是作为一个Servlet运行在Tomcat里面的,可以查看Solr的web.xml。

1.web.xml配置
  由web.xml可以看出,基本上所有Solr的操作都是在SolrDispatchFilter中实现的。当输入http://localhost:8080/solr/前缀的URL就会触发SolrDispatchFilter.



1   
2     SolrRequestFilter
3     org.apache.solr.servlet.SolrDispatchFilter
4     
5       path-prefix
6       /xxx
7     
8   
9
10   
11     SolrRequestFilter
12     /*
13   
14   
15     RedirectOldAdminUI
16     org.apache.solr.servlet.RedirectServlet
17     
18       destination
19       ${context}/#/
20     
21   
22   
23     RedirectOldAdminUI
24     /admin/
25   
  

2. SolrDispatchFilter的实现
  SolrDispatchFilter继承了Filter,实现主要分为三个接口:init,dofilter,destory。其中init和destory分别在tomcat的启动和关闭时候进行。



1  /**
2   *初始化,当tomcat启动时候开始初始化,其中主要调用createCoreContainer来实现Solr的初始化
3   */
4 public void init(FilterConfig config) throws ServletException
5   {
6     log.info("SolrDispatchFilter.init()");
7
8     try {
9       // web.xml configuration
10       this.pathPrefix = config.getInitParameter( "path-prefix" );
11
12       this.cores = createCoreContainer();
13       log.info("user.dir=" + System.getProperty("user.dir"));
14     }
15     catch( Throwable t ) {
16       // catch this so our filter still works
17       log.error( "Could not start Solr. Check solr/home property and the logs");
18       SolrCore.log( t );
19       if (t instanceof Error) {
20         throw (Error) t;
21       }
22     }
23
24     log.info("SolrDispatchFilter.init() done");
25   }
26   /**
27    * filter接口的具体实现,这里主要实现了主要的Solr功能
28    */
29   @Override
30   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
31     doFilter(request, response, chain, false);
32   }
33
34   /**
35    * 关闭Solr
36    */
37   @Override
38   public void destroy() {
39     if (cores != null) {
40       cores.shutdown();
41       cores = null;
42     }   
43   }
44 }
  

3.Servlet的实现
  通过查看web.xml以及源码可以看到,虽然Solr继承并实现了Servlet接口,但是Solr的主要操作却是主要集中在dofilter里面。以RedictServlet为例,它主要实现了http的重定向功能。从web.xml配置中可以看到,当url为solr/admin时候就会重定向为solr/#/



1 /**
2  * A Simple redirection servlet to help us deprecate old UI elements
3  */
4 public class RedirectServlet extends BaseSolrServlet {
5   
6   static final String CONTEXT_KEY = "${context}";
7   
8   String destination;
9   int code = HttpServletResponse.SC_MOVED_PERMANENTLY;
10   
11   @Override
12   public void init(ServletConfig config) throws ServletException {
13     super.init(config);
14     
15     destination = config.getInitParameter("destination");
16     if(destination==null) {
17       throw new ServletException("RedirectServlet missing destination configuration");
18     }
19     if( "false".equals(config.getInitParameter("permanent") )) {
20       code = HttpServletResponse.SC_MOVED_TEMPORARILY;
21     }
22         // 获取重定向的url 解析init-param 获取destination值
23     // Replace the context key
24     if(destination.startsWith(CONTEXT_KEY)) {
25       destination = config.getServletContext().getContextPath()
26           +destination.substring(CONTEXT_KEY.length());
27     }
28   }
29   
30   @Override
31   public void doGet(HttpServletRequest req, HttpServletResponse res)
32           throws ServletException,IOException {
33      
34     res.setStatus(code);
35     res.setHeader("Location", destination);
36   }
37
38 }
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87307-1-1.html 上篇帖子: solr定时增量索引 下篇帖子: SOLR 中 Schema.xml 的filedType 的一些属性的理解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表