servlet3.0的问题

  • Servlet3.0与Servlet2.5提供了三个新特性:

* 注解开发   :方便

* 文件上传   :有些API不是特别全.

* 异步请求   :多线程的实现

注解开发:

注解的开发是的整个开发过程中不需要web.xml配置文件。

   web层 

    Servlet  @WebServlet("访问路径")

    Filter     @WebFilter("访问路径")

    Listener @WebListener("访问路径")

service层

    @WebService

文件上传:

    这个上传过程是特别繁琐的,其中获取文件名字需要从发送过来的头部进行String的方法进行截取。使得整个过程繁琐;对于流的对接也不是特别友好。

使用fileUpload工具包来开发有特定的文件项的流的对接。整个开发过程大大节约了时间。

代码:
@WebServlet("/UploadServlet")
@MultipartConfig//表示文件上传注解
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收普通数据:
request.setCharacterEncoding("UTF-8");
String filedesc = request.getParameter("filedesc");
System.out.println("文件描述"+filedesc);
// 接收文件:
Part part = request.getPart("upload"); long size = part.getSize();// 获得文件大小:
System.out.println("文件大小:"+size);
String name = part.getName();
System.out.println("文件表单中的name属性的名称"+name);
// 获得文件名:
String header = part.getHeader("Content-Disposition");
int idx = header.lastIndexOf("filename=\"");
String fileName = header.substring(idx+10, header.length()-1);
System.out.println("文件名:"+fileName);
// 获得文件内容:
InputStream is = part.getInputStream();
// 获得upload的路径:
String path = this.getServletContext().getRealPath("/upload");
OutputStream os = new FileOutputStream(path+"/"+fileName);
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

  异步:异步的实现其实是一个多线程。

/**
* 异步请求的Servlet
*/
@WebServlet(urlPatterns="/AsyncServlet",asyncSupported=true)
public class AsyncServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
AsyncContext context = request.startAsync(request, response);
context.start(new MyRunnable(context)); for(int i = 1;i<=10;i++){
System.out.println(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} } class MyRunnable implements Runnable{
private AsyncContext context;
public MyRunnable(AsyncContext context) {
this.context = context;
}
@Override
public void run() {
for(char i='a';i<='z';i++){
try {
context.getResponse().getWriter().println(i);
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
} }

  

day35(servlet 3.0)的更多相关文章

  1. Servlet 3.0

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  2. 启用Servlet 3.0新特性——注解支持

    Servlet 3.0版本新增注解支持,可是在实际使用中,添加的注解总是不起作用.经过检查,原来是“web.xml”文件的顶级标签“<web-app/>”中的一个叫做“metadata-c ...

  3. Servlet 3.0 异步模式

    Servlet 3.0标准新增了异步处理的支持. 进行异步处理的Servlet和作用于该Servlet的拦截器都必须声明对于异步处理的支持.

  4. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  5. [转]Servlet 3.0 新特性详解

    原文地址:http://blog.csdn.net/xiazdong/article/details/7208316 Servlet 3.0 新特性概览 1.Servlet.Filter.Listen ...

  6. 关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系

    tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connec ...

  7. atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结

    atitit.j2ee 1.5 1.6 的不同跟 Servlet 3.0新特性总结 1. jar比较,j2ee 1.6 添加了许多的jar 1 2. ,Servlet 3.0 2 2.1. 可插性   ...

  8. Ajax轮询以及Comet模式—写在Servlet 3.0发布之前(转)

    2008 年的夏天,偶然在网上闲逛的时候发现了 Comet 技术,人云亦云间,姑且认为它是由 Dojo 的 Alex Russell 在 2006 年提出.在阅读了大量的资料后,萌发出写篇 blog ...

  9. Servlet 3.0 新特性

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

随机推荐

  1. mongodb导入csv结构化数据

    csv数据样本 "103238704","","-jmyuncker@aol.com-","-r4Vp5iL2VbM=-" ...

  2. vue2.0插件

    1.better-scroll 参考网址:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/ better-scroll 是什么 firs ...

  3. webstorm安装配置

    1.webstorm是一款优秀的前端设计工具,在官网下载webstorm.exe文件 官网地址:http://www.jetbrains.com/webstorm/ 2.一直next执行下一步进行安装 ...

  4. XHR的对象及用法

    function  createXHR(){         //检测原生XHR对象是否存在,如果存在刚返回它的新实例:     //如果不存在,则检测ActiveX对象;     //如果两个都不存 ...

  5. 日期控件 DatePicker 在ie8不能用

    过个年,日期控件DatePicker在ie8下突然不能用了,程序也没升级,很是奇怪. 把ie8的“禁用脚本调试”去掉,再次运行,发现提示有脚本错误. 想着可能是兼容性问题,于是把兼容性视图打开运行,还 ...

  6. (轉)JSON.stringify 语法实例讲解

    作用:这个函数的作用主要是为了系列化对象的. 可能有些人对系列化这个词过敏,我的理解很简单.就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的).就这么简单.打个比方说,你有一个 ...

  7. oracle主键修改&设置某一字段可以为null

    1.oracle主键修改 1.1)首先查看需要修改的表的主键名,默认的情况下,数据库会自动分配 select * from user_cons_columns where table_name='表名 ...

  8. Luogu 2173 [ZJOI2012]网络 - LCT

    Solution $LCT$ 直接上$QuQ$ 注意$cut$ 完 需要 $d[u + c * N]--$ 再  $link$,  不然会输出Error 1的哦 Code #include<cs ...

  9. 学习C语言以及C语言基础调查

    学习声乐的心得 你有什么技能比大多人(超过90%以上)更好?   就我个人而言,在所有的兴趣之中,做得比较好的应该属于声乐. 针对这个技能的获取你有什么成功的经验?   我对于声乐处始于兴趣,成功的经 ...

  10. python之常用字符串用法

    1.isdigit=indecimal(判断是否是数字) s=" print(s.isdigit()) 输出为:True 2.format(标识符) a =("I have a { ...