1.监听器的注解 @WebListener 作用于Listener上
2.过滤器的使用:@WebFilter(urlPatterns=”/AFilter”)
3.删除web.xml
在Servlet类上添加@WebServlet(urlPatterns=”AServlet”)
总结:
注解的好处,配置信息少!
注解的缺点,不方便修改!
4.异步:
1.什么是异步处理
原来,在服务器没有结束响应之前,浏览器是看不到响应内容的。只有在响应结束时,浏览器才会显示出结果!
现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应的内容了,不用等待服务器响应结束!
2.实现异步的步骤
得到AsyncContext,他是异步上下文对象。
AsyncContext ac=request.startAsync(request,response);
给上下文一个Runnable对象,启动它。(给上下文一个任务,让它完成)
aContext.start(new Runnable() {
public void run() {
println("现在马上开始",response);
sleep(2000);
for(char c='A';c<'Z';c++) {
println(c+"",response);
sleep(100);
}
//通知服务器结束了
aContext.complete();
}
});
@WebServlet(urlPatterns="/AServlet",asyncSupported=true)
response.setContentType("text/html;charset=utf-8;");
IE如果不能正常输出,表示响应体大小不足512B,可以添加字段
aContext.complete(); //通知服务器执行结束了
5.上传功能
上传对表单的要求
method=”post”
enctype=”multipart/form-data”,他的默认值是:application/x-www.-form-urlencoded
上传Servlet的要求
request.getParamerter()bu不能再用
request.getinputStream()使用它来获取整个表单的数据!
commons-fileupload
创建工厂
解析器
使用解析器来解析request对象,得到list
Serrvlet3.0 对上传提供了支持。
表单不变
在servlet中不需要再使用commons-fileload 而是使用servlet3.0提供的上传组件接口
上传的步骤:
使用request.getPart(“字段名”),得到Part实例;
Part:
String getContentType(): 获取上传文件的MIME类型
String getName(); 获取表单项的名称,不是文件名称
String getHead(String header) ; 获取指定头的值
long getSize(); 获取上传文件的大小
InputStream getInputStream();获取上传文件的内容
void write(String fileName) ; 把上传文件保存到指定路径上
默认Servlet是不支持上传的,需要给Servlet添加一个注解@MultipartConfig ,这个属性可以让其支持注解
这里记得加上注解。
@WebServlet(“/BServlet”)
@MultipartConfig
public class BServlet extends HttpServlet {
以下为get方法中的代码,注意添加
request.setCharacterEncoding(“UTF-8”);
String userName =request.getParameter(“username”);
/*
* 获取文件表单字段。对应的Part对象
* */
Part part =request.getPart(“resume”);
/*
* 从Part中获取需要的数据
* */
//获取上传文件的MIME类型
System.out.println(part.getContentType());
//获取上传文件的字节数
System.out.println(part.getSize());
//获取文件字段名称
System.out.println(part.getName());
//获取头,这个头中包含上传文件的名称
part.getHeader(“Content-Disposition”);
//保存上传文件
part.write(“C:/xxxxx.jgp”);
前端页面不在编写,只需写一个含有file属性的input。和一个支持上传的form表单