Servlet3.0随笔笔记

Servlet3.0要求:

  • MyEclipse10.0以上版本
  • Tomcat7.0版本以上
  • 创建JavaEE6.0应用

新特性:

  • 注解代替web.xml
  • 异步处理
  • 对上传的支持

注解替代配置文件

  1. 删除web.xml
  2. 在Servlet类上添加@WebServlet(urlPatterns={"/AServlet"})
/**
	传统的servlet配置
	<servlet>
		<servlet-name>AServlet</servlet-name>
		<servlet-class>xxxx.xxx.AServlet</serlvet-class>
		<init-param>  -----可以配置多个
			<param-name>p1</param-name>
			<param-value>v1</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>AServlet</servlet-name>
		<url-pattern>/AServlet</url-pattern> -----可以配置多个
	</servlet-mapping>
*/

@WebServlet(urlPatterns={"/AServlet"})
public class AServlet extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletReponse resp)throws ServletException,IOException{
		resp.getWriter().print("hello servlet3.0");
	}
}

WebFilter和WebListener注解

@WebFilter(urlPatterns="/*")
public class AFilter implements Filter{
	public void doFilter(ServletRequest req,ServletReponse resp,FilterChain chain)throws ServletException,IOException{
		chain.doFilter(request,reponse);
	}
}

@WebListener   //tomcat启动和关闭时分别执行以下两个方法
public class AListener implements ServletContextListener{
	public void contextDestroyed(ServletContext arg0){}
	public void contextInitialized(ServletContext arg0){}
}

异步处理
-在服务器没有结束响应之前,浏览器是看不到响应内容,只有响应结束时,浏览器才能显示结果。
- 在浏览器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束!AsyncContext异步上下文对象,通过request.startAsync(request,response)获取

//非异步,响应必须全部结束后才能显示数据
@WebServlet(urlPatterns={"/AServlet"})
public class AServlet extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletReponse resp)throws ServletException,IOException{
		resp.getWriter().print("hello servlet3.0");
		resp.getWriter().flush();
		try{
			Thread.sleep(3000);
		}catch(InterruptedException e){
		}
		resp.getWriter().print("world!");
	}
}

//异步
@WebServlet(urlPatterns="/AServlet",asyncSupported=true)
public class AServlet extends HttpServlet{
	public void doGet(final HttpServletRequest req,final HttpServletReponse resp)throws ServletException,IOException{
	resp.setContentType("text/html;charset=utf-8");
	/**
		对于IE浏览器,如果不能正常输出,说明响应体大小不足512B,需要多输出一些废话。实际场景中不会出现用异步的情况下还不足512B的情况
		for(int i = 0;i<512;i++){
			resp.getWriter().print("a");
		}
	*/
	//得到异步上下文对象
	 final AsyncContext ac = req.startAsync(req,resp);

	//给上下文对象一个Runnable对象,让它执行这个任务
	ac.start(new Runnable(){
		public void run(){
			try{
				resp.getWriter().print("立即开始");
				resp.getWriter().flush();
				Thread.sleep(2000);
				for(char c = 'A';c<'Z';c++){
					println("kkkkkk");
					Thread.sleep(250);
				}
				//通知Tomcat子线程已经执行结束
				ac.complete();
			}catch(){}
		}
	});
	
}


上传支持:

  • method=“post”
  • entype=“multipart/form-data” 默认值application/x-www-form-rulencoded
  • request.getParameter()不能再用
  • request.getInputStream()使用它来获取表单数据 (1)
    commons-fileupload 用来创建工厂 解析器 使用解析器解析request得到List,每个fileIntem对应表单项(2)

Servlet3.0对上传的支持:
表单不变
不使用commons-fileupload,而是使用提供的上传组件接口(3)

(1)—>(2)—>(3)逐渐替代的过程

上传步骤:

  1. 使用request.getPart(“字段名”) 得到Part实例
  2. Part接口的相关方法获取上传文件类型,获取表单项名称,获取指定头的值,获取上传文件的大小,获取上传文件内容,把上传文件保存到指定路径下
    默认Servlet不支持上传,需要添加注解@MultipartConfig
//页面表单
<form action="<c:url value='/AServlet'/>" method="post" enctype="multipart/form-data">
	<input type="file" name="resume"/>
	提交....
</form>

@WebServlet(urlPatterns={"/AServlet"})
@MultipartConfig
public class AServlet extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletReponse resp)throws ServletException,IOException{
	Part part = req.getPart("resume"); //获取表单字段

	//从part中获取数据
	part.getContentType();
	part.getSize();
	part.getName();
	part.getHeader("content-Disposition");//获取头,包含上传文件名称
	part.write("C:/xx.jpg");//保存文件路径

	//没有提供获取上传文件的名称,只能自行截取字符串,头中包含了上传文件的名称
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值