Java Servlet 3.0新特性例子
Servlet3.0 特性:
1.Servlet、Filter、Listener無需在web.xml中進行配置,可以通過Annotation進行配置;
2.模塊化編程,即將各個Servlet模塊化,將配置文件也分開配置。
3.Servlet異步處理,應對復雜業務處理;
4.異步Listener,對于異步處理的創建、完成等進行監聽;
5. 文件上傳API簡化;
備注:tomcat7.0 以上才支持servlet3.0
servlet 3.0 目的:
1:簡化了開發
2:模塊化的結構更易于部署
特性1---------------------------------------------------------------------------------------------------------
有了Annotation 就大大簡化了web.xml ,一個servlet 的定義無需在web.xml寫入任何代碼:
原來定義servlet 的方式:
<servlet>
<servlet-name></servlet-name>
<servler-class></servlet-class>
<load-on-startup></load-on-startup>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; /* * 解釋: name :當前Servlet 的名稱 urlPatterns :當前Servlet 請求url loadOnStartup: tomcat 啟動時就初始化改Servlet initParam:初始化參數(可以是多個) name:參數名 value :參數值 */ @WebServlet(name = "MyServlet", urlPatterns = { "/myServlet" }, loadOnStartup = 1, initParams = { @WebInitParam(name = "name", value = "java developer"), @WebInitParam(name = "age", value = "20") }) public class MyServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("調用do get 方法; "); String name = getInitParameter("name"); System.out.println("獲取初始化參數:" + name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } public void init(ServletConfig config) throws ServletException { System.out.println("Servlet 初始化"); super.init(config); } }
這樣就完成了一個servlet 的定義,通過瀏覽器訪問該servlet 看效果吧。
同理 filter 和 listener 的定義 也可以通過注釋來完成。
注釋方式:
Filter :
@WebFilter(filterName="",urlPattern={"/"});
Listener:
@WebListener
-------------------------------------------------------------------------
另外補一下servlet 中 doget、dopost、service 方法區別
當servlet 中重寫了父類的 service 后,即聲明了當前servlet 用來處理業務而非跳轉,此時goget、dopost 方法失效。
大白話:
需要servlet 跳轉的 就用 doget、dopost ,此時別重寫父類的service 方法。
需要servlet 處理業務不進行跳轉的 就重新父類的service方法。