2014-11-25 40 views
0

这是我第一次在一个使用的HttpServlet的Java项目上工作。这个HttpServlet的service()方法到底是什么?

所以我知道的的HttpServlet是一个Web应用程序服务器,并作为从HTTP服务器上的Web浏览器或其他HTTP客户端和数据库或应用程序未来的请求之间的中间层上运行的程序。所以这个servlet扩展了我的应用服务器的能力。

我有一些疑问,以了解这个servlet成立到我的项目,工作完全进入的web.xml文件我发现这个配置:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app PUBLIC 
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
     "http://java.sun.com/dtd/web-app_2_3.dtd">  
<web-app> 

    <display-name>My Project</display-name> 

    <listener> 
     <listener-class>it.sistinf.ediweb.quartz.QuartzListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>edimon</servlet-name>  
     <servlet-class>it.sistinf.ediweb.monitor.servlets.Monitoraggio</servlet-class> 
     <load-on-startup>0</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>edimon</servlet-name>  
     <url-pattern>/edimon.do/*</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>/logon.jsp</welcome-file> 
    </welcome-file-list> 

    <taglib> 
     <taglib-uri>displaytag</taglib-uri> 
     <taglib-location>/WEB-INF/displaytag-11.tld</taglib-location> 
    </taglib> 

</web-app> 

所以,阅读一些文件似乎明白,我有告诉servlet容器(或应用服务器)要部署哪些servlet以及将servlet映射到哪个URL。

在前面的情况下,我配置了一个名为edimonMonitoraggio类实现的servlet。

然后它将该servlet映射到URL或URL模式。在这种情况下,edimon servlet正在与/edimon.do/* URL模式进行映射。所以当它被称为与之前的模式相匹配的东西时,edimon servlet就会执行。

然后进入我的Monitoraggio类实现的HttpServlet我发现服务()方法:

public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
     LoggerMDC.setup(req, res); 
     Logger logger = (Logger) Logger.getStdLogger(Monitoraggio.class); // do not declare 'logger' as static field in order to work with MDC 

     String service = req.getParameter("serv"); 

     char serviceId = Utility.getServizio(req.getParameter("serv")); 

     if (checkSession(req, serviceId) == false) { 
      gotoPage(ConfigurationFactory.getPropertiesPages().getProperty("pagina_errore_session"), req, res); 
      return; 
     } 

     LoggerWatch loggerWatch = new LoggerWatch(Monitoraggio.class, Long.valueOf(System.getProperty(Constants.Keys.CONFIG_STATS_WARNING_THRESHOLD, String.valueOf(LoggerWatch.DEFAULT_WARNING_THRESHOLD))).longValue()); 
     if (logger.isTraceEnabled()) 
      logger.trace("lanciaServizio() | logger threshold: " + loggerWatch.getWarningThreshold()); 

     loggerWatch.start(); 
     loggerWatch.info(new StringBuffer("service() | servizio: [").append(service).append("] | service start").toString()); 

     String paginaDaLanciare = lanciaServizio(serviceId, req, res); 
     String executionTime = loggerWatch.getInfoTime(); 

     //Modifica per export 
     if (req.getSession().getAttribute("export") == null) { 
      gotoPage(paginaDaLanciare, req, res); 
     } 

     loggerWatch.info(new StringBuffer("service() | servizio: [").append(service).append("] | [").append(executionTime).append("] after forward to ").append(paginaDaLanciare).toString(), true); 
     loggerWatch.stop(); 

     req.getSession().removeAttribute("export"); 
     req.getSession().removeAttribute("stringaXML"); 
     req.getSession().removeAttribute("downbyte"); 

     return; 
    } 

对文档的阅读它接收来自公共服务方法标准HTTP请求和将它们发送到在这个类中定义的doXXX方法

那么这种方法究竟做了什么呢?我无法理解servlet如何加载JSP

回答

1

您阅读的文档描述了默认情况下HttpServlet的service()方法的功能。由于您的servlet覆盖了service()方法并提供了不同的实现,因此它不再那样做。相反,它确实...方法中的代码执行的是什么。

一个servlet不会“加载JSP”。我没有看到JSP如何与您发布的servlet代码有任何关系。也许gotoPage()确实告诉容器将请求转发给JSP。您应该查看该方法的文档和/或代码以了解其功能。

相关问题