2. Servlet3.0注解方式 @WebServlet
web.xml配置还是比较麻烦,这次使用注解方式
编写servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/test2")
public class ServletTest2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("雷霆嘎巴无情哈拉少");
response.getWriter().write("雷霆嘎巴无情哈拉少");
}
}
运行效果

刚才的@WebServlet注解是3.0提出的,那么 3.0还有哪些规范
文档: https://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

- 一个容器在启动的时候会去找 ServletContainerInitializer 实例对象,该 实例对象 必须放在
META-INF/services 目录下中一个文件名称叫 javax.servlet.ServletContainerInitializer 里面

- javax.servlet.ServletContainerInitializer

com.min.demo2.MyServletContainerInitializerTest
- 编写一个servlet

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyServletTest3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("MyServletTest3--------------");
response.getWriter().write("大威天龙");
}
}
- 编写 ServletContainerInitializer 的实现类

import com.min.demo3.MyServletTest3;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import java.util.Set;
public class MyServletContainerInitializerTest implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException { //启动时执行
//System.out.println("MyServletContainerInitializerTest-------------");
//servletContext.addServlet(名称,new出来的Servlet对象);
//servletContext.addFilter();
//servletContext.addListener();
//添加上自己定义的servlet
ServletRegistration.Dynamic dynamic = servletContext.addServlet("aaa", new MyServletTest3());
//设置启动顺序
dynamic.setLoadOnStartup(1);
//设置访问路径
dynamic.addMapping("/demo3");
}
}
- 运行效果

@HandlesTypes
@HandlesTypes(value={aaa.class}) 可以传入一个接口的字节码对象,在执行 onStartup 的时候,会把这个字节码接口对应的所有抽象类 、子接口、 实现类都获取到, 并且放在 set集合里面 保存起来

package com.min.demo2;
import com.min.demo3.MyServletTest3;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.HandlesTypes;
import java.util.Set;
@HandlesTypes(value = {IHello.class}) // 可以传入一个接口的字节码对象
public class MyServletContainerInitializerTest implements ServletContainerInitializer {
// 在执行 onStartup 的时候,会把这个字节码接口对应的所有抽象类 、子接口、 实现类都获取到, 并且放在 set集合里面 保存起来
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
//System.out.println("MyServletContainerInitializerTest-------------");
//servletContext.addServlet(名称,new出来的Servlet对象); 添加一个servlet
//servletContext.addFilter(); 添加一个 filter
//servletContext.addListener(); 添加一个listener
//添加上自己定义的servlet
ServletRegistration.Dynamic dynamic = servletContext.addServlet("aaa", new MyServletTest3());
//设置启动顺序
dynamic.setLoadOnStartup(1);
//设置访问路径
dynamic.addMapping("/demo3");
for (Class<?> aClass : set) {
System.out.println(aClass);
}
}
}
- 编写一个IHello 接口
package com.min.demo2;
public interface IHello {
}
- 编写一个子接口
package com.min.demo2;
public interface IHello_SON extends IHello {
}
- 编写一个实现类
package com.min.demo2;
public class IHello_Impl implements IHello{
}
- 编写一个抽象类
package com.min.demo2;
public abstract class IHello_Abstract implements IHello {
}
- 重启tomcat,观察打印结果

2. Servlet3.0注解方式 @WebServlet的更多相关文章
- Servlet3.0提供的@WebServlet注解引用参数详情介绍
Servlet3.0提供的@WebServlet注解: servlet3.0所提供的@webservlet注解,用来将某个类注解为一个servlet类,简化了web.xml上的servlet配置, @ ...
- 6.28笔记-servlet3.0注解配置、文件上传、过滤器、监听器
一.servlet3.0注解配置 使用javaEE6.0 支持servlet3.0 value的值就是访问路径 urlPatterns的值也是访问路径 @WebServlet(name="D ...
- Servlet3.0注解@WebInitParam和@WebServlet
在以前的servlet中我们初始化一些参数都是配置在web.xml中的,自从servlet3.0之后给我们提供了注解@WebServlet和@WebInitParam,@WebServlet是用来配置 ...
- 无意之间发现的Servlet3.0新特性@WebServlet
今天无意之间看到了一个注解,这个注解就是@WebServlet,@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Se ...
- servlet3.0注解loadOnStartup不起作用解决方案
多次尝试3.0在源码中直接用注解配置loadOnStartup=1,即web应用启动时创建servlet实例,发现不起作用,但是在web.xml配置则可以正常运行.先上源码. package lee; ...
- 【IDEA】HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题
IDEA一时爽,摸不着头的BUG火葬场 这个问题困扰我整整一天一夜,先是代码检查路径设置找不出问题,后面换tomcat版不行,抱着侥幸心理换IDEA版本意料之中还是没解决问题. 都快想秃了最后终于完美 ...
- Servlet3.0注解配置访问路径和urlParttern配置
一.Servlet用注解配置访问路径 二.IDEA的tomcat相关配置 其中,第一点的配置文件,直接在IDEA的可视化操作界面修改就可以改掉配置文件中内容: 三.urlParttern配置 其中,* ...
- 配置Servlet3.0的方式和注意事项!
- 在tomcat上全手工部署Servlet3.0
从头写java文件的方式,编译成CLASS文件,加强对SERVLET容器的理解. 稍后试试JAR和WAR包. 文件内容(跟以前用IDE的一样): HelloServlet.java: package ...
随机推荐
- ASP检测客户是否取消微信公众号
有时因为项目内需要用到检测客户是否已经取消关注微信公众号,只有没被取消执行相关模板信息发送.图文信息发送.视频语音等信息发送给客户才有意义.也可以知道多少客户还在我们的微信公众号关注内.方便后期做公众 ...
- php 数学函数bc的使用(浮点数计算)
简介: 对于任意精度的数学,PHP提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1(或0x7FFFFFFF-1). bcadd - 2个任意精度数字的加法计算 ...
- 逆向工程第005篇:跨越CM4验证机制的鸿沟(下)
一.前言 本文是逆向分析CM4系列的最后一篇,我会将该游戏的序列号验证机制分析完毕,进而编写出注册码生成器. 二.分析第二个验证循环 延续上一篇文章的内容,来到如下代码处: 图1 上述代码并没有特别需 ...
- DVWA之CSRF(跨站请求伪造攻击)
目录 Low Middle High Impossible Low 源代码: <?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pas ...
- yum makecache: error: argument timer: invalid choice: ‘fast’ (choose from ‘timer’)
这是因为版本问题,centos8没有该参数,解决办法为:去掉fast参数,就可以了 sudo yum makecache
- Spring Security 入门篇
本文是一个笔记系列,目标是完成一个基于角色的权限访问控制系统(RBAC),有基本的用户.角色.权限管理,重点在Spring Security的各种配置.万丈高楼平地起,接下来,一步一步,由浅入深,希望 ...
- 基于Mysql的编程语言(实验六、七)
本文参考1:MYSQL对sql的拓展 本文参考2:MySQL编程基础 本文参考3:MySql数据库编程 (侵删) 一.变量的定义 1.用户变量 set @变量名=表达式: 说明:无提前进行定义,直接用 ...
- Jenkins 基础篇 - 任务分类
从前面的小节中我们看到在创建 Jenkins 任务的时候有好几种类型,如果你专门安装了 Maven 相关插件,可能还会有一个[构建一个 maven 项目]的任务类型,那这些任务类型究竟有何区别,以及我 ...
- makefile的include用法
include 使用方法 : include filename.mk 作用: 暂停当前的makefile执行,去执行指定的makefile,执行完毕后继续执行当前的makefile -include ...
- ubuntu下载安装软件并创建图标
本列以安装webstorm软件 1.官网下载软件的压缩包 2.解压 umlinux@umlinux-PC:~/idea$ tar -zxvf ideaIU-2020.3.1.tar.gz 3.找到we ...