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的更多相关文章
随机推荐
- C#中对泛型List进行分组输出元素
背景:在输出列表时,往往需要按照某一字段进行分组,比如在输出城市列表时,按照首字母进行分组,输出学生列表时,按照年级进行分组,然后再对分组的结果按照其他的字段进行排序. 如存在以下STU学生类,代码如 ...
- 【】关闭QQ右下角各种弹框
[]关闭QQ右下角弹框 一: 二: 超级会员设置过滤(屏蔽)广告后可以过滤哪些广告? 1.可以过滤QQ客户端好友聊天对话框右侧出现的Flash广告.左下角的文案广告: 如图: 2.可以 ...
- react 语法细节总结说明
1.当要获取某个数据列表中的某个字段时,用“.”附加的形式.例如:获取user中的balance字段,用this.props.user.balance 来表示. 2.当要打印某个数据或字段结果时,co ...
- 记第一次开发安卓应用——IT之家RSS阅读器
这个学期学校开了安卓的课程,因为自己一直学习wp的开发,一直用的是.net和Silverlight这一套,也着实没有太多时间投入安卓的方向去,因为想着毕业也不从事安卓的工作,所以也一直没有怎么研究.但 ...
- js正则替换十六进制
var re=/\x62/;//没有0,也没有分号。alert(re.test("blue")); //output "true" 需要使用< 如需显示 ...
- spring boot学习02【如何在spring boot项目中访问jsp】
1.配置application.properties文件 打开application.properties追加 spring.mvc.view.prefix=/WEB-ROOT/ spring.mvc ...
- Java日志实战及解析 - 引导
日志是什么? 程序日志的作用 记录程序运行情况,程序员观察和调试使用 统计分析 日后审计 程序员,开发工程师,架构师等天天打交道. 实际中有4%的代码是日志! http://logging.apach ...
- 在RedHat 5下安装Oracle 10g详解(转)
在RedHat 5下安装Oracle 10g详解(转) Posted on 2012-09-14 13:26 疯狂 阅读(5075) 评论(0) 编辑 收藏 所属分类: database .uni ...
- Python的另一种开发环境--Anaconda中的Spyder
本文作者LucyGill,转载请注明出处(虽然我觉得并不会有人转载). 刚开始学Python的时候,我用的是其自带的idle(安装Python后,在开始菜单里可以找到),后来发现在eclipse中设置 ...
- python学习之 - 时间模块
时间模块模块名:time时间模块的转换流程图. UTC:英国格林威治时间.时间戳作用:是用来进行时间计算的.进行加减时间.注意:时间计算是用秒为单位time.process_time():测量处理器运 ...