Servlet
疑问
- 配置servlet的时候通过urlPattern来绑定url地址访问Servlet程序,那么实际web项目实现的时候,也是通过输入绑定的url地址(例如:http://localhost:8080/helloWeb/servlet1)来执行servlet程序吗?
配置servlet
1. 要素
在web.xml中配置servlet信息:
<servlet>
<!-- servlet的内部名称,自定义 -->
<servlet-name>DemoAction</servlet-name>
<!-- servlet的类全名:包名+类名 -->
<servlet-class>com.uplooking.controller.DemoAction</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致 -->
<servlet-name>DemoAction</servlet-name>
<!-- servlet的映射路径(访问serclet的名称 -->
<url-pattern>/DemoAction</url-pattern>
</servlet-mapping>
-
servlet-name
给某个servlet类起名 -
servlet-class
写servlet类的全限定名 -
load-on-pattern
这里涉及到初始化提前这一特性:servlet接口中有一个初始化方法init(),它的作用有点类似于类中的构 造函数(接口是没有构造函数的!),写了一个类A在实现servlet接口之后,每当服务器重新启动后,类A第一次被访问的时候都会执行初始化方法init(),许多初始化要执行的操作都写在init()里面。
那么问题来了——用户第一次访问类A的时候可能初始化的时间都会等很久,有没什么办法提前当服务器启动的时候就把类A需要初始化的操作执行呢?
这就需要把初始化提前,当服务器启动的时候,服务器会按照load-on-pattern标签大小,从小到大把里面“声明”好的servlet实例都提前执行init()初始化 -
servlet-mapping
注册servlet映射——把输入的url地址映射到servlet名 -
url-pattern
url-pattern其实不止一个,很多页面都可以调用一个控制器(servlet)
servlet-mapping之url-pattern个人理解
servlet的url-pattern匹配规则
servlet3.0可以通过直接在servlet代码中配置:
2. 执行过程
-
通过web.xml配置的执行过程:
- 找到tomcat应用
- 找到tomcat下的项目
- 找到配置文件(web.xml)
- 找到"/servlet1"这个地址绑定的servlet名字(在web.xml的<servlet-mapping>中)
- 找到这个servlet名字绑定的Java类(在web.xml的<servlet>中)
-
servlet3.0注解的方式:
(日后理解之后再回头详解)
Servlet传统配置方式和Servlet3.0使用注解的方式
Servlet3.0的注解详解及监听器的执行顺序
Servlet3.0注解实现原理
3.配置过程中的一些经验
- web.xml和注解可以同时配置,但是如果初始化参数重复配置的话,web.xml会覆盖注解的参数配置
网友评论