這是我第一次在一個使用的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。
在前面的情況下,我配置了一個名爲edimon由Monitoraggio類實現的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