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的更多相关文章
随机推荐
- 1. node.js环境搭建 第一行代码
一.NodeJs简介 NodeJS官网上的介绍: Node.js is a platform built on Chrome's JavaScript runtime for easily bui ...
- springMVC 文件上传 HTTP Status 400 – Bad Request
可能原因是:multipartResolver没有配置正确 请看解决方案: <!--文件上传 id必须为multipartResolver,不然报错HTTP Status 400 – Bad R ...
- 【06】Firebug记录Javascript日志
Firebug记录Javascript日志 你可以使用Firebug来生成日志. 这有助于我们调试web页面并发现页面的错误. 在Firefox浏览器中执行以下代码: <!DOCTYPE HTM ...
- python之GUI自定义界面设计 2014-4-10
#自定义界面设计mybutton = Button(parent, **configuration options)也可以这么写mybutton.configure(**options)颜色可以用rg ...
- POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...
- php实现设计模式————单例模式
php实现设计模式————单例模式 什么是单例模式 为什么要使用单例模式 php中有哪些方式实现新建一个对象实例 如何阻止这种实例化实现理想的单例模式 代码实现 什么是单例模式 为什么要使用单例模式 ...
- RQNOJ273 马棚问题
题目描述 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束的时候,必须带所有的马返回马棚,小明有K个马棚.他把他的马排成一排然后跟随它走向马棚,因为他们非常疲劳,小明不想让他的马做过多的移动 ...
- No route info of this topic
使用rocketmq时报错 com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, ...
- python学习之-- socketserver模块
socketserver 模块简化了网络服务器的编写,主要实现并发的处理. 主要有4个类:这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步.sock ...
- Linux内存管理-内核的shmall和shmmax参数(性能调优)(转)
内核的shmall和shmmax参数 SHMMAX=配置了最大的内存segment的大小:这个设置的比SGA_MAX_SIZE大比较好. SHMMIN=最小的内存segment的大小 SHMMNI=整 ...