Servlet8
一、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包,并且提供了很方便的文件上传功能。
注意点:
- html中<input type="file">表示文件上传控件;
- form的enctype = "multipart/form-data";
- 在servlet类前加上@MultipartConfig
- request.getPart()获得
Servlet8的更多相关文章
随机推荐
- 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)
网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...
- 单机安装hadoop集群
一 .安装前准备 1.VMware虚拟内容 2.Linux系统 (CentOS-6.9-min) 镜像文件http://vault.centos.org/ 3.jdk 1.8 rpm或bin文件 ht ...
- hadoop格式化出错,提示IO异常
配置好hadoop之后,在进行格式化的时候出现异常,原因是由于在core-site.xml 配置文件中写的路径格式不对. 不需要加 file:/ 或者 file:// 直接写绝对路径就行. <c ...
- iptables工具
http://www.linuxidc.com/Linux/2012-12/77074.htm iptables 指令 语法: iptables [-t table] command [match] ...
- [Docker]容器的隔离与限制
1.Docker事实 1)容器技术的兴起源于Pass技术的普及 2)Docker公司发布的Docker项目具有里程碑式的意义 3)Docker项目通过容器镜像解决了应用打包这个根本性难题 4)容器本身 ...
- 【概率dp】D. Card Collector
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/D [题意] 为了集齐n张卡片,必须要买多少袋零食?题目给定每种卡片出现在零食中的 ...
- 【POJ2774&Ural1517】Long Long Message(后缀数组)
题意:求两个字符串的最长公共子串 n<=1000 思路:这是一道论文题 ..]of longint; n,l1,l2,i,ans,m,l,r:longint; ch:ansistring; pr ...
- THUWC2018 暴力+爆炸记
Day 0 没有Day0. Day 1 签到然后去宿舍,环境还行,比某偏远山区要强多了,不过这热水有点难拿??看RP有遇到煮好水的饮水机就拿,没有就苟矿泉水. 中午,那个餐还是挺好吃的,不过餐费40就 ...
- msp430入门编程12
msp430中C语言的模块化头文件及库文件12 msp430入门学习 msp430入门编程
- QueenAttack
问题分析: 1.对于行和列,要求得每行或每列的棋子个数,只需要把横坐标或纵坐标相同的棋子数目相加即可,然后使用k*(k-1)/2就可求得攻击次数 2.对于对角线上的点,需要分析对角线上点的坐标关系.分 ...