@WebServlet註解配置Servlet
從Servlet3.0開始,配置Servlet支持註解方式,但還是保留了配置web.xml方式,所有使用Servlet有兩種方式:
- Servlet類上使用@WebServlet註解進行配置
- web.xml文件中配置
@WebServlet常用屬性
屬性 | 類型 | 是否必須 | 說明 |
---|---|---|---|
asyncSupported | boolean | 否 | 指定Servlet是否支持異步操作模式 |
displayName | String | 否 | 指定Servlet顯示名稱 |
initParams | WebInitParam[] | 否 | 配置初始化參數 |
loadOnStartup | int | 否 | 標記容器是否在應用啓動時就加載這個Servlet |
name | String | 否 | 指定Servlet名稱 |
urlPatterns/value | String[] | 否 | 這兩個屬性作用相同,指定Servlet處理的url |
1.UserServlet
- @WebServlet(name = "myUserServlet",
- urlPatterns = "/user/test",
- loadOnStartup = 1,
- initParams = {
- @WebInitParam(name="name", value="小明"),
- @WebInitParam(name="pwd", value="123456")
- }
- )
- public class UserServlet extends HttpServlet {
- private static final long serialVersionUID = 7109220574468622594L;
- @Override
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- System.out.println("servlet初始化...");
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("text/html");
- response.setCharacterEncoding("utf-8");
- PrintWriter pw = response.getWriter();
- pw.append("Hello Servlet!<br>" );
- //servletName
- pw.append("servletName:" + getServletName() + "<br>");
- //initParam
- ServletConfig servletConfig = this.getServletConfig();
- Enumeration<String> paramNames = servletConfig.getInitParameterNames();
- while (paramNames.hasMoreElements()) {
- String paramName = paramNames.nextElement();
- pw.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>");
- }
- pw.close();
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }
2.測試結果
2.1應用啓動時,servlet就會初始化,因爲配置了loadOnStartup=1
2.2訪問/user/test,頁面上顯示結果;表名參數正確初始化以及自定義的servlet名稱
3.注
- <web-app> </web-app>根元素中不能配置屬性metadata-complete="true",否則無法加載Servlet。metadata-complete屬性表示通知Web容器是否尋找註解,默認不寫或者設置false,容器會掃描註解和Web分片,爲Web應用程序構建有效的元數據;設置true,表示將由部署描述符爲Web程序提供所有的配置信息
- web.xml中不能再配置該Servlet
- /*或者/:攔截所有
- *.do:攔截指定後綴
- /user/test:攔截路徑
- /user/*.do、/*.do、test*.do都是非法的,啓動時候會報錯