第3.61课 上课 Servlet深入介绍, Servlet3.1介绍

3_61

Servlet深入介绍

 Servlet3.1介绍

  Servlet3.*版本和Servlet2.5版本的区别

注解:

在3.0之前,每增加一个Servlet、Filter、Listenrer都需要修改web.xml。

在3.0之后,不需要,可以通过注解(Annotation)来实现配置。

文件上传:

使用Servlet3.0以上版本可以自动实现文件上传,不需要第三方jar包

在之前需要第三方jar包

 

 

开发Servlet3.0的程序需要的开发环境支持

JDK 1.6+

Tomcat 7+

  注解介绍

注解和web.xml配置的加载顺序:

1.Servlet的配置如果同时存在于web.xml和注解,合并两个配置,如果配置的参数有相同,web.xml的为准。

2.监听器加载的时候,先加载web.xml文件中配置,然后才加载注解配置的。

3.过滤器的加载按照名字排序顺序加载。

4.当一个类同时存在注解配置和web.xml配置的时候,web.xml中配置无效。

   @WebServlet = servlet和servlet-mapping标签

设置方式一:

 

 

 

package com.yayadou.demo;

 

import java.io.IOException;

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 配置Servlet的请求映射

* urlPatterns 对应 请求名

* loadOnStartup 对应servlet加载时机

* initParams 对应servlet初始化参数

* @WebInitParam 对应具体的参数key 和 value

*/

@WebServlet(

urlPatterns = { "/a.do" },

loadOnStartup=1,

initParams = {

@WebInitParam(name = "charset", value = "UTF-8"),

@WebInitParam(name = "version", value = "1.0")

})

public class ServletA extends HttpServlet {

private static final long serialVersionUID = 1L;

private String charset = null;

private String version = null;

 

public void init(ServletConfig config) throws ServletException {

System.out.println("--ServletA--init--------");

charset = config.getInitParameter("charset");

version = config.getInitParameter("version");

}

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 

String username = request.getParameter("username");

response.setContentType("text/html;charset="+charset);

response.getWriter().write("欢迎大驾光临"+username);

}

}

 

   @WebFilter = filter和filter-mapping标签

package com.yayadou.demo;

 

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;

import javax.servlet.annotation.WebInitParam;

import javax.servlet.annotation.WebServlet;

 

/**

* 基于Annotation 实现的Filter过滤器

* urlPatterns 配置需要过滤的请求名

* servletNames 配置需要过滤的servlet类名

*/

@WebFilter(

urlPatterns = { "/a.do" },

servletNames={"com.yayadou.demo.ServletB"},

initParams = {

@WebInitParam(name = "charset", value = "UTF-8")

})

public class CharsetEncodingFilter implements Filter {

private String charset = null;

public void init(FilterConfig config) throws ServletException {

System.out.println("--CharsetEncodingFilter---init-----------");

charset = config.getInitParameter("charset");

}

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

System.out.println("--CharsetEncodingFilter---doFilter--1---------");

request.setCharacterEncoding(charset);

chain.doFilter(request, response);

response.setCharacterEncoding(charset);

System.out.println("--CharsetEncodingFilter---doFilter--2---------");

}

 

public void destroy() {

System.out.println("--CharsetEncodingFilter---destroy-----------");

}

}

 

   @WebListener = listener标签

package com.yayadou.demo;

 

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import javax.servlet.annotation.WebListener;

 

/**

* 基于Annotation实现的监听器

*/

@WebListener

public class MyListener implements ServletContextListener {

 

public void contextInitialized(ServletContextEvent sce) {

System.out.println("---------应用程序启动------------");

}

 

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("---------应用程序关闭------------");

}

}

   WebInitParam : 传递初始化参数到Servlet或者Filter里面

    2.5的时候,需要修改web.xml文件传初始参数

    3.0的时候,只需使用注解,即可传递参数到Servlet和Filter

Annotation

Annontation是Java5开始引入的新特征。

中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。

更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。

Annontation像一种修饰符一样,应用 类型、构造方法、方法、成员变量上。

 

注解是以“@注释名”在代码中存在的,还可以添加一些参数值。

 

元数据的作用,大致可分为三种:

编写文档,通过代码里标识的元数据生成文档;

代码分析,通过代码里标识的元数据对代码进行分析;

编译检查,通过代码里标识的元数据让编译器能实现基本的编译检查。

 

 

介绍JDK1.5内在的常用注释。

@Override 限定重写父类方法;

@Deprecated 用于表示程序元素(类, 方法)已过时;

@SuppressWarnings 抑制编译器警告。

 

 

Annotaion是一种特殊的接口

Annotation的优势:

使java程序可以自描述

Annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息

Annotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径

Annotaion不能影响程序代码的执行 (编写原则)

无论增加、删除annotation,代码都始终如一的执行

Annotation有可能在运行时抛出异常

 

 

 

 常见的Annotation

 SOURCE,CLASS 和 RUNTIME

在使用Retention时必须要提供一个RetentionPolicy的枚举类型参数。

 

RetentionPolicy有三个枚举内容:SOURCE ,CLASS, RUNTIME

 

SOURCE:

表示Annotation类型信息只保留在源码.java文件中。

 

CLASS:

表示Annotation类型信息保留在源码中,同时会保留在编译好的.class文件里面,但是在执行的时候,不会把这些信息加载到虚拟机(JVM)中去。

@Retention的 默认值 是 CLASS。

 

 

RUNTIME:

表示在源码.java文件 、.class文件和在执行的时候会把这些信息加载到JVM中去。

posted on 2018-01-31 23:12  東風★破  阅读(170)  评论(0)    收藏  举报

导航