版權聲明:歡迎大家轉載,轉載請註明出處blog.csdn.net/tantexian。 https://blog.csdn.net/tantexian/article/details/50414368
Servlet3.0中Servlet的使用
目錄
1.註解配置
2.異步調用
3.文件上傳
相對於之前的版本,Servlet3.0中的Servlet有以下改進:
l 支持註解配置。
l 支持異步調用。
l 直接有對文件上傳的支持。
在這篇文章中我將主要講這三方面的應用示例。
1.註解配置
在以往我們的Servlet都需要在web.xml文件中進行配置(Servlet3.0同樣支持),但是在Servlet3.0中引入了註解,我們只需要在對應的Servlet類上使用@WebServlet註解進行標記,我們的應用啓動之後就可以訪問到該Servlet。對於一個@WebServlet而言,有一個屬性是必須要的,那就是它的訪問路徑。@WebServlet中有兩個屬性可以用來表示Servlet的訪問路徑,分別是value和urlPatterns。value和urlPatterns都是數組形式,表示我們可以把一個Servlet映射到多個訪問路徑,但是value和urlPatterns不能同時使用。如果同時使用了value和urlPatterns,我們的Servlet是無法訪問到的。下面是一個使用@WebServlet的簡單Servlet示例。
Java代碼 收藏代碼
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* Servlet3.0支持使用註解配置Servlet。我們只需在Servlet對應的類上使用@WebServlet進行標註,
* 我們就可以訪問到該Servlet了,而不需要再在web.xml文件中進行配置。@WebServlet的urlPatterns
* 和value屬性都可以用來表示Servlet的部署路徑,它們都是對應的一個數組。
*/
@WebServlet(name="exampleServlet", urlPatterns="/servlet/example")
public class ExampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello User.");
}
}
初始化參數
使用@WebServlet時也可以配置初始化參數,它是通過@WebServlet的initParams參數來指定的。initParams是一個@WebInitParam數組,每一個@WebInitParam代表一個初始化參數。
Java代碼 收藏代碼
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 帶初始化參數的Servlet
* WebServlet的屬性initParams可以用來指定當前Servlet的初始化參數,它是一個數組,
* 裏面每一個@WebInitParam表示一個參數。
*/
@WebServlet(value="/servlet/init-param", initParams={@WebInitParam(name="param1", value="value1")})
public class WebInitParamServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Enumeration<String> paramNames = this.getServletConfig().getInitParameterNames();
String paramName;
while (paramNames.hasMoreElements()) {
paramName = paramNames.nextElement();
resp.getWriter().append(paramName + " = " + this.getServletConfig().getInitParameter(paramName));
}
resp.getWriter().close();
}
}
Servlet3.0提供了註解(annotation),使得不再需要在web.xml文件中進行Servlet的部署描述。
在Servlet3.0中,可以使用@WebServlet註解將一個繼承於javax.servlet.http.HttpServlet的類標註爲可以處理用戶請求的Servlet。
@WebServlet註解的相關屬性 | ||
NO. | 屬性名 | 描述 |
1 | asyncSupported | 聲明Servlet是否支持異步操作模式 |
2 | description | Servlet的描述信息 |
3 | displayName | Servlet的顯示名稱 |
3 | initParams | Servlet的初始化參數 |
5 | name | Servlet的名稱 |
6 | urlPatterns | Servlet的訪問URL |
7 | value | Servlet的訪問URL |
Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
也定義多個URL訪問:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})