5.5 关于Servlet 3.0实例
虽然Filter技术是Servlet 2.3增加的功能,但是Servlet 3.0也加强了对该技术的支持。Servlet 3.0是Sun公司于2010年发布的,它的开发者包括许多个人和公司团体,充分体现了Sun公司所倡导的代码开放性原则。由于众多参与者的共同努力,Servlet 3.0的功能强大了很多,而且性能也有了大幅度提高。
5.5.1 关于Servlet 3.0环境的搭建
为了便于程序员开发关于Servlet的程序,MyEclipse开发工具提供了对其的支持。但是Servlet 3.0属于JavaEE 6.0规范,对开发环境和运行环境有一定的要求:
● 编译环境:Java 1.6。
● 服务器环境:如果为Tomcat服务器,则必须是Tomcat 7.0版本以上。
根据MyEclipse开发Web Project项目的向导(如图5.8所示),可以发现其只支持JavaEE 5.0而不支持JavaEE 6.0。
图5.8 Web Project向导
为了解决上述问题,需要重新配置关于开发Servlet 3.0项目的环境,具体步骤如下:
01 从菜单栏中选择“File>New>Web Project”命令,新建一个Web Project项目,在出现的对话框中进行如图5.9所示的设置。即在“Project Name”文本框中输入“annotation”,然后选择JavaEE 5.0版本,其他选项建议为默认值,单击“Finish”按钮完成创建。
图5.9 创建Web项目
02 用鼠标右键单击刚生成的项目中的“src”目录,在弹出的快捷菜单中选择“New>Servlet”命令,创建一个Servlet程序,关于创建Servlet的对话框配置如图5.10所示。单击“Next”按钮就会出现如图5.11所示的对话框,在该对话框中取消对web.xml文件的配置。
图5.10 创建Servlet程序
图5.11 关于web.xml文件配置
03 单击“Finish”按钮,就完成了创建Servlet程序的向导。此时当前项目的目录结构如图5.12所示。通过项目目录可以发现“Java EE 5 Libraries”包含的javaee.jar不支持Servlet 3.0,同时web.xml文件内容为2.5版本,也不支持Servlet 3.0。
图5.12 Servlet程序的目录结构
04 为了解决支持Servlet 3.0的JAR文件,可以通过两种方式来实现:一种是从Servlet的官方网站下载,另一种是加载Tomcat 7.0中的JAR文件。本书采用后一种方式。即创建名为Servlet 3.0的“User Libraries”,JAR文件为Tomcat 7.0根目录下lib文件下的所有JAR文件,如图5.13所示。
图5.13 创建Servlet 3.0用户库
05 通过如图5.14所示的方式移除“JavaEE 5 Libraries”库,然后利用如图5.15所示的方式添加Servlet 3.0用户库,最后该项目的目录结构如图5.16所示。
图5.14 移除库
图5.15 添加用户库
图5.16 目录结构
06 修改web.xml文件,即复制Tomcat 7.0的根目录下conf\web.xml文件内容为该项目的web.xml文件内容,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.0"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
代码说明:
上述配置文件采用的是Servlet 3.0规定的Web程序部署描述格式。
07 最后修改MyEclipse的编译版本为Java 1.6,具体界面如图5.17所示。
图5.17 编译环境
5.5.2 Servlet 3.0示例
Servlet 3.0增加了许多新特性,例如异步处理、注解、可插性等,本章将通过一个具体的实例来演示Servlet 3.0的注解功能。由于Servlet 3.0加强了注解支持、注解的引入,所以使部署描述符web.xml文件成为可选的。
具体步骤如下:
01 接着上一节的步骤,修改ServletAnno.java文件,具体内容如下:
//******* ServletAnno.java ************** //引入包 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //注解Servlet @WebServlet(name="Servlet3.0",urlPatterns={"/Servlet3"}) public class ServletAnno extends HttpServlet { //编写doGet()方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); //获取输出流 out.println("Servlet 3.0"); //输出相应信息 out.close(); } //编写doPost()方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); //调用doGet()方法 } }
代码说明:
上述代码使用注解@WebServlet配置ServletAnno类为Servlet,其中属性name指定该Servlet的名字为Servlet 3.0,属性urlPatterns指定Servlet的路径为/Servlet3。
02 修改web.xml文件,该文件的具体内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.0"> </web-app>
代码说明:
上述代码没有增加任何内容,但是通过注解方式却与如下web.xml内容功能一样:
//******* web.xml ************** <?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.0"> <servlet> <servlet-name>Servlet3.0</servlet-name> <servlet-class>com.cjgong.servlet.ServletAnno</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet3.0</servlet-name> <url-pattern>/Servlet3</url-pattern> </servlet-mapping> </web-app>
03 最后,单击工具栏中的按钮,出现如图5.18所示的对话框实现把该项目发布到服务器。然后单击工具栏中的按钮,在出现的选项中做出如图5.19所示的选择,以实现启动服务器。最后打开浏览器,在地址栏中输入地址http://localhost:8080/annotation/Servlet3,这时运行结果如图5.20所示。
图5.18 项目发布
图5.19 启动服务器
图5.20 运行结果