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>");
}
}
}