【JavaWeb】Servlet注解方式配置

一、@WebServlet 注解源码

官方JAVAEEAPI文档下载地址:https://www.oracle.com/java/technologies/javaee/javaeetechnologies.html#javaee8

@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;

/**
 * @since Servlet 3.0
 */
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
// @Documented 是 Java 中的一个元注解(meta-annotation),它用于指示某个注解类型是否应该被包含在 JavaDoc 文档中。
@Documented
public @interface WebServlet {

    /**
     * The name of the servlet
     * 相当于 servlet-name,给Servlet起别名
     * 但是为name赋值意义不大,因为目前最重要的是将当前路径和这个servlet匹配上
     * @return the name of the servlet
     */
    String name() default "";

    /**
     * The URL patterns of the servlet
     * 如果只配置一个url-pattern ,则通过该属性即可,和urlPatterns属性互斥
     * @return the URL patterns of the servlet
     */
    String[] value() default {};

    /**
     * The URL patterns of the servlet
     * 如果要配置多个url-pattern ,需要通过该属性,和value属性互斥
     * @return the URL patterns of the servlet
     */
    String[] urlPatterns() default {};

    /**
     * The load-on-startup order of the servlet
     * 配置Servlet是否在项目加载时实例化
     * @return the load-on-startup order of the servlet
     */
    int loadOnStartup() default -1;

    /**
     * The init parameters of the servlet
     * 配置初始化参数
     * @return the init parameters of the servlet
     */
    WebInitParam[] initParams() default {};

    /**
     * Declares whether the servlet supports asynchronous operation mode.
     *
     * @return {@code true} if the servlet supports asynchronous operation mode
     * @see jakarta.servlet.ServletRequest#startAsync
     * @see jakarta.servlet.ServletRequest#startAsync( jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse)
     */
    boolean asyncSupported() default false;

    /**
     * The small-icon of the servlet
     *
     * @return the small-icon of the servlet
     */
    String smallIcon() default "";

    /**
     * The large-icon of the servlet
     *
     * @return the large-icon of the servlet
     */
    String largeIcon() default "";

    /**
     * The description of the servlet
     *
     * @return the description of the servlet
     */
    String description() default "";

    /**
     * The display name of the servlet
     *
     * @return the display name of the servlet
     */
    String displayName() default "";

}


二、@WebServlet 注解使用

使用 @WebServlet 注解替换Servlet配置

@WebServlet(
    name = "userServlet",
    //value = "/user",
    urlPatterns = {"/userServlet1","/userServlet2","/userServlet"},
    // @WebInitParam又是一个注解
    initParams = {@WebInitParam(name = "encoding",value = "UTF-8")},
    loadOnStartup = 6
)
public class UserServlet  extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String encoding = getServletConfig().getInitParameter("encoding");
        System.out.println(encoding);
        // 获取请求中的参数
        String username = req.getParameter("username");
        if("atguigu".equals(username)){
            //通过响应对象响应信息
            resp.getWriter().write("NO");
        }else{
            resp.getWriter().write("YES");
        }
    }
}

三、注意事项

1、如果这里使用了 @WebServlet 的方式来配置,就不要再使用XML的方式来配置了,否则启动会报错。

2、如果路径写错,例如少了一个 /,就会报错:启动子级时出错,看到这个错误应该第一时间想到是路径的问题。

或者两个Servlet用相同路径名了、即使用了 @WebServlet 又使用了XML的方式配置,都会报这个错

image-20240727205343577

再往下看具体的错误信息

image-20240727210308463

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值