java Servlet 3.0新特性例子

迟到的作业,Servlet3.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 的方式:


<span style="font-size:18px;"><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>
</span>

而现在主需要:


<span style="font-size:18px;">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);
	}
}
</span>


这样就完成了一个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方法。


特性2:-------------------------------------------------------------------------------------------------------------------

servlet 模块化:

以listener 为例子:


import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyLin implements ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {

	}
	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		System.out.println("自定义Linstener 启动,去xml 化");
	}
}


将此类打包成jar 文件 放到工程lib 下 即可。模块servlet 配置如此简单。


特性3:-------------------------------------------------------------------------------------------------------------------

未完待续

java Servlet 3.0新特性例子,布布扣,bubuko.com

java Servlet 3.0新特性例子

上一篇:java远程调用(rmi)常见的两个错误


下一篇:openshift 4.6 离线 baremetal IPI (全自动)安装