Java Servlet 3.0新特性例子

jopen 10年前

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方法。