【問題描述】
成都創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè), 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。最近公司安排我面試Java的FreshMan,面試者一般是工作1年多點(diǎn)的新人(這里我就裝老一下,其實(shí)我也才工作3年不到),在被問及Struts1和Struts2的Action的線程安全問題的時候,大多是支支吾吾,答不出所以然。所以在這里我整理一下我個人的理解。
【問題答案】
這是由于Servlet的工作原理產(chǎn)生的。我們先來簡單回顧一下Servlet的生命周期“初始化->init->service->destroy->卸載”。
這里大家都知道,我們在web.xml里面定義一個servlet的時候,我們可以給他們設(shè)置一個“l(fā)oad-on-startup” 的值,如果 Servlet 的 load-on-startup 配置項(xiàng)大于 0,那么在 Context 容器啟動的時候就會被實(shí)例化,并且tomcat給每一個servlet加載并且實(shí)例化一個對象(注解:也就是說,我們用戶在web.xml里面配置的每一個servlet都會被實(shí)例成一個servlet對象)
a, 下面的配置表示會有兩個servlet對象被實(shí)例化,即使他們對應(yīng)的是同一個servlet class
<?xml version="1.0" encoding="UTF-8"?>ServletTest1 web.servlet.ServletTest1 ServletTest1 /servlet/ServletTest1 ServletTest2 web.servlet.ServletTest1 ServletTest2 /servlet/ServletTest1