Servlet8
2024-08-30 16:12:02
一、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()获得
最新文章
- Redis命令拾遗三(列表List类型)
- Python 【第十章】 Django路由
- table-cell实现宽度自适应布局
- jmeter 与 java http
- Solr入门之(1)前言与概述
- 动态加载、移除、替换JS和CSS
- 数据库添加数据I
- Eclipse配置CAS server
- 20160327javaweb 之JSP入门
- Apache Tomcat8必备知识
- ER图与UML图
- KMP算法详解-- 转自Matrix67
- Spring源码学习:第1步--在Spring源码中添加最简单的Demo代码
- Python 的字符串
- C#//字节数组转16进制字符串
- UI设计教程:关于版式设计
- hdu 1695 GCD 【莫比乌斯函数】
- Android窗口背景的优化
- 4、2支持向量机SVM算法实践
- Ubuntu上开启Apache Rewrite功能的方法