servlet3.0新的变化

简介: servlet3.0新的变化

在javaEE6出现之后,servlet3.0也随之的出现了,可以说servlet3.0的出现实现了一个巨大的突破,随着servlet3.0的出现,传统的采用web.xml来进行javaWeb开发部署的方式已经被逐渐抛弃,新的方式则是采用相应的annotation机制来运行。


在这里如果读者发现自己所搭建的servlet不能够支持annotation这种机制的话,有可能是以下的几种版本不匹配的原因:(在这里我用的服务器是tomcat)


1.Java EE6版本出现后才开始支持servlet3.0

2.tomcat7.0开始才支持servlet3.0

3.jdk1.6开始才支持servlet3.0


servlet3.0的最大优点就是简化了web的应用开发和部署,该版本新增了若干注解用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。


对于servlet3.0里面出现了的新的声明主要为以下几个内容:


@WebFilter

相应的主要属性有:

name 等价于 servlet-name标签

value 等价于 urlPatterns 标签

urlPatterns 等价于 url-pattern 标签

loadOnStartup 等价于 load-on-startup 标签

initParams 等价于 init-param 标签

asyncSupported 等价于 async-supported 标签

description 等价于 description 标签

displayName 等价于 display-name 标签


@WebInitParam

相应的主要属性有:

name 等价于 param-name标签

value 等价于 param-value标签

description 等价于 description标签


@WebFilter

相应的主要属性有:

filterName 等价于 filter-name标签

value 等价于 urlPatterns 标签

urlPatterns 等价于url-pattern标签

简单的servlet代码操作:


package com.sise.lh.test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.jws.soap.InitParam;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="servlet_001",urlPatterns="/servlet_002",
initParams={@WebInitParam(name="path",value="this is a path")})
public class servlet_001 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
    }
    public servlet_001() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        out.print("servlet3.0test!!");
        ServletConfig config=this.getServletConfig();
        String content=config.getInitParameter("path");
        System.out.println("request:"+content);
        out.close();
    }
}
复制代码


网页结果截图:


网络异常,图片无法展示
|


这个时候你会发现实际在网址处显示的路径结尾并不是servlet_001,这是因为在servlet3.0里面新增了相应的声明标志,将正式的servlet的urlPatterns参数值对路径名进行了调整,这样做的好处不会暴露出真实的servlet的路径名称,能够提高网页的安全性。


结合上边所提及的servlet,我编写了一个非常简单的过滤器做测试:


package com.sise.lh.test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
/**
 * Servlet Filter implementation class filter_test
 */
 /*这里的标签声明该过滤器是针对所有的servlet都有效果的*/
@WebFilter(filterName="filtertest",urlPatterns="/*")
public class filter_test implements Filter {
    public filter_test() {
    }
    public void destroy() {
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("this is a test!");
        chain.doFilter(request, response);
    }
    public void init(FilterConfig fConfig) throws ServletException {
    }
}
复制代码


由于上方的servlet采用的@WebInitParam声明,所以会将相应的path变量进行了初始化赋值,


而在@WebFilter里面,我们使用了urlPatterns=”/*”,这一句的意思是指针对同一个项目下方的每一个servlet文件而言,每当访问一次servlet,都会进行一次过滤操作,因此在控制台窗口我们也会见到如下的结果


网络异常,图片无法展示
|


@WebListener

它相当于旧版本的servlet里面的监听器,

其所含有的属性值value是指该监听器的描述信息。

在这里我也写了一个简单小程序让初学者来理解一下它的含义:


package com.sise.lh.test;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/*监听器是在服务器开启和关闭的时候启动的*/
@WebListener
public class ListenerTest implements ServletContextListener {
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("------服务器刚刚关闭了-------");
    }
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("------服务器刚刚开启了-------");
    }
}
复制代码


代码敲好之后直接运行服务器,楼主运行的是tomcat8.0版本,因此截图如下所示:


当服务器开启的时候:


网络异常,图片无法展示
|


当服务器关闭的时候:


网络异常,图片无法展示
|


@MultipartConfig


该标志主要是声明servlet可以对请求的MIME类型是 multipart/form-data的页面进行相应的处理,使用该声明还可以简化相应的文件上传代码量。


其相应的主要属性有:


fileSizeThreshold int 这是指当数据量大于该值时,内容将被写入文件。


location 这是指文件上传的地址


maxFileSize 这是指允许上传的文件最大值。默认值为 -1,表示没有限制。


maxRequestSize 是 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。

目录
相关文章
|
6月前
Servlet生命周期
Servlet生命周期
33 1
|
2月前
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
46 7
|
5月前
Servlet的生命周期
Servlet的生命周期
|
安全 Java 数据库连接
Servlet 生命周期
Servlet 遵循过程 Servlet 生命周期可被定义为从创建直到毁灭的整个过程: • Servlet 初始化后调用 init () 方法。 • Servlet 调用 service() 方法来处理客户端的请求。 • Servlet 销毁前调用 destroy() 方法。 • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。 init()方法 init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。 当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给
74 0
|
Java API
Servlet的环境及实现Servlet的三种方式
Servlet的环境及实现Servlet的三种方式
159 0
|
应用服务中间件 容器
Servlet生命周期、配置、创建时机及默认Servlet
Servlet生命周期、配置、创建时机及默认Servlet
234 0
|
Java
servlet中创建网站的过程
servlet中创建网站的过程
107 0
servlet中创建网站的过程
|
XML Java 数据格式
Servlet基础
Servlet基础
111 0
Servlet基础
|
Java 应用服务中间件 容器
Servlet - 基础篇
Servlet - 基础篇
197 0
Servlet - 基础篇
|
Java 应用服务中间件 数据库
Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】(中)
前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解
140 0
Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】(中)