Servlet3.0新特性讲解

来源:互联网 发布:兴业银行淘宝白金卡 编辑:程序博客网 时间:2024/05/22 17:33
Servlet3.0新特性讲解
所需要的环境:要求javaEE6.0 tomcat7.0以上。
作用:无需web.xml 配置文件,通过注解方式来替代web中配置文件
在Servlet3.0的web.xml中
<web-app  
        version="3.0"  
        xmlns="http://java.sun.com/xml/ns/javaee"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
</web-app> 


若设置web-app元素的属性 
metadata-complete="true" 将不支持注解技术
不设置 或者 设置为false 将支持注解 技术


1.通过注解替代Servlet中在web.xml中的配置
传统模式设置Servlet:
<servlet>
   <servlet-name>ServletStudy1</servlet-name>
   <servlet-class>com.web.servlet3.ServletStudy1</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>ServletStudy1</servlet-name>
   <url-pattern>/study1</url-pattern>
</servlet-mapping>
Setvlet3.0中通过注解则是:
@WebServlet("/study1")


传统模式设置servlet配置初始化参数:
<servlet>
   <servlet-name>ServletStudy1</servlet-name>
   <servlet-class>com.web.servlet3.ServletStudy1</servlet-class>
<init-param>
   <param-name>feng</param-name>
   <param-value>你每天过的开心吗?</param-value>
</init-param>
</servlet>

<servlet-mapping>
   <servlet-name>ServletStudy1</servlet-name>
   <url-pattern>/study1</url-pattern>
</servlet-mapping> 
Setvlet3.0中通过注解则是:
@WebServlet(value="/study1", initParams={@WebInitParam(name="username", value ="tom") })


注:获取servlet中初始化参数是通过ServletConfig这个对象:
ServletConfig config = this.getServletConfig();
System.out.println(config.getInitParameter("username"));


同样:Filter  Listerer也是:
@WebFilter
@WebListener


2.异步处理支持
在传统的Servlet中若进行线程访问则不能正常得到结果如:
response.setContentType("text/html;charset=utf-8");
final PrintWriter pw = response.getWriter();

pw.write("游戏开始");
new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
try {
pw.write("请等待。。。");
Thread.sleep(5000);
pw.write("完成。。。");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
一访问页面就加载完成,结果不明朗


在servlet3.0中进行异步处理
步骤一:设置异步处理@WebServlet(urlPatterns="/async",asyncSupported=true)
步骤二:启动线程
注:通过asyncContext 获得request response进行操作


AsyncContext asyncContext = request.startAsync();
new Thread(new MyThread(asyncContext)).start();
注:针对业务处理较耗资源时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。


在异步进行处理的时候可以对线程进行监听:
asyncContext.addListener(new AsyncListener() { 


@Override
public void onError(AsyncEvent arg0) throws IOException {
// TODO Auto-generated method stub
//线程出错
}


@Override
public void onStartAsync(AsyncEvent arg0) throws IOException {
// TODO Auto-generated method stub
System.out.println("线程开始");
}


@Override
public void onTimeout(AsyncEvent arg0) throws IOException {
// TODO Auto-generated method stub
//线程超时
}


@Override
public void onComplete(AsyncEvent arg0) throws IOException {
// TODO Auto-generated method stub
System.out.println("线程结束");

}); 


3.添加对文件上传支持
在Servlet3.0中支持对文件的上传:
核心类:Part类
第一步:添加@MultipartConfig 注解 表示对multipart/form-data请求的支持
第二步: 通过文件的name或者Part类
Part part = request.getPart("f");


第三步:
获取文件类型
String contentType = part.getContentType();
获取文件名称 但是需要截取
String fileName = part.getHeader("Content-Disposition");
获取流
InputStream in = part.getInputStream();


注:对应普通控件可以通过getParameter获得普通域数据
   但是getParameter位于getPart操作之前
0 0
原创粉丝点击