Servlet3.0新特性
2016-02-08 17:44
148 查看
JavaEE5.0:Servlet2.5
JavaEE6.0:Servlet3.0
1、前提:
Tomcat7.X JDK6.X
2、Servlet3.0比Servlet2.5多了哪些功能
Cookie的httpOnly属性:如果为true,则客户端脚本获取不到浏览器缓存的cookie数据(安全)
JavaEE6.0:Servlet3.0
1、前提:
Tomcat7.X JDK6.X
2、Servlet3.0比Servlet2.5多了哪些功能
//注解使用servlet url映射 @WebServlet(urlPatterns="/servlet/ServletDemo1", initParams=@WebInitParam(name="encoding",value="ANNVAUE")) //注册配置的和web.xml配置的都会实例化一次 //建议:要么用注解,要么用web.xml public class ServletDemo1 extends HttpServlet { public void init() throws ServletException { System.out.println("初始化了"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(this); System.out.println("ServletDemo1执行了"); String value = getServletConfig().getInitParameter("encoding"); System.out.println(value); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
<body> <form action="${pageContext.request.contextPath}/servlet/UploadServlet" method="post" enctype="multipart/form-data"> name:<input type="text" name="name"/><br/> file:<input type="file" name="photo"/><br/> <input type="submit" value="上传"/> </form> </body>
@WebServlet("/servlet/UploadServlet") @MultipartConfig //告知处理的是multipart/form-data类型的数据 public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Collection<Part> parts = request.getParts(); //获取所有的parts :mime协议 // for(Part p:parts) // System.out.println(p); //传统方式获取参数能用了 // String name = request.getParameter("name"); //获取上传的文件名 // System.out.println(name); //处理文件上传 Part part = request.getPart("photo"); //获取指定上传的文件part //获取上传文件的文件名 String headerValue = part.getHeader("Content-Disposition");// form-data; name="photo"; filename="AOP.txt" int index = headerValue.indexOf("filename="); String filename = headerValue.substring(index+10, headerValue.length()-1); //直接将上传的文件写入文件目录 part.write(getServletContext().getRealPath("/files")+"/"+filename); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
//注解注册监听器 @WebListener public class MyServletContextListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext实例化了"); } public void contextDestroyed(ServletContextEvent sce) { } }
@WebServlet("/servlet/CookieDemo1") //写一个cookie public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie c = new Cookie("cname", "wfff"); c.setMaxAge(Integer.MAX_VALUE); c.setPath(request.getContextPath()); c.setHttpOnly(true); //设为true ,则浏览器脚本不会读取到cookie response.addCookie(c); response.getWriter().write("write cookie done"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Cookie的httpOnly属性:如果为true,则客户端脚本获取不到浏览器缓存的cookie数据(安全)
@WebServlet("/servlet/CookieDemo2") //读取写的cookie public class CookieDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cs[] = request.getCookies(); for(int i=0;cs!=null&&i<cs.length;i++){ if("cname".equals(cs[i].getName())){ //读取cookie response.getWriter().write(cs[i].getValue()); return; } } response.getWriter().write("no cookie"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
//异步注解请求 @WebServlet(urlPatterns="/RegistServlet",asyncSupported=true) public class RegistServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.write("RegistServlet开始运行了<br/>"); out.flush(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } out.write("注册成功了<br/>"); out.flush(); //发送激活邮件 AsyncContext ac = request.startAsync();//开始异步 new Thread(new SendMail(ac)).start();//3秒 out.write("RegistServlet运行结束了<br/>"); out.flush(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } /** * 异步发送emial * @author w7 * */ class SendMail implements Runnable{ private AsyncContext ac; public SendMail(AsyncContext ac) { this.ac= ac; } public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } //打印信息 try { PrintWriter out = ac.getResponse().getWriter(); out.write("邮件发送成功!"); out.flush(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- [Spring实战系列](13)使用注解自动装配
- Android线程池
- Java中的wait(),notify(),join()等方法
- 大型网站图片服务器架构的演进
- Graph
- reading note 1
- Struts2-04-struts2工作原理
- nyist 297 GoroSort
- 对于支付宝进军社交的看法
- Nginx简介
- USACO 5.4.3 点的最小割
- 什么是透明(和Windows主题有关系),研究TLable和TPanel是两个好例子
- 阿里分布式数据库服务实践
- bzoj 2055 80人环游地球(上下界费用流)
- 11款开放中文分词引擎大比拼
- USACO 5.4.2 以后在理解
- LightOJ 1077 - How Many Points? (线段整数点个数)
- 表单与样式
- 解决中文文件名显示乱码的问题
- 网页入门