迟到的作业,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:-------------------------------------------------------------------------------------------------------------------
未完待续