@WebServlet属性简化了web.xml的配置,更加方便开发。
一、不使用注解开发
在不使用注解的情况下,需要配置web.xml。
1、配置Tomcat
2、 创建一个类,实现Servlet接口,并实现五个方法
import javax.servlet.*;
import java.io.IOException;
public class ServiceDemo1 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello service");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3、 配置web.xml
给该类起名demo1,配置其全类名,给demo1一个访问路径/demo1
<!--配置servlet-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.qianhan.web.servlet.ServiceDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
在访问时,会根据URL中/demo1找到url-pattern,再根据url-pattern找到servlet-name,最后根据servlet-name找到全类名servlet-class,最终访问到该类。
该方式存在的问题是:如果有很多个类需要配置,web.xml配置文件会很多内容,非常麻烦。
二、使用@WebServlet注解开发
直接在类上加上注解即可使用
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(urlPatterns = "/demo")
public class ServiceDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet3.0来了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
注解直接写在类名上,省去了起名、写全路径的操作,直接给访问路径。
三、@WebServlet属性
点开该注解的源码,可以看到有如下属性:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";
String[] value() default {};
String[] urlPatterns() default {};
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
属性名 | 属性类型 | 属性描述 |
---|---|---|
name | String | 等价于配置文件中的<servlet-name>。由于注解配置直接写类名上,故不用额外自己起名字,因此默认“ ” |
value | String[] | 访问路径,等价于urlPatterns |
urlPatterns | String[] | 访问路径,等价于配置文件中的<url-pattern>。如果配置多个路径,则用{ }包起来。 |
loadOnStartup | int | Servlet加载方式。负数:第一次访问时加载。正数:启动服务时加载。默认是负数(-1)。 |
initParams | WebInitParam[] | 初始化参数 |
asyncSupported | boolean | 是否支持异步操作,默认是false |
以上也可以在web.xml中配置,但直接在注解中配置更加方便。