0
点赞
收藏
分享

微信扫一扫

使用Servlet注解,简化web.xml文件的配置

云卷云舒xj 2022-04-07 阅读 56
java

Servlet注解:

将之前庞大的配置信息中,一些不会经常变化修改的配置直接在java类上使用注解进行标注,减少和减轻web.xml文件体积,提高开发效率。

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

第一个注解:

jakarta.servlet.annotation.WebServlet
//在Servlet类上使用:@WebServlet
@WebServlet
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
}

WebServlet注解中的属性:

name属性:用来指定Servlet的名字。

@WebServlet(name = "hello")
等同于:
<servlet-name>hello</servlet-name>

urlPatterns属性:用来指定Servlet的映射路径。可以指定多个字符串。

value属性:和urlPatterns属性一致,都是用来指定Servlet的映射路径的。

@WebServlet(urlPatterns = {"/hello1", "/hello2", "/hello3"})
@WebServlet(urlPatterns = "/hello1")
注意:属性是一个数组,如果数组中只有一个元素,使用该注解的时候,属性值的大括号可以省略。

@WebServlet(value = {"/hello1", "/hello2", "/hello3"})
@WebServlet(value = "/hello1")
@WebServlet("/hello1")
注意:当注解的属性名是value的时候,使用注解的时候,value属性名是可以省略的。
等同于:可指定多个路径
<url-pattern>/hello1</url-pattern>
<url-pattern>/hello2</url-pattern>
<url-pattern>/hello3</url-pattern>

 loadOnStartUp属性:用来指定在服务器启动阶段是否加载该Servlet。

@WebServlet(loadOnStartup = 1)
等同于:
<load-on-startup>1</load-on-startup>

 initParams属性:注解对象的使用格式@注解名称(属性名=属性值, 属性名=属性值, 属性名=属性值....) 

@WebServlet(initParams = {@WebInitParam(name="username", value="root"), 
                          @WebInitParam(name="password", value="123")})
等同于:初始化参数
<init-param>
            <param-name>user</param-name>
            <param-value>root</param-value>
</init-param>
<init-param>
            <param-name>password</param-name>
            <param-value>123</param-value>
</init-param>

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

完整的测试代码

package com.dymolu.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", "/hello3"},
        //loadOnStartup = 1,
        initParams = {@WebInitParam(name="username", value="root"), @WebInitParam(name="password", value="123")})
public class HelloServlet extends HttpServlet {

    // 无参数构造方法  当有loadOnStartup = 1,这个参数的时候后,服务器会创建并输出
    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>");

        // 获取初始化参数
        //获取初始化参数names(所有的名字)
        Enumeration<String> names = getInitParameterNames();
        //遍历循环出所有
        while (names.hasMoreElements()) {
            //取出每一个name
            String name = names.nextElement();
            //用name获取value
            String value = getInitParameter(name);
            //页面输出
            out.print(name + "=" + value + "<br>");
        }
    }
}

 

举报

相关推荐

0 条评论