首页 > 其他分享 >servlet中的注解式开发

servlet中的注解式开发

时间:2023-05-30 13:32:54浏览次数:27  
标签:jakarta value WebServlet 开发 import 注解 servlet

1. 分析oa项目中的web.xml文件   33

  - 现在只是一个单标的CRUD,没有复杂的业务逻辑,很简单的一丢丢功能。web.xml文件中就有如此多的配置信息。如果采用这种方式,对于一个大的项目来说,这样的话web.xml文件会非常庞大,有可能最终会达到几十兆。

  - 在web.xml文件中进行servlet信息的配置,显然开发效率比较低,每一个都需要配置一下。

  - 而且在web.xml文件中的配置是很少被修改的,所以这种配置信息能不能直接写到java类当中呢?可以的。

2. Servlet3.0版本之后,推出了各种Servlet基于注解式开发。优点是什么?  33

  - 开发效率高,不需要编写大量的配置信息。直接在java类上使用注解进行标注。

  - web.xml文件体积变小了。

- 并不是说注解有了之后,web.xml文件就不需要了:

  - 有一些需要变化的信息,还是要配置到web.xml文件中。一般都是 注解+配置文件 的开发模式。

  - 一些不会经常变化修改的配置建议使用注解。一些可能会被修改的建议写到配置文件中。

- 我们的第一个注解:

jakarta.servlet.annotation.WebServlet

代码在com.bjpowernode.javaweb.servlet

HelloServlet

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import javax.jws.WebParam;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

//servlet中的注解式开发  33
//这是servlet中的注解
@WebServlet(name = "Hello",urlPatterns = {"/hello1","/hello2","/hello3"}
//,loadOnStartup = 1
,initParams
        = {@WebInitParam(name="username",value="root"),@WebInitParam(name="password",value="lzl")})
public class HelloServlet extends HttpServlet {

    //无参构造方法
    public HelloServlet(){
        System.out.println("无参构造方法执行");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //获取Servlet的Name
        String servletName = getServletName();
        out.print("servlet name ="+servletName+"
");//servlet name =Hello

        //获取Servlet path
        String servletPath = request.getServletPath();
        out.print("servlet path ="+servletPath+"
");//servlet path =/hello1

        //获取初始化参数
        Enumeration names = getInitParameterNames();
        while(names.hasMoreElements()){
            String name = names.nextElement();
            String values = getInitParameter(name);
            out.print(name+"="+values+"
");
            //输出结果
            //password=lzl
            //username=root
        }

    }
}

2.1 在Servlet类上使用:@WebServlet,WebServlet注解中有哪些属性呢?33

 - value属性:当注解的属性名是value的时候,使用注解的时候,value属性名是可以省略的。

    - 注意:不是必须将所有属性都写上,只需要提供需要的。(需要什么用什么。)

  - 注意:属性是一个数组,如果数组中只有一个元素,使用该注解的时候,属性值的大括号可以省略。

com.bjpowernode.javaweb.servlet

WelcomeServlet

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

//@WebServlet(urlPatterns = {"/welcome1", "/welcome2"})     33
// 注意:当注解的属性是一个数组,并且数组中只有一个元素,大括号可以省略。
//@WebServlet(urlPatterns = "/welcome")
// 这个value属性和urlPatterns属性一致,都是用来指定Servlet的映射路径的。
//@WebServlet(value = {"/welcome1", "/welcome2"})
// 如果注解的属性名是value的话,属性名也是可以省略的。
//@WebServlet(value = "/welcome1")
@WebServlet({"/wel", "/abc", "/def"})
public class WelcomeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("欢迎学习Servlet。");
    }
}

2.2  注解对象的使用格式:  33

  - @注解名称(属性名=属性值, 属性名=属性值, 属性名=属性值....)

2.3 使用反射机制将类上面的注解进行解析   34

代码在com.bjpowernode.javaweb.servlet

ReflectAnnotation

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;

import java.lang.annotation.Annotation;

//使用反射机制将类上面的注解进行解析   34
public class ReflectAnnotation{
    public static void main(String[] args) throws ClassNotFoundException {
        //使用反射机制将类上面的注解进行解析
        //获取类Class对象
        Class welcomeServletClass
                = Class.forName("com.bjpowernode.javaweb.servlet.WelcomeServlet");
        // 获取这个类上面的注解对象
        // 先判断这个类上面有没有这个注解对象,如果有这个注解对象,就获取该注解对象。
//        boolean annotationPresent
//                = welcomeServletClass.isAnnotationPresent(WebServlet.class);
//        System.out.println(annotationPresent);
        if(welcomeServletClass.isAnnotationPresent(WebServlet.class)){//如果这个注解存在
            //获取这个类上的注解对象
            WebServlet webServletAnnotation
                    = welcomeServletClass.getAnnotation(WebServlet.class);
            //获取这个注解上的value属性值
            String[] value = webServletAnnotation.value();
            for (int i = 0; i < value.length; i++) {
                System.out.println(value[i]);
            }
        }
    }
}

标签:jakarta,value,WebServlet,开发,import,注解,servlet
From: https://blog.51cto.com/u_15784725/6378126

相关文章

  • 智能社原生的力量——原生JavaScript开发高级
    智能社原生的力量——原生JavaScript开发高级download:3w51xuebccomSpringBoot3:打造高效的Java应用程序SpringBoot是一个由Pivotal团队开发的开源框架,它基于Spring框架,旨在使Spring应用程序的开发变得更加容易和快速。最新的SpringBoot版本是3.0.0,它带来了许多新特性和功能,让我......
  • flutter开发Nuget.exe not found, trying to download or use cached version解决方法
    问题:Nuget.exenotfound,tryingtodownloadorusecachedversion解决方法:首先确保VisualStudio安装,这个是flutter构建Window应用必须的,并且安装了对应的WindowsSDK,通过VisualStudioInstaller安装管理员身份运行cmd窗口,然后执行wingetinstallMicrosoft.NuGet安装NuG......
  • 【掌握接口开发技巧 打造可靠的API接口】按关键字搜索商品
    作为一名程序员,在开发过程中经常需要开发API接口来实现数据的传输和交互等功能。本文将介绍程序员如何开发API接口,并提供一些实用的技巧。第一步:设计接口文档在开发API之前,我们需要先设计接口文档。接口文档包括接口名称,参数名称和类型,返回值格式等信息。接口文档可以帮助我们更好......
  • hi3861设备开发试验记录(一)
       经过一段时间的学习积累,想尝试做做产品。也许结果又是一次探索,但是带着问题去解决问题能更好的学习。      最初在Hi3516上使劲,但是很难搞,需要写u-boot,还要自己写驱动,进步艰难就先放一下。在Hi3861上一些简单设想更容易实现一些,Hi3861芯片是内置SRAM和Flash......
  • 【Haxe】(一)VSCode 搭建 Haxe 开发环境
    前言咱换工作啦!新工作这边需要用到的开发语言是Haxe,最近大概会写几篇笔记。Haxe的介绍就不写了,打算记录点有用的学习内容,先从搭建开发环境开始吧!当前适用版本:VSCode:CurrentLatestVersionHaxe版本:4.3.1文章最近更新日期:2023.05.30 环境配置先去Haxe官网下载语......
  • 电动汽车初创公司如何降低软件开发成本和风险
    前言  大多数原始设备制造商不会从电动汽车(EV)的销售中获利,但计划快速进入市场的电动汽车初创公司不必遭受同样的损失。 随着电池价格飙升、零部件成本高昂和销量低迷,电动汽车初创公司的盈利能力逐渐下降,必须将软件开发视为提高预算、进度和工作水平的一种方式。了解电动......
  • thinkphp正确开发系列:使用全局中间件统计当天活跃用户
    背景:pv、uv大家应该了解,不懂得搜索一下就知道了,现在有这么一个需求:统计当天有哪些用户登录了系统,也即:同一个用户,在一天之内第一次登录系统,记为1次,一天之内的后续登录(在登录状态刷新页面)忽略,项目使用的是thinkphp6,前后端分离架构。 实现方案:我们知道,php的开发框架,如:laravel、t......
  • 前端开发如何更好的避免样式冲突?级联层(CSS@layer)
    作者:vivo互联网前端团队-ZhangJiqi本文主要讲述了CSS中的级联层(CSS@layer),讨论了级联以及级联层的创建、嵌套、排序和浏览器支持情况。级联层可以用于避免样式冲突,提高代码可读性和可维护性。一、什么是级联层(CascadeLayers)?1.1级联层的官方定义我们参看Cascadingand......
  • 驱动开发:内核读写内存浮点数
    如前所述,在前几章内容中笔者简单介绍了内存读写的基本实现方式,这其中包括了CR3切换读写,MDL映射读写,内存拷贝读写,本章将在如前所述的读写函数进一步封装,并以此来实现驱动读写内存浮点数的目的。内存浮点数的读写依赖于读写内存字节的实现,因为浮点数本质上也可以看作是一个字节集,对......
  • java开发学习框架
    Java基础1.1.Java简介与安装1.2.Java基本语法1.3.数据类型与变量1.4.运算符与表达式1.5.流程控制(分支与循环)1.6.数组面向对象编程2.1.类与对象2.2.继承与多态2.3.接口与抽象类2.4.封装与访问控制2.5.重载与覆盖2.6.Java内存管理与垃圾回收Java常......