当前位置: 首页 > news >正文

使用HttpServlet和@WebServlet注解

使用HttpServlet

`HttpServlet`,它是遵循HTTP协议的一种Servlet,继承自`GenericServlet`,它根据HTTP协议的规则,完善了service方法

现在只需要继承HttpServlet来编写我们的Servlet就可以了

@WebServlet("/test")
public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("<h1>恭喜你解锁了全新玩法</h1>");
    }
}

@WebServlet注解详解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default "";

    String[] value() default {};

    String[] urlPatterns() default {};

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}

首先可以看出该注解的作用范围是类,然后name属性就是Servlet名称,而urlPatterns和value实际上是同样功能,就是代表当前Servlet的访问路径,它不仅仅可以是一个固定值,还可以进行通配符匹配

@WebServlet("/test/*")

@WebServlet("*.js")

使用@WebServlet("/")时,如果没有找到匹配当前访问路径的Servlet,那么久会使用此Servlet进行处理。

还可以为一个Servlet配置多个访问路径:

@WebServlet({"/test1", "/test2"})

loadOnStartup属性,此属性决定了是否在Tomcat启动时就加载此Servlet,默认情况下,Servlet只有在被访问时才会加载,它的默认值为-1,表示不在启动时加载,我们可以将其修改为大于等于0的数,来开启启动时加载。并且数字的大小决定了此Servlet的启动优先级。

测试例

@WebServlet(value = "/test", loadOnStartup = 1)
public class TestServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
        log.info("我被初始化了!");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("<h1>恭喜你解锁了全新玩法</h1>");
    }
}

相关文章:

  • Arthas使用指北——命令、原理及案例
  • 简历撰写——Java与.NET(当年毕业生版本)
  • zookeeper知识点扫盲
  • UE5学习笔记 判断物体是否在相机视野内
  • 移动安全实战分享
  • Springboot操作mongodb的两种方法:MongoTemplate和MongoRepository
  • 流畅的Python读书笔记-第九章-符合Python风格的对象
  • S0011基于51单片机DS18B20温控风扇仿真设计
  • express演示前端解决跨域的方法jsonp、cors
  • SCA Sentinel 分布式系统的流量防控(二)
  • 姿态分析开源工具箱MMPose安装及使用示例(2d face landmark detection)
  • Java8中anyMatch()、allMatch()、noneMatch()用法详解
  • 【SpringMVC】SpringMVC实现转发和重定向
  • 离散化模板
  • 一种加权变异的粒子群算法-附代码
  • 【Leetcode】101. 对称二叉树
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 30秒的PHP代码片段(1)数组 - Array
  • conda常用的命令
  • Date型的使用
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Druid 在有赞的实践
  • iOS 颜色设置看我就够了
  • MySQL用户中的%到底包不包括localhost?
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Protobuf3语言指南
  • Python_OOP
  • SQLServer之创建数据库快照
  • Vue全家桶实现一个Web App
  • 解析 Webpack中import、require、按需加载的执行过程
  • 浏览器缓存机制分析
  • 七牛云假注销小指南
  • 小程序 setData 学问多
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用jQuery怎么做到前后端分离
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • $.ajax()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (2)Java 简介
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (笔试题)合法字符串
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (七)Java对象在Hibernate持久化层的状态
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)负载均衡,回话保持,cookie
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net 高效开发之不可错过的实用工具
  • .net6 webapi log4net完整配置使用流程
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /boot 内存空间不够
  • @Autowired注解的实现原理
  • [ IOS ] iOS-控制器View的创建和生命周期