一、Annotation 进行配置不需要 web.xml

新建new Servlet 时,不需要在web.xml 文件中生成Servlet的相关信息

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="MyServlet",urlPatterns={"/MyServlet"})
public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.print("hello Filter");
} }

1.Servlet

只需要在java源文件的Servlet类前面加上:
    @WebServlet(name="",urlPatterns={""},initParams=                {@WebInitParam(name="",value=""),loadOnStartup=1})
  public class MyServlet extends HttpServlet{}

2.Filter

只需要在java源文件的Filter类前面加上@WebFilter(filterName="MyFilter",urlPatterns="/MyFilter",servletNames={"MyServlet"})

现在只需要在java源文件的Listener类前面加上
@WebListener即可;

二、模块化编程

三、Servlet异步处理

Servlet作为MVC中的控制器,控制器负责分发任务给MODEL完成,然后把结果交给JSP页面显示而如果有许多MODEL ,其中一个MODEL处理时间很长则会导致整个页面显示很慢。

异步处理关键点: 将复杂业务处理另外开一个线程,而Servlet将执行好的业务先送往jsp输出,等耗时业务做完后再送往jsp页面。

先显示一部分,再显示一部分。

异步处理需要在Annotation中注明asyncSupported=true;

 package test;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="MyServlet",urlPatterns={"/MyServlet"},asyncSupported = true)
public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.print("start...");
System.out.println("start");
//比较耗时的业务
//当前请求延迟
AsyncContext ac = request.startAsync();
//设置超时时间
ac.setTimeout(5*3000);
//启动线程
ac.start(new MyThread(ac));
out.write("<br>end");
System.out.println("end");
out.flush();
} }
class MyThread implements Runnable{
private AsyncContext ac = null;
public MyThread(AsyncContext ac) {
super();
this.ac = ac;
}
@Override
public void run() {
try {
Thread.sleep(3000);
PrintWriter out = ac.getResponse().getWriter();
out.write("<br> 耗时操作完成");
System.out.println("耗时操作完成");
} catch (InterruptedException | IOException e) {
e.printStackTrace();
} } }

四、异步Listener

异步监听器用来监听异步处理事件,只需要实现AsyncListener接口即可。

此接口有四个方法:

 public void onStartAsync(AsyncEvent event)throws IOException;
public void onComplete(AsyncEvent event);
public void onTimeout(AsyncEvent event);
public void onError(AsyncEvent event);

五、文件上传API简化

原本文件上传时通过common-fileeuupload或者SmartUpload,上传比较麻烦,在servlet3.0中不需要导入第三方jar包,并且提供了很方便的文件上传功能。

注意点:

  1. html中<input type="file">表示文件上传控件;
  2. form的enctype = "multipart/form-data";
  3. 在servlet类前加上@MultipartConfig
  4. request.getPart()获得

Servlet8的更多相关文章

随机推荐

  1. 【POJ 1061】青蛙的约会(EXGCD)

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  2. NOI模拟赛(3.13)Hike (远行)

    Description Mirada生活的城市中有N个小镇,一开始小镇之间没有任何道路连接.随着经济发展,小镇之间陆续建起了一些双向的道路,但是由于经济不太发达,在建设过程中,会保证对于任意两个小镇, ...

  3. ArrayList集合的遍历

    ArrayLIstDemo3.java import java.util.ArrayList; public class ArrayListDemo3 { public static void mai ...

  4. Python模块学习 - openpyxl读写excel

    openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...

  5. 如何安装python包

    安装python包有两种方法: 使用Python包管理器pip工具 在Linux系统中,首先 yum install python-pip 然后就可以欢快的pip install *** 啦 源代码安 ...

  6. XTU 二分图和网络流 练习题 J. Drainage Ditches

    J. Drainage Ditches Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Ja ...

  7. PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的 ...

  8. 使用RMAN恢复数据库

    使用RMAN恢复数据库 由于需要搭建一个测试环境,把上周末的一个全备拿出来做恢复,首先备份一下测试库上现有的重要表: exp banping/bangping@ERPTEST file=f:\2009 ...

  9. spring security3.1升级到4.1问题(1)访问/j_spring_security_check 404

    升级完后,发现登录不进去,把post改成get好了,但是系统的提交表单功能都不能用了,也是解决了很长时间,最后找到了根本原因. spring sercurity 4.0 csrf保护是默认开启的,cs ...

  10. 汕头市赛srm10 T2

    n个数,分组,数Ai要在至少含有Ai个数的组,求最多分多少组. 方法一:大的数应该尽量跟大的在一起,这样才能让小的出现很多很多组,所以从大到小排序,给当前序列中最大的数x分x个数.代码如下: #inc ...