您的位置:首页 > 其它

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多了哪些功能



//注解使用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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: