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,表示没有限制。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值