@WebServlet注解下 各屬性說明


一、@WebServlet 注解屬性說明

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default "";

    String[] value() default {};

    String[] urlPatterns() default {};

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}
WebServlet 代碼

1.屬性列表:

屬性名 類型 描述
name String servlet-name,如果沒有顯示指定,該Servlet的取值為全限定名
value String[] 等價於 urlPatterns 屬性,與該屬性不能同時使用
urlPatterns String[] 指定Servlet url的匹配模式,等價於<url-parttern>
loadOnStartup int 指定Servlet的加載順序
initParams webInitParam[] 指定初始化參數
asyncSupported boolean 是否支持異步操作
description String 描述
displayName String servlet顯示名
     

 

 

 

 

 

 

 

 

 

二、屬性說明

1.initParams:

      initParams={@WebInitParam(paramName="zsms",paramValue="醉生夢死")//在服務器初始化的時候會打印,因為調用Init方法}

package com.kenny.servlet;

import javax.servlet.ServletConfig;
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;
import java.io.IOException;

/**
 * asyncSupported = true 是否支持異步請求
 */
@WebServlet(value = "/hello",asyncSupported = true,initParams = {
                                                                    @WebInitParam(name="name",value = "Kenny"),
                                                                    @WebInitParam(name="age",value = "20")
                                                                }
           )
public class HelloServlet extends HttpServlet {

    String name;
    String age;

    @Override
    public void init(ServletConfig config) throws ServletException {
        name = config.getInitParameter("name");
        age = config.getInitParameter("age");

        System.out.println("init--------- name: "+ name +" ,---------- age: "+age);

        super.init(config);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet--------- name: "+ name +" ,---------- age: "+age);

        resp.getWriter().write("hello,thank you "+ name+" ,and you age is "+ age);
    }
}
servlet initParams 事例

 

2.urlPatterns/value(不可以同時使用):

      Servlet 2.5開始,一個servlet可以使用多個url-pattern規則,因此 urlPatterns 屬性也支持數組配置;web.xml 配置下,是采用 servlet-mapping 和當servlet容器接收到瀏覽器發起的一個url請求后,容器會用url減去當前應用的上下文路徑,以剩余的字符串作為servlet映射,假如url是http://localhost:8080/ServletTest/index.do,其應用上下文(context)是ServletTest。http://localhost:8080/ServletTest去掉,用剩下的/index.do部分拿來做servlet的映射匹配;url-pattern映射匹配過程是有優先順序的(精確匹配>路徑匹配>擴展名匹配>缺省匹配)而且當有一個servlet匹配成功以后,就不會去訪問剩下的servlet了。

     可以使用數組方式:urlPatterns={"/servlet/url1","/servlet/url2"}

3.asyncSupported

模擬代碼,可以打開多個瀏覽器查看

//Servlet
package com.kenny.servlet;

import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

@WebServlet(urlPatterns = "/async",asyncSupported = true)
public class AsyncServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException, ServletException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("進入Servlet的時間:" + new Date() + ".");
        out.flush();

        //在子線程中執行業務調用,並由其負責輸出響應,主線程退出
        AsyncContext ctx = req.startAsync();
        new Thread(new Executor(ctx)).start();

        out.println("結束Servlet的時間:" + new Date() + ".");
        out.flush();
    }
}

//模擬多線程
package com.kenny.servlet;

import javax.servlet.AsyncContext;
import java.io.PrintWriter;
import java.util.Date;

    public class Executor implements Runnable {
        private AsyncContext ctx = null;
        public Executor(AsyncContext ctx){
            this.ctx = ctx;
        }

        public void run(){
            try {
                //等待十秒鍾,以模擬業務方法的執行
                Thread.sleep(10000);
                PrintWriter out = ctx.getResponse().getWriter();
                out.println(Thread.currentThread().getId()+"----業務處理完畢的時間:" + new Date() + ".");
                out.flush();
                ctx.complete();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
支持多線程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM