sevlet 注释initparams_@WebServlet注解下 各属性说明

一、@WebServlet 注解属性说明

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documentedpublic @interfaceWebServlet {

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的匹配模式,等价于

loadOnStartup

int

指定Servlet的加载顺序

initParams

webInitParam[]

指定初始化参数

asyncSupported

boolean

是否支持异步操作

description

String

描述

displayName

String

servlet显示名

二、属性说明

1.initParams:

initParams={@WebInitParam(paramName="zsms",paramValue="醉生梦死")//在服务器初始化的时候会打印,因为调用Init方法}

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.kenny.servlet;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebInitParam;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;/*** asyncSupported = true 是否支持异步请求*/@WebServlet(value= "/hello",asyncSupported = true,initParams ={

@WebInitParam(name="name",value = "Kenny"),

@WebInitParam(name="age",value = "20")

}

)public class HelloServlet extendsHttpServlet {

String name;

String age;

@Overridepublic void init(ServletConfig config) throwsServletException {

name= config.getInitParameter("name");

age= config.getInitParameter("age");

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

}

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, 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

模拟代码,可以打开多个浏览器查看

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//Servlet

packagecom.kenny.servlet;importjavax.servlet.AsyncContext;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.Date;

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

@Overridepublic voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsIOException, 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(newExecutor(ctx)).start();

out.println("结束Servlet的时间:" + new Date() + ".");

out.flush();

}

}//模拟多线程

packagecom.kenny.servlet;importjavax.servlet.AsyncContext;importjava.io.PrintWriter;importjava.util.Date;public class Executor implementsRunnable {private AsyncContext ctx = null;publicExecutor(AsyncContext ctx){this.ctx =ctx;

}public voidrun(){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();

}

}

}

支持多线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值