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

  

最新文章

  1. 错误:The Controls collection cannot be modified because the control contains code blocks (i.e. ). .
  2. python实现虚拟茶话会
  3. JavaScript Number 对象 Javascript Array对象 Location 对象方法 String对象方法
  4. hiho_1081_最短路径1
  5. Java解析XMl文件之SAX和DOm方法
  6. css09浮动属性
  7. JSONP跨域的原理解析[转]
  8. [Java聊天室server]实战之二 监听类
  9. 走入PHP-数据类型和字符串语法
  10. 聊聊API网关的作用
  11. Jenkins系列——使用checkstyle进行代码规范检查
  12. ActiveMQ的运用
  13. C++项目中的extern &quot;C&quot; {}(转)
  14. ajax的一些相关
  15. Maven CXF wsdl2Java 给指定名空间设置包名
  16. HTML中多种空格转义字符
  17. 将本地代码提交至gitHub
  18. WiX: uninstall older version of the application
  19. MySQL开启慢查询日志时报Errcode: 13 的解决方法
  20. Aheadof Time Compilation(AOT) vs (JIT)Just In Time compilation approach

热门文章

  1. [z]oracle 创建job
  2. 基于vue的悬浮碰撞窗口(用于打广告的)组件
  3. (转)Java程序员简历模板
  4. hdu 5441 Travel (2015长春网赛)
  5. MFC窗口颜色的设置
  6. C语言学习第一天~Eclipse MinGW环境搭建
  7. Eclipse新建JSP文件的默认编码
  8. Getting svn to ignore files and directories
  9. python输出格式对齐问题
  10. Python module : simuPOP