Servlet3.0
一、要求
1、MyEclipse10.0或以上版本
2、发布到Tomcat7.0或以上版本
二、
1、创建JAVAEE6.0应用
三、概述
注解代替web.xml配额制文件
异步处理
对上传的支持
四、注解代替配置文件
1、删除web.xml
2、在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"})
总结
注解好处:配置信息少
注解缺点:不方便修改
3、在filter类上添加@WebFilter(urlPatterns="/*")
4、在listener类上添加@WebListener【 AListener implements ServletContextListener】
五、异步处理
1、什么是异步处理
在服务器没有结束响应之前,浏览器是看不到响应内容的。只有响应结束时,浏览器才能显示结果。现在异步处理的结果,在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束
2、实现异步的步骤
得到AsyncContext:异步上下文对象
AsyncContext ac =request.startAsync(request,response)
给上下文一个Runnable对象,启动它(给上下文一个任务,让它完成)
ac.start(new Runnable(){
public void run(){
...
}
})
@WebServlet(urlPatterns="/BServlet",asyncSupported=true)
resp.setContentType("text/html;charset=utf-8");
IE如果不能正常输出,说明响应体大小不足512B,需要多输出点废话
AsyncContext
@WebServlet(urlPatterns="/AServlet",
initParams={
@WebInitParam(name="p1",value="v1"),
@WebInitParam(name="p2",value="v2")
},
loadOnStartup=1
)
public class AServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello servlet3.0");
resp.getWriter().print("hello servlet3.0");
}
}
@WebFilter(urlPatterns="/*")
public class AFilter implements Filter {
public AFilter() {
super();
}
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) {
try {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
System.out.println("我在这");
filterChain.doFilter(req, res);
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
@WebListener
public class AListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("die啦啦啦");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("bornlalala ");
}
}
/**
* 添加WebServlet注解
* @author Administrator
*
*/
@WebServlet(urlPatterns="/BServlet",asyncSupported=true)
public class BServlet extends HttpServlet {
@Override
protected void doGet(final HttpServletRequest req,final HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
for (int i = 0; i <=512; i++) {
resp.getWriter().print("a");
}
resp.getWriter().flush();
final AsyncContext ac = req.startAsync(req, resp);
ac.start(new Runnable(){
public void run(){
println("开始<br/>",resp);
sleep(2000);
for(char c = 'A';c<='Z';c++){
println(c+"", resp);
sleep(200);
}
ac.complete();
}
});
}
public void println(String text,HttpServletResponse resp){
try {
resp.getWriter().print(text);
resp.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sleep(long ms){
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}