Servlet配置
xml配置
配置好Tomcat后
- 定义一个类继承Servlet
- 实现接口中的方法
- 在web.xml中配置Servlet
1 2 3 4 5 6 7 8 9 10 11 12 13
| <servlet> <servlet-name>test</servlet-name> <servlet-class>com.servlet.l.ServletTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test1</url-pattern> </servlet-mapping>
|
注解配置(servlet 3.0+)
WebServlet.class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| @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 ""; }
|
执行原理
- 收到客户端请求,解析URL,获取访问Servlet的路径
- 查找xml中对应的标签体内容
- 如果有,查找对应的全类名
- Tomcat会将对应字节码文件加载进内存,并创建其对象(Class.forName())
- 调用方法
生命周期
- 被创建:执行init方法
- 默认:第一次调用时创建
- 在web.xml文件中配置在servlet标签对内增加-1
- 提供服务:执行service方法
- Servlet是单例的,多用户同时访问可能存在线程安全问题
- 解决方案:只在Servlet中定义不可修饰的变量
- 被销毁:执行destroy方法(正常关闭Tomcat)
体系结构
Servlet –接口
↑
GenericServlet –抽象类
↑
HTTPServlet –抽象类
- GenericServlet
- 只定义了一个抽象方法service
- 其余都定义了默认值
- HTTPServlet
- 封装了7种请求方式
- 一般情况下覆写doGet/doPost方法
路由原则
- 一个Servlet可以定义多个访问路径
- urlParttern的路由规则为:
- /xxx 单个路由层
- /xxx/xxx 多层路由
- .do 特殊路由 /.do才能访问
- /* 任意访问路径,优先级最低,可作为404特殊页
- {/xxx,/xxxx} 多个路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| @WebServlet({"/anno","/a"}) public class ServletTest implements Servlet{
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init ... "); }
@Override public ServletConfig getServletConfig() { return null; }
@Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("hel"); }
@Override public String getServletInfo() { return null; }
@Override public void destroy() {
} }
|
最后更新时间:
各位大爷们,评论在下最方,打赏点下面。转载请注明GitHub项目地址:https://github.com/wordfeng/wordfeng.github.io