JavaWeb学习笔记十九:Servlet中的注解式开发

Servlet注解,简化配置

  • 分析web.xml文件

    • 只是一个单标的CRUD,没有复杂的业务逻辑,很简单的功能。web.xml文件中就有如此多的配置信息。如果采用这种方式,对于一个大的项目来说,这样的话web.xml文件会非常庞大,有可能最终会达到几十兆。
    • 在web.xml文件中进行servlet信息的配置,显然开发效率比较低,每一个都需要配置一下。
    • 而且在web.xml文件中的配置是很少被修改的,所以这种配置信息能不能直接写到java类当中呢?可以的。
  • Servlet3.0版本之后,推出了各种Servlet基于注解式开发。优点是什么?

    • 开发效率高,不需要编写大量的配置信息。直接在java类上使用注解进行标注。
    • web.xml文件体积变小了。
  • 并不是说注解有了之后,web.xml文件就不需要了:

    • 有一些需要变化的信息,还是要配置到web.xml文件中。一般都是 注解+配置文件 的开发模式。
    • 一些不会经常变化修改的配置建议使用注解。一些可能会被修改的建议写到配置文件中。
  • 我们的第一个注解:

    • jakarta.servlet.annotation.WebServlet
      
    • 在Servlet类上使用:@WebServlet,WebServlet注解中有哪些属性呢?

      • name属性:用来指定Servlet的名字。等同于:<servlet-name>

      • urlPatterns属性:用来指定Servlet的映射路径。可以指定多个字符串。<url-pattern>

      • loadOnStartUp属性:用来指定在服务器启动阶段是否加载该Servlet。等同于:<load-on-startup>

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

      • initParams属性:初始化参数。等同于:<init-param>

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

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

      • @WebServlet源码

      package jakarta.servlet.annotation;
      
      import java.lang.annotation.Documented;
      import java.lang.annotation.ElementType;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      import java.lang.annotation.Target;
      
      @Target(ElementType.TYPE)
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      public @interface WebServlet {
      
          /**
           * @return name of the Servlet
           * name属性
           */
          String name() default "";
      
          /**
           * A convenience method, to allow extremely simple annotation of a class.
           * value属性
           *
           * @return array of URL patterns
           * @see #urlPatterns()
           */
          String[] value() default {};
      
          /**
           * @return array of URL patterns to which this Filter applies
           * urlPatterns属性
           */
          String[] urlPatterns() default {};
      
          /**
           * @return load on startup ordering hint
           * loadOnStartUp属性
           */
          int loadOnStartup() default -1;
      
          /**
           * @return array of initialization params for this Servlet
           */
          WebInitParam[] initParams() default {};
      
          /**
           * @return asynchronous operation supported by this Servlet
           */
          boolean asyncSupported() default false;
      
          /**
           * @return small icon for this Servlet, if present
           */
          String smallIcon() default "";
      
          /**
           * @return large icon for this Servlet, if present
           */
          String largeIcon() default "";
      
          /**
           * @return description of this Servlet, if present
           */
          String description() default "";
      
          /**
           * @return display name of this Servlet, if present
           */
          String displayName() default "";
      	}
      
  • 注解对象的使用格式:

    • @注解名称(属性名=属性值, 属性名=属性值, 属性名=属性值…)
package com.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 java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

@WebServlet(name = "hello",
        urlPatterns = {"/hello1","/hello2"},
        loadOnStartup = 1,
        initParams = {@WebInitParam(name = "username", value = "root"), @WebInitParam(name = "password", value = "root")})
// 如果注解的属性是value,属性名可以省略
//@WebServlet("/hello1")
public class HelloServlet extends HttpServlet {

    // 无参数构造方法
    public HelloServlet() {
        System.out.println("无参数构造方法执行,HelloServlet加载完成");
    }

    @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 + "<br>");

        // 获取servlet path
        String servletPath = request.getServletPath();
        out.print("servlet path = " + servletPath + "<br>");

        // 获取初始化参数
        Enumeration<String> initParameterNames = getInitParameterNames();
        while (initParameterNames.hasMoreElements()){
            String name = initParameterNames.nextElement();
            String initParameter = getInitParameter(name);
            out.print(name + "=" + initParameter + "<br>");
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值