Java Servlet 3.0新特性例子
Servlet3.0 特性:
1.Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置;
2.模块化编程,即将各个Servlet模块化,将配置文件也分开配置。
3.Servlet异步处理,应对复杂业务处理;
4.异步Listener,对于异步处理的创建、完成等进行监听;
5. 文件上传API简化;
备注:tomcat7.0 以上才支持servlet3.0
servlet 3.0 目的:
1:简化了开发
2:模块化的结构更易于部署
特性1---------------------------------------------------------------------------------------------------------
有了Annotation 就大大简化了web.xml ,一个servlet 的定义无需在web.xml写入任何代码:
原来定义servlet 的方式:
<servlet> <servlet-name></servlet-name> <servler-class></servlet-class> <load-on-startup></load-on-startup> <init-param> <param-name></param-name> <param-value></param-value> </init-param> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping>
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; /* * 解释: name :当前Servlet 的名称 urlPatterns :当前Servlet 请求url loadOnStartup: tomcat 启动时就初始化改Servlet initParam:初始化参数(可以是多个) name:參數名 value :参数值 */ @WebServlet(name = "MyServlet", urlPatterns = { "/myServlet" }, loadOnStartup = 1, initParams = { @WebInitParam(name = "name", value = "java developer"), @WebInitParam(name = "age", value = "20") }) public class MyServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("调用do get 方法; "); String name = getInitParameter("name"); System.out.println("获取初始化参数:" + name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } public void init(ServletConfig config) throws ServletException { System.out.println("Servlet 初始化"); super.init(config); } }
这样就完成了一个servlet 的定义,通过浏览器访问该servlet 看效果吧。
同理 filter 和 listener 的定义 也可以通过注释来完成。
注释方式:
Filter :
@WebFilter(filterName="",urlPattern={"/"});
Listener:
@WebListener
-------------------------------------------------------------------------
另外补一下servlet 中 doget、dopost、service 方法区别
当servlet 中重写了父类的 service 后,即声明了当前servlet 用来处理业务而非跳转,此时goget、dopost 方法失效。
大白话:
需要servlet 跳转的 就用 doget、dopost ,此时别重写父类的service 方法。
需要servlet 处理业务不进行跳转的 就重新父类的service方法。